@htekdev/actions-debugger 1.0.23 → 1.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/errors/caching-artifacts/artifact-minimum-retention-one-day.yml +153 -0
- package/errors/caching-artifacts/cache-api-propagation-delay-post-save.yml +128 -0
- package/errors/caching-artifacts/cache-backend-internal-error-skipped.yml +75 -0
- package/errors/caching-artifacts/cache-hit-step-id-case-sensitive-mismatch.yml +95 -0
- package/errors/caching-artifacts/cache-save-post-step-skipped-on-failure.yml +114 -0
- package/errors/concurrency-timing/deploy-pages-in-progress-deployment-wedged.yml +70 -0
- package/errors/concurrency-timing/deployment-review-timeout-expired.yml +88 -0
- package/errors/concurrency-timing/job-concurrency-scope-per-run-not-global.yml +81 -0
- package/errors/concurrency-timing/merge-queue-concurrency-cancel-blocks-all.yml +86 -0
- package/errors/concurrency-timing/reusable-workflow-github-workflow-context-cancel.yml +124 -0
- package/errors/concurrency-timing/runner-scale-set-jobs-never-start.yml +123 -0
- package/errors/concurrency-timing/runner-temp-dir-race-concurrent-workers.yml +90 -0
- package/errors/known-unsolved/artifact-download-url-unauthenticated-404.yml +98 -0
- package/errors/known-unsolved/checkout-v6-credentials-docker-run-manual.yml +105 -0
- package/errors/known-unsolved/concurrency-groups-repo-scoped-only.yml +138 -0
- package/errors/known-unsolved/matrix-256-job-limit.yml +142 -0
- package/errors/known-unsolved/merge-group-paths-filter-not-supported.yml +137 -0
- package/errors/known-unsolved/no-job-allow-failure.yml +73 -0
- package/errors/known-unsolved/schedule-cron-hours-long-queue-drift.yml +101 -0
- package/errors/permissions-auth/checkout-persist-credentials-token-write.yml +90 -0
- package/errors/permissions-auth/create-github-app-token-cross-job-token-revoked.yml +95 -0
- package/errors/permissions-auth/github-token-contents-write-missing-git-push.yml +117 -0
- package/errors/permissions-auth/org-actions-policy-blocks-unapproved-action.yml +106 -0
- package/errors/runner-environment/codeql-action-v2-deprecated.yml +110 -0
- package/errors/runner-environment/macos-26-openssl-3-system-library-breaking.yml +114 -0
- package/errors/runner-environment/macos-26-ruby-34-default-upgrade.yml +114 -0
- package/errors/runner-environment/macos-26-xcode-default-265-pin-required.yml +99 -0
- package/errors/runner-environment/macos-latest-label-switches-to-macos26.yml +127 -0
- package/errors/runner-environment/node20-removed-toolcache-default-node22.yml +104 -0
- package/errors/runner-environment/powershell-74-76-threadjob-module-rename.yml +124 -0
- package/errors/runner-environment/self-hosted-runner-not-found.yml +134 -0
- package/errors/runner-environment/self-hosted-runner-selinux-service-exec-failure.yml +116 -0
- package/errors/runner-environment/service-container-no-healthcheck.yml +158 -0
- package/errors/runner-environment/setup-node-v5-corepack-pnpm-not-found.yml +101 -0
- package/errors/runner-environment/setup-node-yarn-not-installed-self-hosted.yml +76 -0
- package/errors/runner-environment/setup-python-externally-managed-env-error.yml +95 -0
- package/errors/runner-environment/windows-2019-runner-retired-june2025.yml +118 -0
- package/errors/runner-environment/windows-2022-docker-daemon-not-started.yml +108 -0
- package/errors/silent-failures/cache-hit-output-string-not-boolean.yml +96 -0
- package/errors/silent-failures/checkout-lfs-pointer-not-content.yml +105 -0
- package/errors/silent-failures/reusable-workflow-output-skipped-contains-secret.yml +115 -0
- package/errors/silent-failures/setup-node-silent-download-exit-zero.yml +105 -0
- package/errors/silent-failures/setup-python-truncated-manifest-silent-exit.yml +111 -0
- package/errors/silent-failures/undefined-env-expression-empty-string-silent.yml +115 -0
- package/errors/silent-failures/windows-powershell-github-output-bash-syntax.yml +118 -0
- package/errors/triggers/fork-pr-first-time-contributor-approval-required.yml +142 -0
- package/errors/triggers/on-push-branches-glob-star-no-slash-match.yml +78 -0
- package/errors/triggers/pull-request-target-env-protection-default-branch-eval.yml +117 -0
- package/errors/triggers/required-status-check-renamed-never-passes.yml +87 -0
- package/errors/triggers/schedule-cron-self-hosted-runner-not-triggered.yml +107 -0
- package/errors/yaml-syntax/composite-action-run-shell-missing.yml +90 -0
- package/errors/yaml-syntax/composite-action-secrets-context-unavailable.yml +99 -0
- package/errors/yaml-syntax/github-script-octokit-renamed-to-github.yml +130 -0
- package/errors/yaml-syntax/labeler-v5-config-format-breaking.yml +67 -0
- package/errors/yaml-syntax/runs-on-expression-array-syntax-error.yml +121 -0
- package/errors/yaml-syntax/setup-go-matrix-version-float-coercion.yml +69 -0
- package/package.json +1 -1
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
id: runner-environment-061
|
|
2
|
+
title: "CodeQL Action v1/v2 Deprecated — Hard Failure with Upgrade Required Message"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- codeql
|
|
7
|
+
- code-scanning
|
|
8
|
+
- deprecated
|
|
9
|
+
- v2
|
|
10
|
+
- v3
|
|
11
|
+
- security
|
|
12
|
+
- breaking-change
|
|
13
|
+
patterns:
|
|
14
|
+
- regex: "CodeQL Action major versions v1 and v2 have been deprecated"
|
|
15
|
+
flags: "i"
|
|
16
|
+
- regex: "Please update all occurrences of the CodeQL Action in your workflow files to v3"
|
|
17
|
+
flags: "i"
|
|
18
|
+
- regex: "github/codeql-action/.*@v[12]\\b"
|
|
19
|
+
flags: "i"
|
|
20
|
+
error_messages:
|
|
21
|
+
- "Error: CodeQL Action major versions v1 and v2 have been deprecated. Please update all occurrences of the CodeQL Action in your workflow files to v3. For more information, see https://github.blog/changelog/2025-01-10-code-scanning-codeql-action-v2-is-now-deprecated/"
|
|
22
|
+
- "CodeQL Action v2 is now deprecated. Upgrade to v3."
|
|
23
|
+
root_cause: |
|
|
24
|
+
GitHub retired CodeQL Action major versions v1 and v2 in January 2025. After the
|
|
25
|
+
retirement date, any workflow referencing `github/codeql-action/*@v1` or
|
|
26
|
+
`github/codeql-action/*@v2` produces a hard failure with the above error message
|
|
27
|
+
and does NOT perform code scanning.
|
|
28
|
+
|
|
29
|
+
The CodeQL action family includes multiple steps that must ALL be updated together:
|
|
30
|
+
- `github/codeql-action/init@v2`
|
|
31
|
+
- `github/codeql-action/autobuild@v2`
|
|
32
|
+
- `github/codeql-action/analyze@v2`
|
|
33
|
+
- `github/codeql-action/upload-sarif@v2`
|
|
34
|
+
- `github/codeql-action/resolve-environment@v2`
|
|
35
|
+
|
|
36
|
+
Missing even one of these (leaving it at `@v2` while updating others to `@v3`)
|
|
37
|
+
causes the workflow to fail. Repos created before 2024 using the default
|
|
38
|
+
GitHub-provided Code Scanning setup workflow are the most common source of
|
|
39
|
+
stale v2 references.
|
|
40
|
+
|
|
41
|
+
This is distinct from the generic `deprecated-action-version-auto-rejected` pattern
|
|
42
|
+
(runner-environment-037) which covers specific minor/patch versions of actions/cache,
|
|
43
|
+
actions/checkout, etc. The CodeQL deprecation applies to entire major versions v1 and v2
|
|
44
|
+
and produces a specific, different error message.
|
|
45
|
+
fix: |
|
|
46
|
+
Replace every `github/codeql-action/*@v2` (and `@v1`) reference in all workflow files
|
|
47
|
+
with the corresponding `@v3` tag. All steps in the CodeQL workflow must be updated
|
|
48
|
+
together — a partial update (e.g., `init@v3` but `analyze@v2`) will still fail.
|
|
49
|
+
|
|
50
|
+
After updating, verify the workflow runs successfully by checking the Actions tab
|
|
51
|
+
and the Security → Code Scanning alerts page.
|
|
52
|
+
fix_code:
|
|
53
|
+
- language: yaml
|
|
54
|
+
label: "Updated CodeQL workflow using v3 (all steps)"
|
|
55
|
+
code: |
|
|
56
|
+
name: "CodeQL Analysis"
|
|
57
|
+
on:
|
|
58
|
+
push:
|
|
59
|
+
branches: ["main"]
|
|
60
|
+
pull_request:
|
|
61
|
+
branches: ["main"]
|
|
62
|
+
schedule:
|
|
63
|
+
- cron: '0 6 * * 1'
|
|
64
|
+
|
|
65
|
+
jobs:
|
|
66
|
+
analyze:
|
|
67
|
+
name: Analyze (${{ matrix.language }})
|
|
68
|
+
runs-on: ubuntu-latest
|
|
69
|
+
permissions:
|
|
70
|
+
actions: read
|
|
71
|
+
contents: read
|
|
72
|
+
security-events: write
|
|
73
|
+
|
|
74
|
+
strategy:
|
|
75
|
+
matrix:
|
|
76
|
+
language: ['javascript', 'python']
|
|
77
|
+
|
|
78
|
+
steps:
|
|
79
|
+
- name: Checkout repository
|
|
80
|
+
uses: actions/checkout@v4
|
|
81
|
+
|
|
82
|
+
- name: Initialize CodeQL
|
|
83
|
+
uses: github/codeql-action/init@v3 # ← was @v2
|
|
84
|
+
with:
|
|
85
|
+
languages: ${{ matrix.language }}
|
|
86
|
+
|
|
87
|
+
- name: Autobuild
|
|
88
|
+
uses: github/codeql-action/autobuild@v3 # ← was @v2
|
|
89
|
+
|
|
90
|
+
- name: Perform CodeQL Analysis
|
|
91
|
+
uses: github/codeql-action/analyze@v3 # ← was @v2
|
|
92
|
+
with:
|
|
93
|
+
category: "/language:${{ matrix.language }}"
|
|
94
|
+
- language: yaml
|
|
95
|
+
label: "Bulk-find stale v2 references (shell one-liner)"
|
|
96
|
+
code: |
|
|
97
|
+
# Run from repo root to find all @v1 or @v2 codeql-action references:
|
|
98
|
+
# grep -rn "codeql-action/.*@v[12]" .github/workflows/
|
|
99
|
+
prevention:
|
|
100
|
+
- "Use Dependabot for GitHub Actions to automatically open PRs when actions release new major versions."
|
|
101
|
+
- "Enable the 'Actions' section in Dependabot config (`package-ecosystem: github-actions`) for all repos with CodeQL workflows."
|
|
102
|
+
- "After any CodeQL major version update, verify Security → Code Scanning shows recent scans with no 'Tool not recognized' errors."
|
|
103
|
+
- "Search all workflow files for `codeql-action` references before major GitHub deprecation windows."
|
|
104
|
+
docs:
|
|
105
|
+
- url: "https://github.blog/changelog/2025-01-10-code-scanning-codeql-action-v2-is-now-deprecated/"
|
|
106
|
+
label: "GitHub Changelog: Code scanning — CodeQL Action v2 is now deprecated (Jan 2025)"
|
|
107
|
+
- url: "https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages"
|
|
108
|
+
label: "GitHub Docs: CodeQL code scanning for compiled languages"
|
|
109
|
+
- url: "https://github.com/github/codeql-action/releases"
|
|
110
|
+
label: "github/codeql-action Releases — v3 changelog"
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
id: runner-environment-070
|
|
2
|
+
title: "macOS 26 Upgrades OpenSSL from 1.1.1 to 3.x — Hardcoded openssl@1.1 Paths Break"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- macos
|
|
7
|
+
- openssl
|
|
8
|
+
- macos-26
|
|
9
|
+
- runner-image
|
|
10
|
+
- breaking-change
|
|
11
|
+
- homebrew
|
|
12
|
+
patterns:
|
|
13
|
+
- regex: "Library not loaded.*openssl@1\\.1.*libssl\\.1\\.1\\.dylib"
|
|
14
|
+
flags: "i"
|
|
15
|
+
- regex: "ld.*library not found.*-lssl|cannot find.*libssl\\.1\\.1"
|
|
16
|
+
flags: "i"
|
|
17
|
+
- regex: "openssl@1\\.1.*not installed|brew.*openssl@1\\.1.*no longer"
|
|
18
|
+
flags: "i"
|
|
19
|
+
- regex: "Could not find OpenSSL|ssl.*version.*mismatch.*1\\.1"
|
|
20
|
+
flags: "i"
|
|
21
|
+
- regex: "OpenSSL 1\\.1\\.1.*required.*OpenSSL 3"
|
|
22
|
+
flags: "i"
|
|
23
|
+
error_messages:
|
|
24
|
+
- "Library not loaded: /usr/local/opt/openssl@1.1/lib/libssl.1.1.dylib"
|
|
25
|
+
- "Library not loaded: /opt/homebrew/opt/openssl@1.1/lib/libssl.1.1.dylib"
|
|
26
|
+
- "ld: library not found for -lssl (referenced from build target)"
|
|
27
|
+
- "Could not find a package configuration file provided by 'OpenSSL'"
|
|
28
|
+
- "Could not link to OpenSSL library. Please install OpenSSL."
|
|
29
|
+
root_cause: |
|
|
30
|
+
When macos-latest migrates to macos-26 (rolling out June 15 through July 15, 2026),
|
|
31
|
+
the system OpenSSL jumps from OpenSSL 1.1.1w (the last 1.x release, now EOL)
|
|
32
|
+
to OpenSSL 3.6.2. This is a major version change with breaking ABI differences.
|
|
33
|
+
|
|
34
|
+
Any workflow that hardcodes openssl@1.1 Homebrew paths or links against the
|
|
35
|
+
1.1.x shared libraries will fail because:
|
|
36
|
+
|
|
37
|
+
- Homebrew's openssl@1.1 formula is deprecated on macOS 26
|
|
38
|
+
- The shared library /opt/homebrew/opt/openssl@1.1/lib/libssl.1.1.dylib
|
|
39
|
+
no longer exists; it is replaced by openssl@3
|
|
40
|
+
- PKG_CONFIG_PATH and LDFLAGS pointing to openssl@1.1 resolve to nothing
|
|
41
|
+
|
|
42
|
+
Common breakage surfaces:
|
|
43
|
+
- Ruby gems with native extensions (openssl gem links against system OpenSSL)
|
|
44
|
+
- Python packages (pyOpenSSL, cryptography) that link against 1.x path
|
|
45
|
+
- CMake projects using find_package(OpenSSL) finding incompatible version
|
|
46
|
+
- Homebrew formulas linking transitively against openssl@1.1
|
|
47
|
+
|
|
48
|
+
Source: runner-images#14167 — macOS 15 vs macOS 26 software diff shows
|
|
49
|
+
OpenSSL jumps from 1.1.1w to 3.6.2.
|
|
50
|
+
fix: |
|
|
51
|
+
Replace all openssl@1.1 references with openssl@3 (installed by default on macOS 26).
|
|
52
|
+
|
|
53
|
+
For Homebrew-based builds, use dynamic path detection:
|
|
54
|
+
OPENSSL_DIR=$(brew --prefix openssl@3)
|
|
55
|
+
export LDFLAGS="-L${OPENSSL_DIR}/lib"
|
|
56
|
+
export PKG_CONFIG_PATH="${OPENSSL_DIR}/lib/pkgconfig"
|
|
57
|
+
|
|
58
|
+
For Ruby gem compilation:
|
|
59
|
+
bundle config build.openssl --with-openssl-dir=$(brew --prefix openssl@3)
|
|
60
|
+
|
|
61
|
+
For CMake, pass OPENSSL_ROOT_DIR:
|
|
62
|
+
cmake -DOPENSSL_ROOT_DIR=$(brew --prefix openssl@3) ..
|
|
63
|
+
fix_code:
|
|
64
|
+
- language: yaml
|
|
65
|
+
label: "Dynamic OpenSSL path — works on both macOS 15 and macOS 26"
|
|
66
|
+
code: |
|
|
67
|
+
jobs:
|
|
68
|
+
build:
|
|
69
|
+
runs-on: macos-latest
|
|
70
|
+
steps:
|
|
71
|
+
- uses: actions/checkout@v4
|
|
72
|
+
|
|
73
|
+
- name: Set OpenSSL environment variables
|
|
74
|
+
run: |
|
|
75
|
+
OPENSSL_PREFIX=$(brew --prefix openssl)
|
|
76
|
+
echo "OPENSSL_DIR=$OPENSSL_PREFIX" >> $GITHUB_ENV
|
|
77
|
+
echo "LDFLAGS=-L$OPENSSL_PREFIX/lib" >> $GITHUB_ENV
|
|
78
|
+
echo "CPPFLAGS=-I$OPENSSL_PREFIX/include" >> $GITHUB_ENV
|
|
79
|
+
echo "PKG_CONFIG_PATH=$OPENSSL_PREFIX/lib/pkgconfig" >> $GITHUB_ENV
|
|
80
|
+
|
|
81
|
+
- name: Build project
|
|
82
|
+
run: cmake -B build -DOPENSSL_ROOT_DIR=$OPENSSL_DIR && cmake --build build
|
|
83
|
+
- language: yaml
|
|
84
|
+
label: "Ruby bundler — configure openssl@3 for native extension builds"
|
|
85
|
+
code: |
|
|
86
|
+
jobs:
|
|
87
|
+
ruby-build:
|
|
88
|
+
runs-on: macos-latest
|
|
89
|
+
steps:
|
|
90
|
+
- uses: actions/checkout@v4
|
|
91
|
+
- uses: ruby/setup-ruby@v1
|
|
92
|
+
with:
|
|
93
|
+
ruby-version: '3.4'
|
|
94
|
+
bundler-cache: true
|
|
95
|
+
|
|
96
|
+
- name: Configure OpenSSL for bundler
|
|
97
|
+
run: |
|
|
98
|
+
OPENSSL_DIR=$(brew --prefix openssl@3)
|
|
99
|
+
bundle config build.openssl --with-openssl-dir=$OPENSSL_DIR
|
|
100
|
+
|
|
101
|
+
- name: Install gems
|
|
102
|
+
run: bundle install
|
|
103
|
+
prevention:
|
|
104
|
+
- "Never hardcode openssl@1.1 paths — always use $(brew --prefix openssl) dynamically."
|
|
105
|
+
- "Test your macOS workflows on macos-26 before macos-latest migrates (June 15 to July 15, 2026)."
|
|
106
|
+
- "Use macos-15 label to pin to the older image while migrating OpenSSL dependencies."
|
|
107
|
+
- "For language setup actions, ensure you use recent versions that handle OpenSSL 3 automatically."
|
|
108
|
+
docs:
|
|
109
|
+
- url: "https://github.com/actions/runner-images/issues/14167"
|
|
110
|
+
label: "GitHub Announcement: macos-latest will use macos-26 in June 2026 (includes OpenSSL diff)"
|
|
111
|
+
- url: "https://www.openssl.org/news/changelog.html"
|
|
112
|
+
label: "OpenSSL 3.x Changelog"
|
|
113
|
+
- url: "https://docs.github.com/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners"
|
|
114
|
+
label: "About GitHub-hosted runners"
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
id: runner-environment-072
|
|
2
|
+
title: "macOS 26 Upgrades Default Ruby from 3.3 to 3.4 — Native Gem ABI Breaks"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- macos
|
|
7
|
+
- ruby
|
|
8
|
+
- macos-26
|
|
9
|
+
- runner-image
|
|
10
|
+
- breaking-change
|
|
11
|
+
- native-extensions
|
|
12
|
+
patterns:
|
|
13
|
+
- regex: 'incompatible library version.*\.bundle|LoadError.*incompatible library'
|
|
14
|
+
flags: "i"
|
|
15
|
+
- regex: 'ruby.*3\.3.*required.*3\.4|Gem.*compiled.*Ruby 3\.3.*running.*3\.4'
|
|
16
|
+
flags: "i"
|
|
17
|
+
- regex: "Bundler.*RUBY_VERSION.*mismatch|native extension.*wrong Ruby version"
|
|
18
|
+
flags: "i"
|
|
19
|
+
- regex: 'Error loading.*\.bundle.*built for Ruby 3\.3'
|
|
20
|
+
flags: "i"
|
|
21
|
+
error_messages:
|
|
22
|
+
- "LoadError: incompatible library version - /path/to/gem.bundle (expected 3.3, got 3.4)"
|
|
23
|
+
- "Bundler::GemNotFound: Could not find gem 'pg (>= 0) ruby' in locally installed gems"
|
|
24
|
+
- "An error occurred while installing nokogiri, and Bundler cannot continue."
|
|
25
|
+
- "Your Ruby version is 3.4.x, but your Gemfile specified 3.3.x"
|
|
26
|
+
root_cause: |
|
|
27
|
+
When macos-latest migrates to macos-26 (June 15 through July 15, 2026), the default
|
|
28
|
+
system Ruby version jumps from 3.3.11 to 3.4.9. This is a minor Ruby version change
|
|
29
|
+
but it breaks any workflow that:
|
|
30
|
+
|
|
31
|
+
1. Has a Gemfile or .ruby-version pinning Ruby 3.3.x
|
|
32
|
+
2. Uses cached gem bundles built against Ruby 3.3's C ABI (native extensions
|
|
33
|
+
like nokogiri, pg, mysql2, ffi compile to .bundle files tied to the Ruby ABI)
|
|
34
|
+
3. Hardcodes RUBY_VERSION in build scripts or Gemfile.lock references
|
|
35
|
+
|
|
36
|
+
Ruby native extensions (.bundle files) are ABI-specific — gems compiled against
|
|
37
|
+
Ruby 3.3 cannot be loaded by Ruby 3.4 and vice versa. If a workflow caches
|
|
38
|
+
bundled gems from a prior run on macos-15 (Ruby 3.3) and restores them on
|
|
39
|
+
macos-26 (Ruby 3.4), native extension gems will fail to load.
|
|
40
|
+
|
|
41
|
+
Source: runner-images#14167 — macOS 15 vs macOS 26 software diff shows Ruby
|
|
42
|
+
jumping from 3.3.11 to 3.4.9.
|
|
43
|
+
fix: |
|
|
44
|
+
Option 1 — Use ruby/setup-ruby to pin an explicit Ruby version (recommended):
|
|
45
|
+
- uses: ruby/setup-ruby@v1
|
|
46
|
+
with:
|
|
47
|
+
ruby-version: '3.3' # or '3.4' to target the new default
|
|
48
|
+
bundler-cache: true
|
|
49
|
+
|
|
50
|
+
Option 2 — Add .ruby-version file to your repo specifying the target Ruby version.
|
|
51
|
+
setup-ruby will read this automatically.
|
|
52
|
+
|
|
53
|
+
Option 3 — Update your Gemfile to remove Ruby version constraint or bump it to 3.4:
|
|
54
|
+
# In Gemfile, remove or update:
|
|
55
|
+
# ruby '3.3' <- remove or change to '3.4'
|
|
56
|
+
|
|
57
|
+
For cache invalidation: if you use actions/cache for bundler, include the Ruby
|
|
58
|
+
version in the cache key:
|
|
59
|
+
key: gems-${{ runner.os }}-ruby-${{ env.RUBY_VERSION }}-${{ hashFiles('**/Gemfile.lock') }}
|
|
60
|
+
fix_code:
|
|
61
|
+
- language: yaml
|
|
62
|
+
label: "Pin Ruby version with setup-ruby (cross-image safe)"
|
|
63
|
+
code: |
|
|
64
|
+
jobs:
|
|
65
|
+
test:
|
|
66
|
+
runs-on: macos-latest
|
|
67
|
+
steps:
|
|
68
|
+
- uses: actions/checkout@v4
|
|
69
|
+
|
|
70
|
+
- uses: ruby/setup-ruby@v1
|
|
71
|
+
with:
|
|
72
|
+
# Pin explicitly — do not rely on runner default Ruby
|
|
73
|
+
ruby-version: '3.4'
|
|
74
|
+
bundler-cache: true
|
|
75
|
+
|
|
76
|
+
- name: Run tests
|
|
77
|
+
run: bundle exec rspec
|
|
78
|
+
|
|
79
|
+
- language: yaml
|
|
80
|
+
label: "Cache key including Ruby version to avoid ABI mismatch"
|
|
81
|
+
code: |
|
|
82
|
+
jobs:
|
|
83
|
+
test:
|
|
84
|
+
runs-on: macos-latest
|
|
85
|
+
steps:
|
|
86
|
+
- uses: actions/checkout@v4
|
|
87
|
+
|
|
88
|
+
- uses: ruby/setup-ruby@v1
|
|
89
|
+
with:
|
|
90
|
+
ruby-version: '3.4'
|
|
91
|
+
|
|
92
|
+
- name: Cache bundler gems
|
|
93
|
+
uses: actions/cache@v4
|
|
94
|
+
with:
|
|
95
|
+
path: vendor/bundle
|
|
96
|
+
# Include Ruby version in cache key to prevent ABI mismatch
|
|
97
|
+
key: gems-${{ runner.os }}-ruby-${{ env.RUBY_VERSION }}-${{ hashFiles('**/Gemfile.lock') }}
|
|
98
|
+
restore-keys: |
|
|
99
|
+
gems-${{ runner.os }}-ruby-${{ env.RUBY_VERSION }}-
|
|
100
|
+
|
|
101
|
+
- name: Install gems
|
|
102
|
+
run: bundle install --path vendor/bundle
|
|
103
|
+
prevention:
|
|
104
|
+
- "Always use ruby/setup-ruby with an explicit ruby-version — never rely on the runner's default Ruby."
|
|
105
|
+
- "Include the Ruby version in bundler cache keys to prevent loading native gems built for a different Ruby ABI."
|
|
106
|
+
- "Add a .ruby-version file to your repository to make the intended Ruby version visible and enforceable."
|
|
107
|
+
- "Test on macos-26 before macos-latest migrates to catch Ruby 3.3 to 3.4 incompatibilities early."
|
|
108
|
+
docs:
|
|
109
|
+
- url: "https://github.com/actions/runner-images/issues/14167"
|
|
110
|
+
label: "GitHub Announcement: macos-latest will use macos-26 in June 2026 (includes Ruby version diff)"
|
|
111
|
+
- url: "https://github.com/ruby/setup-ruby"
|
|
112
|
+
label: "ruby/setup-ruby action"
|
|
113
|
+
- url: "https://www.ruby-lang.org/en/news/2024/12/25/ruby-3-4-0-released/"
|
|
114
|
+
label: "Ruby 3.4.0 Release Notes"
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
id: runner-environment-071
|
|
2
|
+
title: "macOS 26 Default Xcode Switches to 26.5 on June 8 2026 — Unpin to Fix"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- macos
|
|
7
|
+
- xcode
|
|
8
|
+
- macos-26
|
|
9
|
+
- runner-image
|
|
10
|
+
- breaking-change
|
|
11
|
+
- ios
|
|
12
|
+
patterns:
|
|
13
|
+
- regex: 'Xcode.*26\.4\.1.*not found|xcode.*version.*26\.4.*unavailable'
|
|
14
|
+
flags: "i"
|
|
15
|
+
- regex: 'your project.*not compatible.*Xcode 26\.5|requires Xcode.*26\.4'
|
|
16
|
+
flags: "i"
|
|
17
|
+
- regex: 'xcodebuild.*error.*incompatible.*project|DT_TOOLCHAIN.*not found.*26\.5'
|
|
18
|
+
flags: "i"
|
|
19
|
+
- regex: 'error.*The iOS Simulator.*26\.1.*required.*26\.5'
|
|
20
|
+
flags: "i"
|
|
21
|
+
error_messages:
|
|
22
|
+
- "xcodebuild: error: The project requires Xcode 26.4.1, but the currently selected Xcode version is 26.5."
|
|
23
|
+
- "error: DT_TOOLCHAIN_DIR cannot be used to evaluate TOOLCHAIN_DIR. Use TOOLCHAINS setting instead."
|
|
24
|
+
- "Unable to boot the Simulator. The request to boot 'iOS 26.1 Simulator' was denied because the destination is incompatible with this version of Xcode."
|
|
25
|
+
root_cause: |
|
|
26
|
+
Starting June 8, 2026 (rolling out over 2-4 days), GitHub is changing the default
|
|
27
|
+
Xcode on macOS-26 runners from Xcode 26.4.1 to Xcode 26.5. Workflows running on
|
|
28
|
+
macos-26 or macos-latest (after the macos-latest migration completes) that do not
|
|
29
|
+
explicitly pin an Xcode version will automatically get Xcode 26.5.
|
|
30
|
+
|
|
31
|
+
Xcode 26.5 is a new major release and may introduce build incompatibilities:
|
|
32
|
+
- Project files referencing deprecated Xcode 26.4 APIs
|
|
33
|
+
- iOS/macOS Simulator runtimes that only match Xcode 26.4.1
|
|
34
|
+
- Swift toolchain behavior differences between 26.4.1 and 26.5
|
|
35
|
+
- Build setting migrations required by the new Xcode version
|
|
36
|
+
|
|
37
|
+
Source: runner-images#14172 — official GitHub announcement for macOS 26 Xcode
|
|
38
|
+
default change.
|
|
39
|
+
fix: |
|
|
40
|
+
Pin your Xcode version explicitly using either:
|
|
41
|
+
|
|
42
|
+
Option 1 — sudo xcode-select (no extra action required):
|
|
43
|
+
sudo xcode-select -s "/Applications/Xcode_26.4.1.app"
|
|
44
|
+
|
|
45
|
+
Option 2 — maxim-lobanov/setup-xcode action:
|
|
46
|
+
- uses: maxim-lobanov/setup-xcode@v1
|
|
47
|
+
with:
|
|
48
|
+
xcode-version: '26.4.1'
|
|
49
|
+
|
|
50
|
+
To list available Xcode versions on macos-26 runners, check the official
|
|
51
|
+
runner image documentation at:
|
|
52
|
+
https://github.com/actions/runner-images/blob/main/images/macos/macos-26-arm64-Readme.md#xcode
|
|
53
|
+
fix_code:
|
|
54
|
+
- language: yaml
|
|
55
|
+
label: "Pin Xcode version using setup-xcode action"
|
|
56
|
+
code: |
|
|
57
|
+
jobs:
|
|
58
|
+
build-ios:
|
|
59
|
+
runs-on: macos-26
|
|
60
|
+
steps:
|
|
61
|
+
- uses: actions/checkout@v4
|
|
62
|
+
|
|
63
|
+
- name: Select Xcode version
|
|
64
|
+
uses: maxim-lobanov/setup-xcode@v1
|
|
65
|
+
with:
|
|
66
|
+
xcode-version: '26.4.1'
|
|
67
|
+
|
|
68
|
+
- name: Build iOS app
|
|
69
|
+
run: xcodebuild -project MyApp.xcodeproj -scheme MyApp -sdk iphonesimulator build
|
|
70
|
+
|
|
71
|
+
- language: yaml
|
|
72
|
+
label: "Pin Xcode version using xcode-select directly"
|
|
73
|
+
code: |
|
|
74
|
+
jobs:
|
|
75
|
+
build-ios:
|
|
76
|
+
runs-on: macos-26
|
|
77
|
+
steps:
|
|
78
|
+
- uses: actions/checkout@v4
|
|
79
|
+
|
|
80
|
+
- name: Pin Xcode 26.4.1
|
|
81
|
+
run: sudo xcode-select -s "/Applications/Xcode_26.4.1.app"
|
|
82
|
+
|
|
83
|
+
- name: Verify Xcode version
|
|
84
|
+
run: xcodebuild -version
|
|
85
|
+
|
|
86
|
+
- name: Build
|
|
87
|
+
run: xcodebuild -scheme MyApp build
|
|
88
|
+
prevention:
|
|
89
|
+
- "Always pin Xcode version explicitly on macOS runners — never rely on the default."
|
|
90
|
+
- "Use maxim-lobanov/setup-xcode@v1 with a specific xcode-version to make version changes visible in git diff."
|
|
91
|
+
- "Subscribe to runner-images announcements for advance notice of Xcode default version changes."
|
|
92
|
+
- "Audit your workflows for hardcoded Xcode version paths before macos-latest migrates to macos-26."
|
|
93
|
+
docs:
|
|
94
|
+
- url: "https://github.com/actions/runner-images/issues/14172"
|
|
95
|
+
label: "GitHub Announcement: Default Xcode on macOS 26 will be set to 26.5 on 2026-06-08"
|
|
96
|
+
- url: "https://github.com/maxim-lobanov/setup-xcode"
|
|
97
|
+
label: "maxim-lobanov/setup-xcode action"
|
|
98
|
+
- url: "https://github.com/actions/runner-images/blob/main/images/macos/macos-26-arm64-Readme.md#xcode"
|
|
99
|
+
label: "macOS 26 arm64 runner image README — available Xcode versions"
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
id: runner-environment-064
|
|
2
|
+
title: "macos-latest Label Switching to macOS 26 — Toolchain and Brew Package Changes"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: warning
|
|
5
|
+
tags:
|
|
6
|
+
- macos
|
|
7
|
+
- macos-latest
|
|
8
|
+
- macos-26
|
|
9
|
+
- runner-label
|
|
10
|
+
- homebrew
|
|
11
|
+
- toolchain
|
|
12
|
+
- migration
|
|
13
|
+
patterns:
|
|
14
|
+
- regex: "macos.*26.*not supported"
|
|
15
|
+
flags: "i"
|
|
16
|
+
- regex: "No such file or directory.*clang|clang.*not found"
|
|
17
|
+
flags: "i"
|
|
18
|
+
- regex: "dyld.*Library not loaded"
|
|
19
|
+
flags: "i"
|
|
20
|
+
- regex: "Error: Cannot install in Homebrew on macOS.*without Command Line Tools"
|
|
21
|
+
flags: "i"
|
|
22
|
+
- regex: "macos-latest.*macos-26"
|
|
23
|
+
flags: "i"
|
|
24
|
+
error_messages:
|
|
25
|
+
- "clang: error: no such file or directory"
|
|
26
|
+
- "dyld[12345]: Library not loaded: /usr/local/lib/libssl.1.1.dylib"
|
|
27
|
+
- "Error: Your CLT does not support macOS 26."
|
|
28
|
+
- "xcrun: error: SDK 'iphoneos' cannot be located"
|
|
29
|
+
root_cause: |
|
|
30
|
+
Starting June 15, 2026, the `macos-latest` runner label is being migrated
|
|
31
|
+
from macOS 15 (Sequoia) to macOS 26 (runner-images#14167). The rollout
|
|
32
|
+
runs through July 15, 2026. Workflows pinned to `macos-latest` without
|
|
33
|
+
testing on macOS 26 may encounter failures from toolchain and package
|
|
34
|
+
differences between the two OS versions.
|
|
35
|
+
|
|
36
|
+
Key differences in macOS 26 runner images compared to macOS 15:
|
|
37
|
+
|
|
38
|
+
1. **Homebrew LLVM version bump**: LLVM jumped from 18 to 20 on macOS 26.
|
|
39
|
+
Hardcoded paths like `/opt/homebrew/opt/llvm@18/bin/clang` or env vars
|
|
40
|
+
referencing `llvm@18` binaries fail. POCO and other libraries built
|
|
41
|
+
against LLVM 18 ABI may link incorrectly.
|
|
42
|
+
|
|
43
|
+
2. **macOS SDK changes**: macOS 26 uses a newer Xcode and SDK toolchain.
|
|
44
|
+
Libraries and headers that existed in macOS 15 SDK may have moved,
|
|
45
|
+
been renamed, or removed under the macOS 26 (Tahoe) SDK.
|
|
46
|
+
|
|
47
|
+
3. **Homebrew formula versions**: Many Homebrew packages have newer
|
|
48
|
+
versions on macOS 26 images than on macOS 15. Formulas with no macOS 26
|
|
49
|
+
bottle may be built from source, increasing job time significantly.
|
|
50
|
+
|
|
51
|
+
4. **System library locations**: Dynamic library paths (e.g., for OpenSSL,
|
|
52
|
+
libpq, or other system libs installed via Homebrew) may differ between
|
|
53
|
+
macOS 15 and macOS 26 as Homebrew evolves its prefix structure.
|
|
54
|
+
|
|
55
|
+
5. **Xcode simulator SDK policy**: Only the 3 latest Xcode versions retain
|
|
56
|
+
platform tools/SDKs. Workflows using older Xcode/simulator versions
|
|
57
|
+
that worked on macOS 15 may not find the expected SDK on macOS 26.
|
|
58
|
+
|
|
59
|
+
Workflows that do not pin `macos-latest` and have never tested on macOS 26
|
|
60
|
+
may start failing after the migration completes.
|
|
61
|
+
fix: |
|
|
62
|
+
1. **Pin to macOS 15 temporarily**: Replace `macos-latest` with `macos-15`
|
|
63
|
+
to preserve the current behavior while you test and migrate.
|
|
64
|
+
|
|
65
|
+
2. **Test on macOS 26 before migration**: Add a matrix job with
|
|
66
|
+
`macos-26` to identify failures before `macos-latest` switches.
|
|
67
|
+
|
|
68
|
+
3. **Fix hardcoded LLVM/Clang paths**: Update any hardcoded paths like
|
|
69
|
+
`/opt/homebrew/opt/llvm@18` to use `$(brew --prefix llvm)` or install
|
|
70
|
+
the specific version you need via `brew install llvm@18`.
|
|
71
|
+
|
|
72
|
+
4. **Update Homebrew formula pins**: Check for `@version`-pinned Homebrew
|
|
73
|
+
formulas that may no longer have macOS 26 bottles and either upgrade
|
|
74
|
+
or build from source explicitly.
|
|
75
|
+
|
|
76
|
+
5. **Audit system library dependencies**: For native extensions that link
|
|
77
|
+
against system or Homebrew libraries, verify library paths with
|
|
78
|
+
`brew --prefix <lib>` at runtime rather than hardcoding them.
|
|
79
|
+
fix_code:
|
|
80
|
+
- language: yaml
|
|
81
|
+
label: "Pin to macos-15 while testing macOS 26 compatibility"
|
|
82
|
+
code: |
|
|
83
|
+
jobs:
|
|
84
|
+
build:
|
|
85
|
+
# Temporarily pin to macos-15 while migration is in progress
|
|
86
|
+
# macos-latest will point to macos-26 starting June 15, 2026
|
|
87
|
+
runs-on: macos-15
|
|
88
|
+
steps:
|
|
89
|
+
- uses: actions/checkout@v4
|
|
90
|
+
- run: make build
|
|
91
|
+
- language: yaml
|
|
92
|
+
label: "Matrix to test both macOS 15 and 26 before migration"
|
|
93
|
+
code: |
|
|
94
|
+
jobs:
|
|
95
|
+
build:
|
|
96
|
+
strategy:
|
|
97
|
+
matrix:
|
|
98
|
+
os: [macos-15, macos-26]
|
|
99
|
+
fail-fast: false
|
|
100
|
+
runs-on: ${{ matrix.os }}
|
|
101
|
+
steps:
|
|
102
|
+
- uses: actions/checkout@v4
|
|
103
|
+
- run: make build
|
|
104
|
+
- language: yaml
|
|
105
|
+
label: "Use brew --prefix to resolve dynamic LLVM/library paths"
|
|
106
|
+
code: |
|
|
107
|
+
- name: Set up LLVM paths dynamically
|
|
108
|
+
run: |
|
|
109
|
+
# Instead of hardcoded /opt/homebrew/opt/llvm@18/bin/clang:
|
|
110
|
+
LLVM_PREFIX=$(brew --prefix llvm)
|
|
111
|
+
echo "CC=${LLVM_PREFIX}/bin/clang" >> $GITHUB_ENV
|
|
112
|
+
echo "CXX=${LLVM_PREFIX}/bin/clang++" >> $GITHUB_ENV
|
|
113
|
+
echo "${LLVM_PREFIX}/bin" >> $GITHUB_PATH
|
|
114
|
+
prevention:
|
|
115
|
+
- "Never use macos-latest without testing the next macOS version first — GitHub announces label migrations weeks in advance in runner-images issues."
|
|
116
|
+
- "Pin to a specific macOS version (e.g., macos-15) for production workflows; use macos-latest only in exploratory or dependency-update workflows."
|
|
117
|
+
- "Avoid hardcoding Homebrew formula paths — always use `$(brew --prefix <formula>)` to resolve paths dynamically."
|
|
118
|
+
- "Run a matrix job spanning current and next macOS versions as part of your CI to catch breakage before a label migration lands."
|
|
119
|
+
docs:
|
|
120
|
+
- url: "https://github.com/actions/runner-images/issues/14167"
|
|
121
|
+
label: "runner-images #14167: macos-latest will use macos-26 starting June 15, 2026"
|
|
122
|
+
- url: "https://github.blog/changelog/2026-05-14-github-actions-upcoming-image-migrations/"
|
|
123
|
+
label: "GitHub Changelog: Upcoming image migrations (May 2026)"
|
|
124
|
+
- url: "https://github.com/actions/runner-images/issues/14167"
|
|
125
|
+
label: "runner-images announcement: macOS 14 deprecation starting July 6, 2026"
|
|
126
|
+
- url: "https://docs.github.com/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories"
|
|
127
|
+
label: "GitHub Docs: Standard GitHub-hosted runners — available runner labels"
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
id: runner-environment-062
|
|
2
|
+
title: "Node.js 20 Removed from Toolcache — Default Node.js Changed to 22"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- nodejs
|
|
7
|
+
- node20
|
|
8
|
+
- node22
|
|
9
|
+
- toolcache
|
|
10
|
+
- eol
|
|
11
|
+
- setup-node
|
|
12
|
+
- runner-images
|
|
13
|
+
patterns:
|
|
14
|
+
- regex: "node: not found"
|
|
15
|
+
flags: "i"
|
|
16
|
+
- regex: "node: No such file or directory"
|
|
17
|
+
flags: "i"
|
|
18
|
+
- regex: "Downloading Node\\.js (20\\.[0-9]+\\.[0-9]+)"
|
|
19
|
+
flags: "i"
|
|
20
|
+
- regex: "engines.*node.*>=\\s*20"
|
|
21
|
+
flags: "i"
|
|
22
|
+
- regex: "error node_modules.*requires node.*20"
|
|
23
|
+
flags: "i"
|
|
24
|
+
error_messages:
|
|
25
|
+
- "node: not found"
|
|
26
|
+
- "Downloading Node.js 20.x.x (not pre-installed, downloading on demand)"
|
|
27
|
+
- "error: The engine 'node' is incompatible with this module. Expected version '^20.0.0'. Got '22.x.x'"
|
|
28
|
+
- "The engine 'node' is incompatible with this module. Expected version '>=20 <21'. Got '22.14.0'"
|
|
29
|
+
root_cause: |
|
|
30
|
+
Node.js 20 reached end-of-life on April 30, 2026. Starting with runner image
|
|
31
|
+
updates rolled out May 19–26, 2026, Node.js 20 was removed from the toolcache
|
|
32
|
+
on ALL GitHub-hosted runner images (ubuntu-22.04, ubuntu-24.04, ubuntu-26.04,
|
|
33
|
+
macos-14, macos-15, macos-26, windows-2022, windows-2025, and ARM variants).
|
|
34
|
+
|
|
35
|
+
Two distinct impacts:
|
|
36
|
+
|
|
37
|
+
1. **Default Node.js version changed**: On runners where Node.js 20 was
|
|
38
|
+
previously the default (e.g., ubuntu-22.04, ubuntu-24.04, windows-2022,
|
|
39
|
+
macos-14), the default is now Node.js 22 (Maintenance LTS). Workflows
|
|
40
|
+
that call `node` or `npm` without an explicit `actions/setup-node` step
|
|
41
|
+
will now run on Node.js 22, potentially breaking packages with strict
|
|
42
|
+
engines constraints like `"node": "^20.0.0"`.
|
|
43
|
+
|
|
44
|
+
2. **setup-node now downloads Node.js 20**: If a workflow pins
|
|
45
|
+
`node-version: '20'` via `actions/setup-node`, it will no longer find
|
|
46
|
+
Node.js 20 in the toolcache and must download it on demand. This adds
|
|
47
|
+
download time and may fail if the registry is rate-limited or the runner
|
|
48
|
+
has no internet access (self-hosted runners with air-gapped environments).
|
|
49
|
+
|
|
50
|
+
Only Node.js 22 and Node.js 24 remain pre-installed in the toolcache on all
|
|
51
|
+
runner images after this change.
|
|
52
|
+
fix: |
|
|
53
|
+
Option 1 — Upgrade to Node.js 22 or 24 (recommended):
|
|
54
|
+
Update your project to support Node.js 22 (current Maintenance LTS) or
|
|
55
|
+
Node.js 24 (Active LTS). Update package.json engines field, run tests on
|
|
56
|
+
the new version, and remove the explicit node-version pin (or update it).
|
|
57
|
+
|
|
58
|
+
Option 2 — Pin to Node.js 20 via setup-node (temporary):
|
|
59
|
+
If you cannot migrate yet, explicitly install Node.js 20 on every job
|
|
60
|
+
using `actions/setup-node`. Node.js 20 is still downloadable on demand —
|
|
61
|
+
it just won't be pre-cached. This will slow down your workflow.
|
|
62
|
+
|
|
63
|
+
Option 3 — Test with FORCE_JAVASCRIPT_ACTIONS_TO_NODE24:
|
|
64
|
+
Set `FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true` as a workflow env to test
|
|
65
|
+
how your action runtime behaves on Node.js 24 before fully migrating.
|
|
66
|
+
fix_code:
|
|
67
|
+
- language: yaml
|
|
68
|
+
label: "Upgrade to Node.js 22 (recommended)"
|
|
69
|
+
code: |
|
|
70
|
+
- name: Set up Node.js
|
|
71
|
+
uses: actions/setup-node@v4
|
|
72
|
+
with:
|
|
73
|
+
node-version: '22' # Node.js 22 is Maintenance LTS through 2026
|
|
74
|
+
cache: 'npm'
|
|
75
|
+
- language: yaml
|
|
76
|
+
label: "Pin Node.js 20 temporarily (still downloadable on demand)"
|
|
77
|
+
code: |
|
|
78
|
+
- name: Set up Node.js 20 (no longer pre-cached — will download)
|
|
79
|
+
uses: actions/setup-node@v4
|
|
80
|
+
with:
|
|
81
|
+
node-version: '20' # EOL 2026-04-30; plan your migration to v22
|
|
82
|
+
cache: 'npm'
|
|
83
|
+
- language: yaml
|
|
84
|
+
label: "Use .nvmrc / .node-version to pin version in project root"
|
|
85
|
+
code: |
|
|
86
|
+
- name: Set up Node.js from .nvmrc
|
|
87
|
+
uses: actions/setup-node@v4
|
|
88
|
+
with:
|
|
89
|
+
node-version-file: '.nvmrc' # Update .nvmrc to 22 or 24
|
|
90
|
+
cache: 'npm'
|
|
91
|
+
prevention:
|
|
92
|
+
- "Always specify an explicit node-version in actions/setup-node — never rely on the runner's ambient Node.js version."
|
|
93
|
+
- "Set `node-version-file: '.nvmrc'` and commit a .nvmrc file so all environments (local, CI, containers) use the same version."
|
|
94
|
+
- "Watch the runner-images Announcements tab for future EOL removals — set up GitHub notifications for the actions/runner-images repo."
|
|
95
|
+
- "Use `engines` in package.json with a range like `>=22 <25` to catch version incompatibilities in CI early."
|
|
96
|
+
docs:
|
|
97
|
+
- url: "https://github.com/actions/runner-images/issues/14029"
|
|
98
|
+
label: "runner-images #14029: Node.js 20 removed, default changed to 22"
|
|
99
|
+
- url: "https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/"
|
|
100
|
+
label: "GitHub Changelog: Deprecation of Node 20 on GitHub Actions runners"
|
|
101
|
+
- url: "https://github.com/nodejs/release#readme"
|
|
102
|
+
label: "Node.js Release Schedule (EOL dates)"
|
|
103
|
+
- url: "https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/using-pre-installed-software#nodejs-versions"
|
|
104
|
+
label: "GitHub Docs: Using pre-installed software — Node.js versions"
|