fix_: separate commit message check (#5773)
* chore_: add github action conventional commits * chore_: remove commit check from tests run * fix_: continue checking commits when breaking change found * fix_: don't run check on pr edit
This commit is contained in:
parent
bb6b0866f0
commit
8491e76a34
|
@ -0,0 +1,81 @@
|
||||||
|
name: "Conventional Commits"
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
types:
|
||||||
|
- opened
|
||||||
|
- synchronize
|
||||||
|
jobs:
|
||||||
|
main:
|
||||||
|
name: Validate format
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ env.GITHUB_HEAD_REF }}
|
||||||
|
fetch-tags: true
|
||||||
|
|
||||||
|
- name: Fetch tags
|
||||||
|
run: |
|
||||||
|
git fetch --tags --quiet
|
||||||
|
git checkout origin/${GITHUB_HEAD_REF}
|
||||||
|
|
||||||
|
- name: Check commit message
|
||||||
|
id: check_commit_message
|
||||||
|
run: |
|
||||||
|
set +e
|
||||||
|
|
||||||
|
output=$(./_assets/scripts/commit_check.sh 2>&1)
|
||||||
|
exit_code=$?
|
||||||
|
echo "exit_code=$exit_code" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
if [[ $exit_code -ne 0 ]]; then
|
||||||
|
EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64)
|
||||||
|
echo "error_message<<$EOF" >> "$GITHUB_ENV"
|
||||||
|
echo "$output" >> "$GITHUB_ENV"
|
||||||
|
echo "$EOF" >> "$GITHUB_ENV"
|
||||||
|
else
|
||||||
|
has_breaking_changes=$(echo "$output" | sed -n '2p')
|
||||||
|
echo "has_breaking_changes=$has_breaking_changes" >> $GITHUB_OUTPUT
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: "Publish failed commit messages"
|
||||||
|
uses: marocchino/sticky-pull-request-comment@v2
|
||||||
|
# When the previous steps fails, the workflow would stop. By adding this
|
||||||
|
# condition you can continue the execution with the populated error message.
|
||||||
|
if: always() && (steps.check_commit_message.outputs.exit_code != 0)
|
||||||
|
with:
|
||||||
|
header: commit-message-lint-error
|
||||||
|
message: |
|
||||||
|
Thank you for opening this pull request!
|
||||||
|
|
||||||
|
We require commits to follow the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/), but with `_` for non-breaking changes.
|
||||||
|
And it looks like your PR needs to be adjusted.
|
||||||
|
|
||||||
|
Details:
|
||||||
|
```
|
||||||
|
${{ env.error_message }}
|
||||||
|
```
|
||||||
|
|
||||||
|
- name: "Publish breaking changes message"
|
||||||
|
uses: marocchino/sticky-pull-request-comment@v2
|
||||||
|
# When the previous steps fails, the workflow would stop. By adding this
|
||||||
|
# condition you can continue the execution with the populated error message.
|
||||||
|
if: always() && (steps.check_commit_message.outputs.exit_code == 0 && steps.check_commit_message.outputs.has_breaking_changes == 'true')
|
||||||
|
with:
|
||||||
|
header: commit-message-lint-error
|
||||||
|
message: |
|
||||||
|
Thank you for opening this pull request!
|
||||||
|
|
||||||
|
Looks like you have BREAKING CHANGES in your PR.
|
||||||
|
Please make sure to update [status-desktop](https://github.com/status-im/status-desktop) and [status-mobile](https://github.com/status-im/status-mobile) clients accordingly.
|
||||||
|
|
||||||
|
# Delete a previous comment when the issue has been resolved
|
||||||
|
- name: "Delete previous comment"
|
||||||
|
if: ${{ steps.check_commit_message.outputs.exit_code == 0 && steps.check_commit_message.outputs.has_breaking_changes == 'false' }}
|
||||||
|
uses: marocchino/sticky-pull-request-comment@v2
|
||||||
|
with:
|
||||||
|
header: commit-message-lint-error
|
||||||
|
delete: true
|
3
Makefile
3
Makefile
|
@ -453,8 +453,9 @@ migration:
|
||||||
migration-check:
|
migration-check:
|
||||||
bash _assets/scripts/migration_check.sh
|
bash _assets/scripts/migration_check.sh
|
||||||
|
|
||||||
|
commit-check: SHELL := /bin/sh
|
||||||
commit-check:
|
commit-check:
|
||||||
bash _assets/scripts/commit_check.sh
|
@bash _assets/scripts/commit_check.sh
|
||||||
|
|
||||||
tag-version:
|
tag-version:
|
||||||
bash _assets/scripts/tag_version.sh $(TARGET_COMMIT)
|
bash _assets/scripts/tag_version.sh $(TARGET_COMMIT)
|
||||||
|
|
|
@ -99,18 +99,6 @@ pipeline {
|
||||||
} }
|
} }
|
||||||
}
|
}
|
||||||
|
|
||||||
stage('Commit') {
|
|
||||||
environment {
|
|
||||||
BASE_BRANCH = "${env.BASE_BRANCH}"
|
|
||||||
}
|
|
||||||
when { // https://github.com/status-im/status-go/issues/4993#issuecomment-2022685544
|
|
||||||
expression { !isTestNightlyJob() }
|
|
||||||
}
|
|
||||||
steps { script {
|
|
||||||
nix.shell('make commit-check', pure: false)
|
|
||||||
} }
|
|
||||||
}
|
|
||||||
|
|
||||||
stage('Lint') {
|
stage('Lint') {
|
||||||
steps { script {
|
steps { script {
|
||||||
nix.shell('make lint', pure: true)
|
nix.shell('make lint', pure: true)
|
||||||
|
|
|
@ -9,8 +9,9 @@ parse_commits() {
|
||||||
start_commit=${1:-origin/${BASE_BRANCH}}
|
start_commit=${1:-origin/${BASE_BRANCH}}
|
||||||
end_commit=${2:-HEAD}
|
end_commit=${2:-HEAD}
|
||||||
is_breaking_change=false
|
is_breaking_change=false
|
||||||
|
exit_code=0
|
||||||
|
|
||||||
echo "checking commits between: $start_commit $end_commit" >&2
|
echo "checking commits between: $start_commit $end_commit"
|
||||||
# Run the loop in the current shell using process substitution
|
# Run the loop in the current shell using process substitution
|
||||||
while IFS= read -r message || [ -n "$message" ]; do
|
while IFS= read -r message || [ -n "$message" ]; do
|
||||||
# Check if commit message follows conventional commits format
|
# Check if commit message follows conventional commits format
|
||||||
|
@ -18,15 +19,17 @@ parse_commits() {
|
||||||
# Check for breaking changes
|
# Check for breaking changes
|
||||||
if [[ ${BASH_REMATCH[3]} == *'!'* ]]; then
|
if [[ ${BASH_REMATCH[3]} == *'!'* ]]; then
|
||||||
is_breaking_change=true
|
is_breaking_change=true
|
||||||
break
|
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "Commit message \"$message\" is not well-formed. Aborting merge. We use https://www.conventionalcommits.org/en/v1.0.0/ but with _ for non-breaking changes"
|
echo "Commit message \"$message\" is not well-formed"
|
||||||
# Uncomment the line below if you want to exit on an invalid commit message
|
exit_code=1
|
||||||
exit 1
|
|
||||||
fi
|
fi
|
||||||
done < <(git log --format=%s "$start_commit".."$end_commit")
|
done < <(git log --format=%s "$start_commit".."$end_commit")
|
||||||
|
|
||||||
|
if [[ $exit_code -ne 0 ]]; then
|
||||||
|
exit ${exit_code}
|
||||||
|
fi
|
||||||
|
|
||||||
echo "$is_breaking_change"
|
echo "$is_breaking_change"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue