diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a0848f80..cdf5a78d 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -47,6 +47,31 @@ jobs: - 'config/**' - '.github/workflows/test-cmake.yml' + conventional-commit: + if: ${{ !startsWith(github.ref, 'refs/tags/') }} + runs-on: ubuntu-latest + steps: + - name: Check conventional commit format + env: + IS_PR: ${{ github.event_name == 'pull_request' }} + PR_TITLE: ${{ github.event.pull_request.title }} + COMMIT_MSG: ${{ github.event.head_commit.message }} + run: | + pattern='^(feat|fix|refactor|chore|build|ci|docs|test|perf|style|revert)(\(.+\))?: .+' + if [[ "$IS_PR" == "true" ]]; then + subject="$PR_TITLE" + label="PR title" + else + subject=$(echo "$COMMIT_MSG" | head -n1) + label="Commit message" + fi + if [[ ! "$subject" =~ $pattern ]]; then + echo "::error::$label must follow conventional commit format: type(scope)?: description" + echo " Valid types: feat, fix, refactor, chore, build, ci, docs, test, perf, style, revert" + echo " Got: '$subject'" + exit 1 + fi + format: needs: changes if: ${{ needs.changes.outputs.format == 'true' }} @@ -92,6 +117,7 @@ jobs: checks-passed: if: ${{ always() && !startsWith(github.ref, 'refs/tags/') }} needs: + - conventional-commit - format - deploy # - clice @@ -103,5 +129,5 @@ jobs: - name: Check results uses: re-actors/alls-green@release/v1 with: - allowed-skips: format,deploy,clice,vscode,cmake + allowed-skips: conventional-commit,format,deploy,clice,vscode,cmake jobs: ${{ toJSON(needs) }}