1name: Test
2
3on:
4 pull_request:
5
6concurrency:
7 group: test-${{ github.workflow }}-${{ github.event_name }}-${{ github.event.pull_request.number || github.run_id }}
8 cancel-in-progress: true
9
10permissions: {}
11
12jobs:
13 prepare:
14 runs-on: ubuntu-24.04-arm
15 outputs:
16 merge-group: ${{ steps.files.outputs.merge-group }}
17 mergedSha: ${{ steps.prepare.outputs.mergedSha }}
18 pr: ${{ steps.files.outputs.pr }}
19 push: ${{ steps.files.outputs.push }}
20 targetSha: ${{ steps.prepare.outputs.targetSha }}
21 steps:
22 - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
23 with:
24 sparse-checkout-cone-mode: true # default, for clarity
25 sparse-checkout: |
26 ci/github-script
27 - id: prepare
28 uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
29 with:
30 script: |
31 require('./ci/github-script/prepare.js')({
32 github,
33 context,
34 core,
35 // Review comments will be posted by the main PR workflow on the pull_request_target event.
36 dry: false,
37 })
38
39 - name: Determine changed files
40 id: files
41 uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0
42 with:
43 script: |
44 const files = (await github.paginate(github.rest.pulls.listFiles, {
45 ...context.repo,
46 pull_number: context.payload.pull_request.number,
47 per_page: 100,
48 })).map(file => file.filename)
49
50 if (files.some(file => [
51 '.github/workflows/lint.yml',
52 '.github/workflows/merge-group.yml',
53 '.github/workflows/test.yml',
54 ].includes(file))) core.setOutput('merge-group', true)
55
56 if (files.some(file => [
57 '.github/actions/checkout/action.yml',
58 '.github/workflows/build.yml',
59 '.github/workflows/check.yml',
60 '.github/workflows/eval.yml',
61 '.github/workflows/labels.yml',
62 '.github/workflows/lint.yml',
63 '.github/workflows/pr.yml',
64 '.github/workflows/reviewers.yml',
65 '.github/workflows/test.yml',
66 ].includes(file))) core.setOutput('pr', true)
67
68 if (files.some(file => [
69 '.github/workflows/eval.yml',
70 '.github/workflows/push.yml',
71 '.github/workflows/test.yml',
72 ].includes(file))) core.setOutput('push', true)
73
74 merge-group:
75 if: needs.prepare.outputs.merge-group
76 name: Merge Group
77 needs: [prepare]
78 uses: ./.github/workflows/merge-group.yml
79 # Those are actually only used on the merge_group event, but will throw an error if not set.
80 permissions:
81 statuses: write
82 secrets:
83 CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
84 with:
85 mergedSha: ${{ needs.prepare.outputs.mergedSha }}
86 targetSha: ${{ needs.prepare.outputs.targetSha }}
87
88 pr:
89 if: needs.prepare.outputs.pr
90 name: PR
91 needs: [prepare]
92 uses: ./.github/workflows/pr.yml
93 # Those are actually only used on the pull_request_target event, but will throw an error if not set.
94 permissions:
95 issues: write
96 pull-requests: write
97 statuses: write
98 secrets:
99 CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
100 NIXPKGS_CI_APP_PRIVATE_KEY: ${{ secrets.NIXPKGS_CI_APP_PRIVATE_KEY }}
101
102 push:
103 if: needs.prepare.outputs.push
104 name: Push
105 needs: [prepare]
106 uses: ./.github/workflows/push.yml
107 # Those are not actually used on the push or pull_request events, but will throw an error if not set.
108 permissions:
109 statuses: write
110 secrets:
111 CACHIX_AUTH_TOKEN: ${{ secrets.CACHIX_AUTH_TOKEN }}
112 with:
113 mergedSha: ${{ needs.prepare.outputs.mergedSha }}