99    branches :
1010      - main 
1111      - release-* 
12+   merge_group :
13+     branches :
14+       - main 
15+       #  - release-*
1216
1317permissions :
1418  contents : read 
@@ -24,43 +28,107 @@ jobs:
2428    strategy :
2529      fail-fast : false 
2630      matrix :
27-         os :
28-           - ubuntu-latest 
29-           - windows-latest 
30-           - macos-latest 
31-         node-version :
32-           - ' 22' 
33-           - ' 20' 
34-           - ' 18' 
35-           - ' 16' 
36-           - ' 14' 
37-         bundle :
38-           - ' true' 
39-         include :
40-           - node-version : ' lts/*' 
31+         config :
32+           #  Main builds
33+           - os : ubuntu-latest 
34+             node-version : ' 24' 
35+             bundle : true 
36+ 
37+           #  Other builds (skipped in merge queues)
38+           - os : windows-latest 
39+             node-version : ' 24' 
40+             bundle : true 
41+             skip : ${{ github.event_name == 'merge_group' }} 
42+           - os : macos-latest 
43+             node-version : ' 24' 
44+             bundle : true 
45+             skip : ${{ github.event_name == 'merge_group' }} 
46+           - os : ubuntu-latest 
47+             node-version : ' 22' 
48+             bundle : true 
49+           - os : windows-latest 
50+             node-version : ' 22' 
51+             bundle : true 
52+             skip : ${{ github.event_name == 'merge_group' }} 
53+           #  Skip macOS for this version; resources are limited.
54+           #  - os: macos-latest
55+           #    node-version: '22'
56+           #    bundle: true
57+           #    skip: ${{ github.event_name == 'merge_group' }}
58+           - os : ubuntu-latest 
59+             node-version : ' 20' 
60+             bundle : true 
61+           - os : windows-latest 
62+             node-version : ' 20' 
63+             bundle : true 
64+             skip : ${{ github.event_name == 'merge_group' }} 
65+           #  Skip macOS for this version; resources are limited.
66+           #  - os: macos-latest
67+           #    node-version: '20'
68+           #    bundle: true
69+           #    skip: ${{ github.event_name == 'merge_group' }}
70+           - os : ubuntu-latest 
71+             node-version : ' 18' 
72+             bundle : true 
73+           - os : windows-latest 
74+             node-version : ' 18' 
75+             bundle : true 
76+             skip : ${{ github.event_name == 'merge_group' }} 
77+           #  Skip macOS for this version; resources are limited.
78+           #  - os: macos-latest
79+           #    node-version: '18'
80+           #    bundle: true
81+           #    skip: ${{ github.event_name == 'merge_group' }}
82+           - os : ubuntu-latest 
83+             node-version : ' 16' 
84+             bundle : true 
85+           - os : windows-latest 
86+             node-version : ' 16' 
87+             bundle : true 
88+             skip : ${{ github.event_name == 'merge_group' }} 
89+           - os : macos-latest 
90+             node-version : ' 16' 
91+             bundle : true 
92+             skip : ${{ github.event_name == 'merge_group' }} 
93+           - os : ubuntu-latest 
94+             node-version : ' 14' 
95+             bundle : true 
96+             skip : ${{ github.event_name == 'merge_group' }} 
97+           - os : windows-latest 
98+             node-version : ' 14' 
99+             bundle : true 
100+             skip : ${{ github.event_name == 'merge_group' }} 
101+           #  No Node 14 on ARM macOS
102+           #  - os: macos-latest
103+           #    node-version: '14'
104+           #    bundle: true
105+           #    skip: ${{ github.event_name == 'merge_group' }}
106+ 
107+           - os : ubuntu-latest 
108+             node-version : ' lts/*' 
41109            bundle : false 
42-             os : ubuntu-latest 
110+             skip : ${{ github.event_name == 'merge_group' }} 
111+ 
43112        exclude :
44-           #  No Node 14 on ARM macOS
45-           - node-version : ' 14' 
46-             os : macos-latest 
113+           - config :
114+               skip : true 
47115
48-     runs-on : ${{ matrix.os }} 
49-     name : Test Node ${{ matrix.node-version }} on ${{ matrix.os }}${{ (!matrix.bundle && ' with --no-bundle') || '' }} 
116+     runs-on : ${{ matrix.config. os }} 
117+     name : Test Node ${{ matrix.config. node-version }} on ${{ matrix.config. os }}${{ (!matrix.config .bundle && ' with --no-bundle') || '' }} 
50118
51119    steps :
52120      - uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683  #  v4.2.2
53-       - name : Use node version ${{ matrix.node-version }} 
121+       - name : Use node version ${{ matrix.config. node-version }} 
54122        uses : actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020  #  v4.4.0
55123        with :
56-           node-version : ${{ matrix.node-version }} 
124+           node-version : ${{ matrix.config. node-version }} 
57125          check-latest : true 
58126      - run : npm ci 
59127
60128      - name : Tests 
61129        id : test 
62130        #  run tests, but lint separately
63-         run : npm run test -- --no-lint --bundle=${{ matrix.bundle }} 
131+         run : npm run test -- --no-lint --bundle=${{ matrix.config. bundle }} 
64132
65133      - name : Print baseline diff on failure 
66134        if : ${{ failure() && steps.test.conclusion == 'failure' }} 
70138          git diff --staged --exit-code 
71139
72140   coverage :
141+     if : ${{ github.event_name != 'merge_group' }} 
142+ 
73143    runs-on :
74144      - ' self-hosted' 
75145      - ' 1ES.Pool=TypeScript-1ES-GitHub-Large' 
@@ -294,6 +364,8 @@ jobs:
294364        run : npx hereby build-src --built 
295365
296366  baselines :
367+     if : ${{ github.event_name != 'merge_group' }} 
368+ 
297369    runs-on : ubuntu-latest 
298370
299371    steps :
@@ -338,3 +410,27 @@ jobs:
338410        with :
339411          name : fix_baselines.patch 
340412          path : fix_baselines.patch 
413+ 
414+   required :
415+     runs-on : ubuntu-latest 
416+     if : ${{ always() }} 
417+     needs :
418+       - test 
419+       - coverage 
420+       - lint 
421+       - knip 
422+       - format 
423+       - browser-integration 
424+       - typecheck 
425+       - smoke 
426+       - package-size 
427+       - misc 
428+       - self-check 
429+       - baselines 
430+ 
431+     steps :
432+       - name : Check required jobs 
433+         env :
434+           NEEDS : ${{ toJson(needs) }} 
435+         run : | 
436+           ! echo $NEEDS | jq -e 'to_entries[] | { job: .key, result: .value.result } | select((.result == "success" or .result == "skipped") | not)' 
0 commit comments