Skip to content

Commit

Permalink
fix_: separate commit message check (#5773)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
igor-sirotin authored Aug 27, 2024
1 parent bb6b086 commit 8491e76
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 18 deletions.
81 changes: 81 additions & 0 deletions .github/workflows/commit-check.yml
Original file line number Diff line number Diff line change
@@ -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 changes: 2 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -453,8 +453,9 @@ migration:
migration-check:
bash _assets/scripts/migration_check.sh

commit-check: SHELL := /bin/sh
commit-check:
bash _assets/scripts/commit_check.sh
@bash _assets/scripts/commit_check.sh

tag-version:
bash _assets/scripts/tag_version.sh $(TARGET_COMMIT)
Expand Down
12 changes: 0 additions & 12 deletions _assets/ci/Jenkinsfile.tests
Original file line number Diff line number Diff line change
Expand Up @@ -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') {
steps { script {
nix.shell('make lint', pure: true)
Expand Down
13 changes: 8 additions & 5 deletions _assets/scripts/commit_check.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,24 +9,27 @@ parse_commits() {
start_commit=${1:-origin/${BASE_BRANCH}}
end_commit=${2:-HEAD}
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
while IFS= read -r message || [ -n "$message" ]; do
# Check if commit message follows conventional commits format
if [[ $message =~ ^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\(.*\))?(\_|!):.*$ ]]; then
# Check for breaking changes
if [[ ${BASH_REMATCH[3]} == *'!'* ]]; then
is_breaking_change=true
break
fi
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"
# Uncomment the line below if you want to exit on an invalid commit message
exit 1
echo "Commit message \"$message\" is not well-formed"
exit_code=1
fi
done < <(git log --format=%s "$start_commit".."$end_commit")

if [[ $exit_code -ne 0 ]]; then
exit ${exit_code}
fi

echo "$is_breaking_change"
}

Expand Down

0 comments on commit 8491e76

Please sign in to comment.