summaryrefslogtreecommitdiff
path: root/.github/workflows/check_commit_messages.yml
blob: 8fc5dd5cdf91045f296139e33df59f5529f95cbc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
name: Check commit prefix

on:
  pull_request:
    types: [edited, opened, synchronize, reopened, ready_for_review]

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  check-commit-prefix:
    if: startsWith(github.event.pull_request.base.ref, 'stable/')
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Calculate commit prefix
        id: vars
        run: |
          BASE="${{ github.event.pull_request.base.ref }}"
          echo "BASE=$BASE" >> $GITHUB_ENV
          VERSION="${BASE#stable/}"
          echo "prefix=[$VERSION]" >> $GITHUB_OUTPUT

      - name: Check PR title prefix
        env:
          TITLE: ${{ github.event.pull_request.title }}
        run: |
          PREFIX="${{ steps.vars.outputs.prefix }}"
          if [[ "$TITLE" != "$PREFIX"* ]]; then
            echo "❌ PR title must start with the required prefix: $PREFIX"
            exit 1
          fi
          echo "✅ PR title has the required prefix."

      - name: Fetch relevant branches
        run: |
          git fetch origin $BASE:base
          git fetch origin pull/${{ github.event.pull_request.number }}/head:pr

      - name: Check commit messages prefix
        run: |
          PREFIX="${{ steps.vars.outputs.prefix }}"
          COMMITS=$(git rev-list base..pr)
          echo "Checking commit messages for required prefix: $PREFIX"
          FAIL=0
          for SHA in $COMMITS; do
            MSG=$(git log -1 --pretty=%s $SHA)
            echo "Checking commit $SHA: $MSG"
            if [[ "$MSG" != "$PREFIX"* ]]; then
              echo "❌ Commit $SHA must start with the required prefix: $PREFIX"
              FAIL=1
            fi
          done

          if [[ $FAIL -eq 1 ]]; then
            echo "One or more commit messages are missing the required prefix."
            exit 1
          fi

          echo "✅ All commits have the required prefix."