1919permissions :
2020 contents : write # create/update the draft release
2121
22+ # Action pins run on the Node 24 runtime. GitHub deprecated Node 20 on the runners (2025-09-19) and
23+ # was force-running the old v4 pins on Node 24 with a warning per step; these majors target node24
24+ # natively, so the shim (and the warning) is gone. They need Actions Runner >= 2.327.1 — the hosted
25+ # images are well past that (2.335.1 as of the v0.9.2 build) and self-update, so no action needed.
26+ # The majors were chosen against how THIS workflow uses them, not blindly:
27+ # · setup-node v6 limited automatic caching to npm — not used here; npm caching is the explicit
28+ # actions/cache step below, so the change is a no-op for us.
29+ # · checkout v7 blocks fork checkouts for pull_request_target/workflow_run — neither is a trigger.
30+ # · upload-artifact v7 added unzipped "direct uploads" behind `archive:` — opt-in, default unchanged.
31+ # · download-artifact v8 now ERRORS on a digest mismatch (was a warning). Deliberate: a corrupted
32+ # app bundle must not reach a release we then sign and notarize. Recoverable by re-running the job.
2233jobs :
2334 # Cheap gate: run the extension unit tests before spending ~1h of macOS build minutes.
2435 test :
2536 runs-on : ubuntu-latest
2637 steps :
27- - uses : actions/checkout@v4
28- - uses : actions/setup-node@v4
38+ - uses : actions/checkout@v7
39+ - uses : actions/setup-node@v7
2940 with :
3041 node-version : " 24"
3142 - name : Extension unit tests
@@ -79,12 +90,12 @@ jobs:
7990 # the whole class of flake goes away. Same spirit as the GITHUB_TOKEN mitigation above.
8091 PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD : " 1"
8192 steps :
82- - uses : actions/checkout@v4
83- - uses : actions/setup-node@v4
93+ - uses : actions/checkout@v7
94+ - uses : actions/setup-node@v7
8495 with :
8596 node-version : " 24" # bootstrap.sh checks the .nvmrc major; 24.x satisfies the 1.126 pin
8697 - name : Cache npm downloads
87- uses : actions/cache@v4
98+ uses : actions/cache@v6
8899 with :
89100 path : ~/.npm
90101 key : npm-${{ matrix.arch }}-${{ hashFiles('scripts/bootstrap.sh') }}
98109 - name : Zip the unsigned app
99110 run : ditto -c -k --sequesterRsrc --keepParent "VSCode-darwin-${{ matrix.arch }}/LevelCode.app" "UNSIGNED-LevelCode-${{ matrix.arch }}.app.zip"
100111 - name : Upload app artifact
101- uses : actions/upload-artifact@v4
112+ uses : actions/upload-artifact@v7
102113 with :
103114 name : UNSIGNED-LevelCode-${{ matrix.arch }}
104115 path : UNSIGNED-LevelCode-${{ matrix.arch }}.app.zip
@@ -111,7 +122,7 @@ jobs:
111122 if : startsWith(github.ref, 'refs/tags/')
112123 runs-on : ubuntu-latest
113124 steps :
114- - uses : actions/download-artifact@v4
125+ - uses : actions/download-artifact@v8
115126 with :
116127 path : apps
117128 merge-multiple : true
0 commit comments