|
1 | 1 | name: PR Quality Check |
2 | 2 | defaults: |
3 | 3 | run: |
4 | | - shell: bash # Explicitly sets pipeline to fail if any subprocess fails |
| 4 | + shell: bash |
5 | 5 | on: pull_request |
| 6 | + |
6 | 7 | jobs: |
7 | 8 | link-ticket: |
8 | 9 | runs-on: ubuntu-latest |
9 | 10 | steps: |
| 11 | + # 1) Validate the branch name without using shell (no user input in `run`) |
10 | 12 | - name: Check ticket name conforms to requirements |
11 | | - run: echo ${{ github.event.pull_request.head.ref }} | grep -i -E -q "(apm-[0-9]+)|(amb-[0-9]+)|(dependabot\/)" |
| 13 | + id: validate-branch |
| 14 | + uses: actions/github-script@v7 |
| 15 | + with: |
| 16 | + script: | |
| 17 | + const ref = context.payload.pull_request?.head?.ref || ''; |
| 18 | + const ok = /(apm-\d+)|(amb-\d+)|(dependabot\/)/i.test(ref); |
| 19 | + if (!ok) { |
| 20 | + core.setFailed(`Branch name "${ref}" must match /(apm-[0-9]+)|(amb-[0-9]+)|(dependabot\\/)/i`); |
| 21 | + } |
12 | 22 |
|
| 23 | + # 2) Extract the ticket name safely and expose it as an output |
13 | 24 | - name: Grab ticket name |
14 | | - if: contains(github.event.pull_request.head.ref, 'apm-') || contains(github.event.pull_request.head.ref, 'APM-') || contains(github.event.pull_request.head.ref, 'amb-') || contains(github.event.pull_request.head.ref, 'AMB-') |
15 | | - run: echo ::set-env name=TICKET_NAME::$(echo ${{ github.event.pull_request.head.ref }} | grep -i -o '\(apm-[0-9]\+\)\|\(amb-[0-9]\+\)' | tr '[:lower:]' '[:upper:]') |
16 | | - env: |
17 | | - ACTIONS_ALLOW_UNSECURE_COMMANDS: true |
| 25 | + id: ticket |
| 26 | + if: contains(github.event.pull_request.head.ref, 'apm-') || |
| 27 | + contains(github.event.pull_request.head.ref, 'APM-') || |
| 28 | + contains(github.event.pull_request.head.ref, 'amb-') || |
| 29 | + contains(github.event.pull_request.head.ref, 'AMB-') |
| 30 | + uses: actions/github-script@v7 |
| 31 | + with: |
| 32 | + result-encoding: string |
| 33 | + script: | |
| 34 | + const ref = context.payload.pull_request?.head?.ref || ''; |
| 35 | + const m = ref.match(/(apm-\d+)|(amb-\d+)/i); |
| 36 | + return m ? m[0].toUpperCase() : ''; |
18 | 37 |
|
| 38 | + # 3) Comment with link to JIRA ticket, using the safe output (no env mutation) |
19 | 39 | - name: Comment on PR with link to JIRA ticket |
20 | | - if: contains(github.event.pull_request.head.ref, 'apm-') || contains(github.event.pull_request.head.ref, 'APM-') || contains(github.event.pull_request.head.ref, 'amb-') || contains(github.event.pull_request.head.ref, 'AMB-') |
| 40 | + if: (contains(github.event.pull_request.head.ref, 'apm-') || |
| 41 | + contains(github.event.pull_request.head.ref, 'APM-') || |
| 42 | + contains(github.event.pull_request.head.ref, 'amb-') || |
| 43 | + contains(github.event.pull_request.head.ref, 'AMB-')) && |
| 44 | + steps.ticket.outputs.result != '' |
21 | 45 | uses: unsplash/comment-on-pr@master |
22 | 46 | env: |
23 | 47 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
24 | 48 | with: |
25 | 49 | msg: | |
26 | 50 | This branch is work on a ticket in the NHS Digital AMB JIRA Project. Here's a handy link to the ticket: |
27 | | - # [${{ env.TICKET_NAME }}](https://nhsd-jira.digital.nhs.uk/browse/${{ env.TICKET_NAME}}) |
28 | | - |
| 51 | + # [${{ steps.ticket.outputs.result }}](https://nhsd-jira.digital.nhs.uk/browse/${{ steps.ticket.outputs.result }}) |
| 52 | +
|
| 53 | + # 4) Comment with link to Spec (pure expression usage is fine) |
29 | 54 | - name: Comment on PR with link to Spec |
30 | | - if: contains(github.event.pull_request.head.ref, 'apm-') || contains(github.event.pull_request.head.ref, 'APM-') || contains(github.event.pull_request.head.ref, 'apmspii-') || contains(github.event.pull_request.head.ref, 'APMSPII-') || contains(github.event.pull_request.head.ref, 'adz-') || contains(github.event.pull_request.head.ref, 'ADZ-') |
| 55 | + if: contains(github.event.pull_request.head.ref, 'apm-') || |
| 56 | + contains(github.event.pull_request.head.ref, 'APM-') || |
| 57 | + contains(github.event.pull_request.head.ref, 'apmspii-') || |
| 58 | + contains(github.event.pull_request.head.ref, 'APMSPII-') || |
| 59 | + contains(github.event.pull_request.head.ref, 'adz-') || |
| 60 | + contains(github.event.pull_request.head.ref, 'ADZ-') |
31 | 61 | uses: unsplash/comment-on-pr@master |
32 | 62 | env: |
33 | 63 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
|
0 commit comments