@htekdev/actions-debugger 1.0.14 → 1.0.16
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/dist/db/search.js +3 -1
- package/dist/db/search.js.map +1 -1
- package/dist/tools/suggest-fix.d.ts.map +1 -1
- package/dist/tools/suggest-fix.js +5 -1
- package/dist/tools/suggest-fix.js.map +1 -1
- package/errors/caching-artifacts/cache-key-too-long.yml +93 -0
- package/errors/caching-artifacts/cache-path-not-exist-skipped.yml +152 -0
- package/errors/caching-artifacts/cache-save-same-key-html-conflict.yml +109 -0
- package/errors/caching-artifacts/docker-buildx-gha-cache-capacity.yml +107 -0
- package/errors/caching-artifacts/setup-ruby-bundler-ephemeral-workdir-cache-miss.yml +147 -0
- package/errors/caching-artifacts/upload-artifact-v3-retirement-blocked.yml +123 -0
- package/errors/caching-artifacts/upload-artifact-v4-large-file-macos-hang.yml +111 -0
- package/errors/concurrency-timing/always-cleanup-5min-forced-kill.yml +140 -0
- package/errors/concurrency-timing/concurrency-group-env-context-undefined.yml +99 -0
- package/errors/concurrency-timing/required-check-pending-path-filter-skip.yml +160 -0
- package/errors/concurrency-timing/wait-timer-cancel-in-progress-starvation.yml +125 -0
- package/errors/known-unsolved/composite-action-step-timeout-minutes-ignored.yml +146 -0
- package/errors/known-unsolved/reusable-workflow-no-composite-action-call.yml +116 -0
- package/errors/known-unsolved/schedule-trigger-default-branch-only.yml +113 -0
- package/errors/known-unsolved/secrets-not-allowed-in-if-conditions.yml +149 -0
- package/errors/known-unsolved/workflow-50-rerun-limit.yml +110 -0
- package/errors/permissions-auth/check-run-status-modification-blocked.yml +134 -0
- package/errors/permissions-auth/dependabot-pr-secrets-unavailable.yml +133 -0
- package/errors/permissions-auth/fine-grained-pat-deployment-write-required.yml +146 -0
- package/errors/permissions-auth/github-app-installation-token-new-format.yml +124 -0
- package/errors/permissions-auth/github-packages-read-requires-packages-permission.yml +128 -0
- package/errors/permissions-auth/oidc-id-token-write-permission-missing.yml +169 -0
- package/errors/permissions-auth/permissions-empty-block-removes-contents-read.yml +97 -0
- package/errors/permissions-auth/reusable-workflow-permissions-not-inherited.yml +114 -0
- package/errors/runner-environment/checkout-windows-ebusy-lock.yml +124 -0
- package/errors/runner-environment/deprecated-action-version-auto-rejected.yml +89 -0
- package/errors/runner-environment/github-hosted-runner-disk-space-full.yml +85 -0
- package/errors/runner-environment/github-path-same-step-not-found.yml +114 -0
- package/errors/runner-environment/github-script-v6-octokit-rest-actions-not-function.yml +87 -0
- package/errors/runner-environment/macos-13-deprecation-brownout.yml +93 -0
- package/errors/runner-environment/macos-15-mono-nuget-removed.yml +151 -0
- package/errors/runner-environment/macos-15-xcode-simulator-sdk-policy.yml +141 -0
- package/errors/runner-environment/multi-runtime-nov2025-removal.yml +120 -0
- package/errors/runner-environment/runner-oom-exit-code-137.yml +117 -0
- package/errors/runner-environment/setup-go-go123-telemetry-cache-failure.yml +92 -0
- package/errors/runner-environment/setup-java-distribution-required.yml +108 -0
- package/errors/runner-environment/ubuntu-2004-retirement-brownout.yml +107 -0
- package/errors/runner-environment/windows-latest-d-drive-removed.yml +104 -0
- package/errors/runner-environment/windows-vs2026-cuda-host-compiler-unsupported.yml +145 -0
- package/errors/silent-failures/event-commits-empty-on-workflow-dispatch.yml +110 -0
- package/errors/silent-failures/fetch-tags-depth-one-silent-no-op.yml +77 -0
- package/errors/silent-failures/github-env-multiline-value-truncated.yml +127 -0
- package/errors/silent-failures/github-sha-pr-merge-commit-not-head.yml +150 -0
- package/errors/silent-failures/job-output-masked-as-secret-empty.yml +147 -0
- package/errors/silent-failures/upload-artifact-permissions-stripped.yml +98 -0
- package/errors/triggers/pull-request-branches-filter-matches-base-not-head.yml +140 -0
- package/errors/triggers/push-event-fires-on-branch-delete.yml +129 -0
- package/errors/triggers/push-first-commit-before-sha-zeros.yml +160 -0
- package/errors/yaml-syntax/continue-on-error-env-context-rejected.yml +130 -0
- package/errors/yaml-syntax/fromjson-empty-string-crash.yml +99 -0
- package/errors/yaml-syntax/if-bang-negation-yaml-tag.yml +145 -0
- package/errors/yaml-syntax/local-action-path-always-top-level.yml +142 -0
- package/package.json +1 -1
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
id: runner-environment-044
|
|
2
|
+
title: "macOS-15 Runner Removes Mono, NuGet, and NUnit — Workflows Using These Tools Break"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- macos
|
|
7
|
+
- macos-15
|
|
8
|
+
- mono
|
|
9
|
+
- nuget
|
|
10
|
+
- nunit
|
|
11
|
+
- runner-image
|
|
12
|
+
- breaking-change
|
|
13
|
+
- macos-latest
|
|
14
|
+
patterns:
|
|
15
|
+
- regex: "mono.*not found|The term 'mono' is not recognized|command not found.*mono"
|
|
16
|
+
flags: "i"
|
|
17
|
+
- regex: "nuget.*not found|command not found.*nuget|NuGet.*is not recognized"
|
|
18
|
+
flags: "i"
|
|
19
|
+
- regex: "nunit.*not found|command not found.*nunit-console|nunit3-console.*not recognized"
|
|
20
|
+
flags: "i"
|
|
21
|
+
- regex: "Error.*Mono runtime.*could not be found|Unable to find mono"
|
|
22
|
+
flags: "i"
|
|
23
|
+
error_messages:
|
|
24
|
+
- "bash: mono: command not found"
|
|
25
|
+
- "The term 'mono' is not recognized as the name of a cmdlet, function, script file, or executable program."
|
|
26
|
+
- "bash: nuget: command not found"
|
|
27
|
+
- "bash: nunit-console: command not found"
|
|
28
|
+
- "Error: Unable to locate executable file: 'mono'"
|
|
29
|
+
root_cause: |
|
|
30
|
+
GitHub Actions migrated `macos-latest` from macOS 14 (Sonoma) to macOS 15 (Sequoia)
|
|
31
|
+
beginning August 4, 2025, completing by August 30, 2025. The macOS-15 image was rebuilt
|
|
32
|
+
from scratch and intentionally excludes several tools that were present in macOS-14:
|
|
33
|
+
|
|
34
|
+
- **Mono 6.12.x** — removed from macOS-15 images "due to maintenance reasons"
|
|
35
|
+
- **NuGet 6.3.x** — removed from macOS-15 images "due to maintenance reasons"
|
|
36
|
+
- **NUnit 6.15.4** — removed from macOS-15 images "due to maintenance reasons"
|
|
37
|
+
|
|
38
|
+
Any workflow pinned to `macos-latest` that calls `mono`, `nuget`, or `nunit-console`
|
|
39
|
+
directly (without an install step) will fail immediately with a "command not found" error
|
|
40
|
+
after the migration. Workflows that explicitly pin `macos-14` are unaffected but will
|
|
41
|
+
need to migrate before macOS-14 reaches its retirement date (November 2, 2026).
|
|
42
|
+
|
|
43
|
+
These removals were announced alongside the macOS-15 migration notice in
|
|
44
|
+
runner-images#12520. The decision was driven by the Mono project's reduced maintenance
|
|
45
|
+
status and the availability of .NET cross-platform alternatives.
|
|
46
|
+
|
|
47
|
+
Other notable differences between macOS-14 and macOS-15 that may cause indirect failures:
|
|
48
|
+
- **Clang/LLVM (Xcode)**: 15.x → 16.x (compiler version bump, stricter warnings)
|
|
49
|
+
- **Clang/LLVM (Homebrew)**: 15.x → 18.x
|
|
50
|
+
- **Node.js default**: 20.x → 22.x
|
|
51
|
+
fix: |
|
|
52
|
+
**For Mono-dependent workflows** — install Mono explicitly or migrate to .NET:
|
|
53
|
+
|
|
54
|
+
Option 1: Install Mono in the workflow step before using it:
|
|
55
|
+
```yaml
|
|
56
|
+
- name: Install Mono
|
|
57
|
+
run: brew install mono
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Option 2: Migrate to .NET 9/10 (recommended long-term):
|
|
61
|
+
Replace `mono myapp.exe` with a .NET-native build. Mono is in maintenance mode;
|
|
62
|
+
.NET is the supported cross-platform runtime going forward.
|
|
63
|
+
|
|
64
|
+
**For NuGet** — use `dotnet nuget` instead:
|
|
65
|
+
The .NET CLI includes full NuGet support. Replace standalone `nuget` calls with
|
|
66
|
+
`dotnet restore`, `dotnet nuget push`, etc.
|
|
67
|
+
|
|
68
|
+
**For NUnit** — use the .NET test runner:
|
|
69
|
+
Replace `nunit-console` with `dotnet test`. The NUnit test adapter integrates
|
|
70
|
+
with `dotnet test` out of the box.
|
|
71
|
+
|
|
72
|
+
**Pin to macOS-14 temporarily** (bridging strategy, not long-term):
|
|
73
|
+
```yaml
|
|
74
|
+
runs-on: macos-14
|
|
75
|
+
```
|
|
76
|
+
macOS-14 retires November 2, 2026 — plan your migration before then.
|
|
77
|
+
fix_code:
|
|
78
|
+
- language: yaml
|
|
79
|
+
label: "Install Mono via Homebrew on macOS-15"
|
|
80
|
+
code: |
|
|
81
|
+
jobs:
|
|
82
|
+
build:
|
|
83
|
+
runs-on: macos-latest # macOS-15
|
|
84
|
+
steps:
|
|
85
|
+
- uses: actions/checkout@v4
|
|
86
|
+
|
|
87
|
+
- name: Install Mono
|
|
88
|
+
run: brew install mono
|
|
89
|
+
|
|
90
|
+
- name: Build with Mono
|
|
91
|
+
run: mono build.exe
|
|
92
|
+
- language: yaml
|
|
93
|
+
label: "Migrate from nuget CLI to dotnet nuget"
|
|
94
|
+
code: |
|
|
95
|
+
jobs:
|
|
96
|
+
build:
|
|
97
|
+
runs-on: macos-latest
|
|
98
|
+
steps:
|
|
99
|
+
- uses: actions/checkout@v4
|
|
100
|
+
|
|
101
|
+
- uses: actions/setup-dotnet@v4
|
|
102
|
+
with:
|
|
103
|
+
dotnet-version: '9.x'
|
|
104
|
+
|
|
105
|
+
# Before: nuget restore MySolution.sln
|
|
106
|
+
# After:
|
|
107
|
+
- name: Restore dependencies
|
|
108
|
+
run: dotnet restore MySolution.sln
|
|
109
|
+
|
|
110
|
+
# Before: nuget push *.nupkg -Source https://api.nuget.org/v3/index.json
|
|
111
|
+
# After:
|
|
112
|
+
- name: Publish package
|
|
113
|
+
run: dotnet nuget push "**/*.nupkg" --source https://api.nuget.org/v3/index.json
|
|
114
|
+
- language: yaml
|
|
115
|
+
label: "Migrate from nunit-console to dotnet test"
|
|
116
|
+
code: |
|
|
117
|
+
jobs:
|
|
118
|
+
test:
|
|
119
|
+
runs-on: macos-latest
|
|
120
|
+
steps:
|
|
121
|
+
- uses: actions/checkout@v4
|
|
122
|
+
|
|
123
|
+
- uses: actions/setup-dotnet@v4
|
|
124
|
+
with:
|
|
125
|
+
dotnet-version: '9.x'
|
|
126
|
+
|
|
127
|
+
# Before: nunit-console MyProject.Tests.dll
|
|
128
|
+
# After:
|
|
129
|
+
- name: Run tests
|
|
130
|
+
run: dotnet test MyProject.Tests/MyProject.Tests.csproj --logger "trx"
|
|
131
|
+
- language: yaml
|
|
132
|
+
label: "Pin to macos-14 as short-term bridge"
|
|
133
|
+
code: |
|
|
134
|
+
jobs:
|
|
135
|
+
build:
|
|
136
|
+
runs-on: macos-14 # Mono/NuGet/NUnit still available; retires Nov 2026
|
|
137
|
+
steps:
|
|
138
|
+
- uses: actions/checkout@v4
|
|
139
|
+
# ... existing workflow unchanged ...
|
|
140
|
+
prevention:
|
|
141
|
+
- "Never rely on pre-installed Mono, NuGet, or NUnit on macOS runners — always use setup steps (`dotnet`, `brew install mono`) for explicit dependency management."
|
|
142
|
+
- "Subscribe to actions/runner-images announcements (issues labeled 'Announcement') to receive advance notice of macOS-latest label migrations."
|
|
143
|
+
- "Use `macos-15` or `macos-latest` with explicit install steps for any tooling beyond the core macOS toolchain."
|
|
144
|
+
- "Migrate Mono/.NET Framework projects to .NET 9/10 — Mono is in maintenance mode and will continue to lose runner support."
|
|
145
|
+
docs:
|
|
146
|
+
- url: "https://github.com/actions/runner-images/issues/12520"
|
|
147
|
+
label: "runner-images#12520: macOS-latest will use macOS-15 in August 2025 — tool removal table"
|
|
148
|
+
- url: "https://github.com/actions/runner-images/blob/main/images/macos/macos-15-Readme.md"
|
|
149
|
+
label: "macOS-15 runner image README — installed software"
|
|
150
|
+
- url: "https://docs.github.com/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners"
|
|
151
|
+
label: "GitHub Docs: About GitHub-hosted runners"
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
id: runner-environment-045
|
|
2
|
+
title: "macOS-15 Removes Old Xcode Simulator SDKs — Only 3 Latest Xcode Versions Keep Platform Tools"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- macos
|
|
7
|
+
- macos-15
|
|
8
|
+
- xcode
|
|
9
|
+
- ios
|
|
10
|
+
- simulator
|
|
11
|
+
- sdk
|
|
12
|
+
- runner-image
|
|
13
|
+
- breaking-change
|
|
14
|
+
patterns:
|
|
15
|
+
- regex: "Requested.*simulator runtime.*not available|Could not find.*runtime.*for.*platform"
|
|
16
|
+
flags: "i"
|
|
17
|
+
- regex: "iphonesimulator.*SDK.*not found|No such SDK.*iphonesimulator"
|
|
18
|
+
flags: "i"
|
|
19
|
+
- regex: "error.*tvos.*simulator.*not.*installed|watchos.*sdk.*unavailable"
|
|
20
|
+
flags: "i"
|
|
21
|
+
- regex: "xcodebuild.*error.*platform.*version.*not.*installed"
|
|
22
|
+
flags: "i"
|
|
23
|
+
- regex: "Simulator runtime.*not installed.*for destination"
|
|
24
|
+
flags: "i"
|
|
25
|
+
error_messages:
|
|
26
|
+
- "xcodebuild: error: SDK 'iphonesimulator17.0' cannot be located."
|
|
27
|
+
- "error: The requested simulator runtime is not installed."
|
|
28
|
+
- "xcodebuild: error: Unable to find a destination matching the provided destination specifier"
|
|
29
|
+
- "Could not find the tvOS simulator runtime for the version specified."
|
|
30
|
+
- "Requested runtime 'com.apple.CoreSimulator.SimRuntime.watchOS-10-0' was not found."
|
|
31
|
+
root_cause: |
|
|
32
|
+
Beginning August 11, 2025, GitHub Actions macOS-15 (and later) runner images changed
|
|
33
|
+
their Xcode platform support policy: **only the three most recently installed Xcode versions
|
|
34
|
+
retain their platform tools** (SDK and simulator runtimes for iOS, tvOS, watchOS, visionOS).
|
|
35
|
+
Older Xcode versions remain on the image but have their simulator runtimes removed to
|
|
36
|
+
reclaim disk space.
|
|
37
|
+
|
|
38
|
+
The motivation was severe disk pressure on macOS runners caused by visionOS simulator
|
|
39
|
+
runtimes. Each Xcode version ships multiple runtimes (iOS, watchOS, tvOS, visionOS), and
|
|
40
|
+
keeping them for every installed Xcode version was exhausting the fixed disk allocation.
|
|
41
|
+
|
|
42
|
+
**Practical impact for macOS-15 images:**
|
|
43
|
+
The macOS-15 image ships with Xcode versions 16.0, 16.2, 16.3, 16.4, and 26.0 Beta
|
|
44
|
+
(as of mid-2026). Only the three most recent (16.3, 16.4, 26.0 Beta) retain full platform
|
|
45
|
+
tools. Workflows that target iOS 17.x or earlier simulators (which required Xcode ≤ 16.1)
|
|
46
|
+
will fail because those simulator runtimes are no longer present.
|
|
47
|
+
|
|
48
|
+
Workflows pinned to `macos-14` are unaffected but must migrate before macOS-14 retires
|
|
49
|
+
(November 2, 2026). The policy does NOT apply to macOS-13 or macOS-14 images — only
|
|
50
|
+
macOS-15 and newer.
|
|
51
|
+
|
|
52
|
+
Source: actions/runner-images#12541 (announced July 8, 2025; deployed August 11, 2025)
|
|
53
|
+
fix: |
|
|
54
|
+
**Option 1 — Upgrade your minimum deployment target** (recommended):
|
|
55
|
+
If your app targets iOS 17.x or earlier purely for historical support, update the
|
|
56
|
+
`IPHONEOS_DEPLOYMENT_TARGET` in your Xcode project to 18.x (iOS 18 = Xcode 16.x).
|
|
57
|
+
Modern apps rarely need to support OS versions older than what Xcode's latest SDK covers.
|
|
58
|
+
|
|
59
|
+
**Option 2 — Use xcode-select to pin a supported Xcode version**:
|
|
60
|
+
Check which Xcode versions have full platform tools on the macOS-15 image
|
|
61
|
+
(the README lists them), then use the correct destination syntax:
|
|
62
|
+
|
|
63
|
+
```yaml
|
|
64
|
+
- name: Select Xcode 16.4
|
|
65
|
+
run: sudo xcode-select -s /Applications/Xcode_16.4.app
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Option 3 — Test on device targets instead of simulators**:
|
|
69
|
+
If your CI only needs to build (not run on simulator), use `generic/platform=iOS`
|
|
70
|
+
instead of specifying a simulator runtime version.
|
|
71
|
+
|
|
72
|
+
**Option 4 — Install missing runtimes** (not recommended — slow, fragile):
|
|
73
|
+
You can download and install older simulator runtimes via `xcodebuild -downloadPlatform`
|
|
74
|
+
but this is time-consuming (~5-10 min) and fragile in CI.
|
|
75
|
+
fix_code:
|
|
76
|
+
- language: yaml
|
|
77
|
+
label: "Pin to a supported Xcode version with full platform tools"
|
|
78
|
+
code: |
|
|
79
|
+
jobs:
|
|
80
|
+
test-ios:
|
|
81
|
+
runs-on: macos-latest # macOS-15
|
|
82
|
+
steps:
|
|
83
|
+
- uses: actions/checkout@v4
|
|
84
|
+
|
|
85
|
+
# Select Xcode with full platform tools (check macos-15 README for current list)
|
|
86
|
+
- name: Select Xcode 16.4
|
|
87
|
+
run: sudo xcode-select -s /Applications/Xcode_16.4.app
|
|
88
|
+
|
|
89
|
+
- name: Build and Test
|
|
90
|
+
run: |
|
|
91
|
+
xcodebuild test \
|
|
92
|
+
-scheme MyApp \
|
|
93
|
+
-destination 'platform=iOS Simulator,name=iPhone 16,OS=18.4' \
|
|
94
|
+
CODE_SIGN_IDENTITY="" \
|
|
95
|
+
CODE_SIGNING_REQUIRED=NO
|
|
96
|
+
- language: yaml
|
|
97
|
+
label: "Build without specifying simulator runtime (avoids SDK lookup)"
|
|
98
|
+
code: |
|
|
99
|
+
jobs:
|
|
100
|
+
build-ios:
|
|
101
|
+
runs-on: macos-latest
|
|
102
|
+
steps:
|
|
103
|
+
- uses: actions/checkout@v4
|
|
104
|
+
|
|
105
|
+
- name: Build for generic iOS (no simulator runtime needed)
|
|
106
|
+
run: |
|
|
107
|
+
xcodebuild build \
|
|
108
|
+
-scheme MyApp \
|
|
109
|
+
-destination 'generic/platform=iOS' \
|
|
110
|
+
CODE_SIGN_IDENTITY="" \
|
|
111
|
+
CODE_SIGNING_REQUIRED=NO
|
|
112
|
+
- language: yaml
|
|
113
|
+
label: "Use a matrix to target only Xcode versions with platform tools"
|
|
114
|
+
code: |
|
|
115
|
+
jobs:
|
|
116
|
+
test:
|
|
117
|
+
runs-on: macos-latest
|
|
118
|
+
strategy:
|
|
119
|
+
matrix:
|
|
120
|
+
# Only include Xcode versions that have full platform tools on macOS-15
|
|
121
|
+
xcode: ['16.3', '16.4', '26.0']
|
|
122
|
+
steps:
|
|
123
|
+
- uses: actions/checkout@v4
|
|
124
|
+
|
|
125
|
+
- name: Select Xcode ${{ matrix.xcode }}
|
|
126
|
+
run: sudo xcode-select -s /Applications/Xcode_${{ matrix.xcode }}.app
|
|
127
|
+
|
|
128
|
+
- name: Test
|
|
129
|
+
run: xcodebuild test -scheme MyApp -destination 'platform=iOS Simulator,OS=latest,name=iPhone 16'
|
|
130
|
+
prevention:
|
|
131
|
+
- "Check the macOS runner README (linked below) to see which Xcode versions have full platform tools before writing xcodebuild destinations."
|
|
132
|
+
- "Avoid specifying old iOS/watchOS/tvOS SDK versions in xcodebuild -destination — always use 'OS=latest' or a version compatible with the most recent 3 Xcode releases."
|
|
133
|
+
- "Subscribe to runner-images announcements so you know which Xcode versions have platform tools on each image before they ship."
|
|
134
|
+
- "Don't hardcode simulator runtime versions — derive them from the Xcode version you're selecting."
|
|
135
|
+
docs:
|
|
136
|
+
- url: "https://github.com/actions/runner-images/issues/12541"
|
|
137
|
+
label: "runner-images#12541: Xcode platform tools support policy change announcement"
|
|
138
|
+
- url: "https://github.com/actions/runner-images/blob/main/images/macos/macos-15-Readme.md"
|
|
139
|
+
label: "macOS-15 runner README — Xcode versions and installed SDKs"
|
|
140
|
+
- url: "https://developer.apple.com/documentation/xcode/installing-additional-simulator-runtimes"
|
|
141
|
+
label: "Apple Docs: Installing additional simulator runtimes"
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
id: runner-environment-051
|
|
2
|
+
title: "Node.js 18, Ruby 3.1, Android NDK 26, GCC 9/10 Removed from Runner Images (Nov 2025)"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- nodejs-18
|
|
7
|
+
- ruby-31
|
|
8
|
+
- android-ndk
|
|
9
|
+
- gcc
|
|
10
|
+
- tool-removal
|
|
11
|
+
- ubuntu
|
|
12
|
+
- runner-images
|
|
13
|
+
- eol
|
|
14
|
+
patterns:
|
|
15
|
+
- regex: "node: command not found|node: not found"
|
|
16
|
+
flags: "i"
|
|
17
|
+
- regex: "ruby: command not found|ruby: not found"
|
|
18
|
+
flags: "i"
|
|
19
|
+
- regex: "ndk-build: command not found|NDK.*not found"
|
|
20
|
+
flags: "i"
|
|
21
|
+
- regex: "gcc-9: command not found|gcc-10: command not found|g\\+\\+-9: command not found"
|
|
22
|
+
flags: "i"
|
|
23
|
+
- regex: "Could not find the requested version of Node.*18"
|
|
24
|
+
flags: "i"
|
|
25
|
+
error_messages:
|
|
26
|
+
- "node: command not found"
|
|
27
|
+
- "ruby: command not found"
|
|
28
|
+
- "ndk-build: command not found"
|
|
29
|
+
- "gcc-9: command not found"
|
|
30
|
+
- "gcc-10: command not found"
|
|
31
|
+
- "Could not find the requested version of Node 18"
|
|
32
|
+
root_cause: |
|
|
33
|
+
In November 2025, GitHub removed several EOL (end-of-life) tool versions from the preinstalled
|
|
34
|
+
toolcache of Ubuntu and Windows runner images as part of their scheduled tool maintenance policy
|
|
35
|
+
(announced in runner-images#12898). The removals included:
|
|
36
|
+
|
|
37
|
+
- **Node.js 18** — reached EOL April 2025; removed from toolcache November 2025
|
|
38
|
+
- **Ruby 3.1** — reached EOL March 2025; removed from toolcache November 2025
|
|
39
|
+
- **Android NDK 26** — superseded by NDK 27/28; removed from images November 2025
|
|
40
|
+
- **GCC 9 and GCC 10** — superseded by GCC 11+; removed from Ubuntu images November 2025
|
|
41
|
+
|
|
42
|
+
Workflows that assumed these runtimes were preinstalled either fail with `command not found`
|
|
43
|
+
(if the tool was used without an explicit setup step) or fail during the setup action phase
|
|
44
|
+
(if a setup action is used but the requested version is no longer in the toolcache and
|
|
45
|
+
compilation from source fails in the time limit).
|
|
46
|
+
|
|
47
|
+
This is a particularly common failure pattern for:
|
|
48
|
+
- Legacy Android NDK builds using exact NDK version pinning
|
|
49
|
+
- Older Ruby gems/Fastlane pipelines that required Ruby 3.1 specifically
|
|
50
|
+
- C/C++ projects that specified `gcc-9` or `gcc-10` explicitly in their Makefiles or CMake configs
|
|
51
|
+
- Any workflow that ran `node --version` expecting v18.x without a prior setup-node step
|
|
52
|
+
fix: |
|
|
53
|
+
Explicitly install the required runtime version in the workflow using the appropriate setup
|
|
54
|
+
action, or migrate to a supported version that remains preinstalled on the runner.
|
|
55
|
+
|
|
56
|
+
**Node.js 18 → Node.js 22 (LTS):**
|
|
57
|
+
Upgrade to Node.js 22 (currently LTS) or at minimum Node.js 20 if v18-specific behavior
|
|
58
|
+
is required. Use `actions/setup-node` for explicit installation.
|
|
59
|
+
|
|
60
|
+
**Ruby 3.1 → Ruby 3.3+:**
|
|
61
|
+
Use `ruby/setup-ruby` to explicitly pin any Ruby version. Ruby 3.3 is the current stable release.
|
|
62
|
+
|
|
63
|
+
**Android NDK 26 → NDK 27/28:**
|
|
64
|
+
Update `ndk-version` in `actions/setup-android` or manually install the required NDK version
|
|
65
|
+
via the Android SDK manager.
|
|
66
|
+
|
|
67
|
+
**GCC 9/10 → GCC 12+:**
|
|
68
|
+
Use `apt-get install gcc-12 g++-12` or update your Makefile/CMake to target a supported GCC
|
|
69
|
+
version (GCC 11, 12, 13 remain available on Ubuntu 22.04 runners).
|
|
70
|
+
fix_code:
|
|
71
|
+
- language: yaml
|
|
72
|
+
label: "Explicitly install Node.js 18 (or upgrade to 22)"
|
|
73
|
+
code: |
|
|
74
|
+
jobs:
|
|
75
|
+
build:
|
|
76
|
+
runs-on: ubuntu-latest
|
|
77
|
+
steps:
|
|
78
|
+
- uses: actions/checkout@v4
|
|
79
|
+
- uses: actions/setup-node@v4
|
|
80
|
+
with:
|
|
81
|
+
node-version: '22' # or '18' to pin if still needed
|
|
82
|
+
cache: 'npm'
|
|
83
|
+
- run: npm ci && npm test
|
|
84
|
+
- language: yaml
|
|
85
|
+
label: "Install a specific Ruby version via setup-ruby"
|
|
86
|
+
code: |
|
|
87
|
+
jobs:
|
|
88
|
+
test:
|
|
89
|
+
runs-on: ubuntu-latest
|
|
90
|
+
steps:
|
|
91
|
+
- uses: actions/checkout@v4
|
|
92
|
+
- uses: ruby/setup-ruby@v1
|
|
93
|
+
with:
|
|
94
|
+
ruby-version: '3.3' # pin explicitly; never rely on preinstalled ruby
|
|
95
|
+
bundler-cache: true
|
|
96
|
+
- run: bundle exec rspec
|
|
97
|
+
- language: yaml
|
|
98
|
+
label: "Install GCC 9 explicitly on Ubuntu (for legacy C++ code)"
|
|
99
|
+
code: |
|
|
100
|
+
jobs:
|
|
101
|
+
build:
|
|
102
|
+
runs-on: ubuntu-22.04 # Ubuntu 22.04 still has apt packages for gcc-9
|
|
103
|
+
steps:
|
|
104
|
+
- uses: actions/checkout@v4
|
|
105
|
+
- run: sudo apt-get install -y gcc-9 g++-9
|
|
106
|
+
- run: make CC=gcc-9 CXX=g++-9
|
|
107
|
+
prevention:
|
|
108
|
+
- "Never assume a specific tool version is preinstalled. Always add an explicit setup step (`setup-node`, `setup-ruby`, `setup-android`) with a pinned version."
|
|
109
|
+
- "Subscribe to runner-images announcements and act before the removal deadline — GitHub typically gives 3-6 months notice."
|
|
110
|
+
- "Use the [runner-images software lists](https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2204-Readme.md) to verify which versions are available before assuming they exist."
|
|
111
|
+
- "When a CI tool version is EOL, plan the upgrade at EOL time — not when GitHub removes it from the runner."
|
|
112
|
+
docs:
|
|
113
|
+
- url: "https://github.com/actions/runner-images/issues/12898"
|
|
114
|
+
label: "runner-images#12898 — Nov 2025 tool removals announcement (Node 18, Ruby 3.1, NDK 26, GCC 9/10)"
|
|
115
|
+
- url: "https://github.com/actions/setup-node"
|
|
116
|
+
label: "actions/setup-node — explicitly install any Node.js version"
|
|
117
|
+
- url: "https://github.com/ruby/setup-ruby"
|
|
118
|
+
label: "ruby/setup-ruby — install any Ruby version"
|
|
119
|
+
- url: "https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2204-Readme.md"
|
|
120
|
+
label: "runner-images — Ubuntu 22.04 software list (verify what is preinstalled)"
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
id: runner-environment-038
|
|
2
|
+
title: "Runner Job Killed with Exit Code 137 (Out of Memory / OOM Kill)"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- oom
|
|
7
|
+
- exit-code-137
|
|
8
|
+
- memory
|
|
9
|
+
- killed
|
|
10
|
+
- sigkill
|
|
11
|
+
- runner
|
|
12
|
+
patterns:
|
|
13
|
+
- regex: "Process completed with exit code 137"
|
|
14
|
+
flags: "i"
|
|
15
|
+
- regex: "runner has received a shutdown signal"
|
|
16
|
+
flags: "i"
|
|
17
|
+
- regex: "The hosted runner.*lost communication with the server"
|
|
18
|
+
flags: "i"
|
|
19
|
+
- regex: "Killed\\s*$"
|
|
20
|
+
flags: "im"
|
|
21
|
+
error_messages:
|
|
22
|
+
- "Process completed with exit code 137."
|
|
23
|
+
- "The runner has received a shutdown signal. This can happen when the runner service is stopped, or a manually started runner is canceled."
|
|
24
|
+
- "The hosted runner: GitHub Actions N runner lost communication with the server. Anything after this message may not be captured."
|
|
25
|
+
- "Killed"
|
|
26
|
+
root_cause: |
|
|
27
|
+
Exit code 137 on Linux is 128 + signal 9 (SIGKILL), meaning the process was forcibly
|
|
28
|
+
terminated by the operating system's OOM (Out of Memory) killer. This happens when a process
|
|
29
|
+
or the runner VM exhausts available memory and the kernel kills it to recover resources.
|
|
30
|
+
|
|
31
|
+
GitHub-hosted runner memory allocations (standard runners):
|
|
32
|
+
- ubuntu-*/windows-*: 16 GB RAM, 14 GB swap
|
|
33
|
+
- macos-*: 14 GB RAM (Apple Silicon)
|
|
34
|
+
- Large runners: 32–64 GB depending on tier
|
|
35
|
+
|
|
36
|
+
Common root causes:
|
|
37
|
+
- JVM tools (Gradle, Maven, Kotlin compiler) defaulting to large heap fractions without
|
|
38
|
+
explicit -Xmx caps (JVM defaults to up to 25% of system RAM for heap)
|
|
39
|
+
- Node.js webpack/esbuild bundling large codebases without --max-old-space-size cap
|
|
40
|
+
- Docker build stages that cache too many layers in memory simultaneously
|
|
41
|
+
- Test suites with memory leaks that accumulate across hundreds of test cases
|
|
42
|
+
- cargo/rustc compilation with many parallel units (-j) exceeding available memory
|
|
43
|
+
- Multiple matrix jobs on a shared self-hosted runner competing for the same memory pool
|
|
44
|
+
|
|
45
|
+
The "runner has received a shutdown signal" message is a related pattern that can occur
|
|
46
|
+
when the runner VM is preempted by GitHub's infrastructure (less common, transient).
|
|
47
|
+
fix: |
|
|
48
|
+
Option 1 — Cap memory for known heavy tools:
|
|
49
|
+
- JVM: Set JAVA_OPTS="-Xmx4g -Xms512m" and GRADLE_OPTS="-Xmx4g -Dorg.gradle.daemon=false"
|
|
50
|
+
- Node.js: Set NODE_OPTIONS="--max-old-space-size=4096"
|
|
51
|
+
- Rust: Set CARGO_BUILD_JOBS to limit parallel compilation units
|
|
52
|
+
|
|
53
|
+
Option 2 — Free memory before intensive steps:
|
|
54
|
+
- Drop OS page cache: sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
|
|
55
|
+
- Use jlumbroso/free-disk-space action to reclaim space used by pre-installed tools
|
|
56
|
+
|
|
57
|
+
Option 3 — Upgrade runner size:
|
|
58
|
+
- Switch to ubuntu-latest-16-cores (64 GB RAM) for memory-intensive builds
|
|
59
|
+
|
|
60
|
+
Option 4 — For transient infrastructure OOM kills:
|
|
61
|
+
- Simply re-run the failed job — these are often one-off events
|
|
62
|
+
- Add workflow-level retry for idempotent builds
|
|
63
|
+
fix_code:
|
|
64
|
+
- language: yaml
|
|
65
|
+
label: "Cap JVM and Node.js memory to prevent OOM kills"
|
|
66
|
+
code: |
|
|
67
|
+
jobs:
|
|
68
|
+
build:
|
|
69
|
+
runs-on: ubuntu-latest
|
|
70
|
+
env:
|
|
71
|
+
JAVA_OPTS: "-Xmx4g -Xms512m"
|
|
72
|
+
GRADLE_OPTS: "-Xmx4g -Dorg.gradle.daemon=false -Dorg.gradle.workers.max=2"
|
|
73
|
+
NODE_OPTIONS: "--max-old-space-size=4096"
|
|
74
|
+
steps:
|
|
75
|
+
- uses: actions/checkout@v4
|
|
76
|
+
|
|
77
|
+
- name: Free OS page cache
|
|
78
|
+
run: sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches' || true
|
|
79
|
+
|
|
80
|
+
- name: Build
|
|
81
|
+
run: ./gradlew build
|
|
82
|
+
- language: yaml
|
|
83
|
+
label: "Use a larger runner for memory-intensive builds"
|
|
84
|
+
code: |
|
|
85
|
+
jobs:
|
|
86
|
+
build:
|
|
87
|
+
# Standard: ubuntu-latest = 16 GB RAM
|
|
88
|
+
# Large runners require billing configuration
|
|
89
|
+
runs-on: ubuntu-latest-16-cores # 64 GB RAM
|
|
90
|
+
steps:
|
|
91
|
+
- uses: actions/checkout@v4
|
|
92
|
+
- run: make all
|
|
93
|
+
- language: yaml
|
|
94
|
+
label: "Debug memory usage before OOM occurs"
|
|
95
|
+
code: |
|
|
96
|
+
- name: Check available memory
|
|
97
|
+
run: |
|
|
98
|
+
echo "=== Free memory ==="
|
|
99
|
+
free -h
|
|
100
|
+
echo "=== /proc/meminfo ==="
|
|
101
|
+
grep -E "MemTotal|MemFree|MemAvailable|SwapTotal|SwapFree" /proc/meminfo
|
|
102
|
+
prevention:
|
|
103
|
+
- "Always set explicit heap caps for JVM-based tools (JAVA_OPTS, GRADLE_OPTS) — never rely on the JVM's auto-detection of available memory."
|
|
104
|
+
- "Add NODE_OPTIONS=--max-old-space-size=4096 for Node.js build tools processing large codebases."
|
|
105
|
+
- "Add a 'free memory' step early in memory-intensive jobs using `echo 3 > /proc/sys/vm/drop_caches`."
|
|
106
|
+
- "Profile memory with `free -h` at start and end of build phases to catch accumulation before hitting the limit."
|
|
107
|
+
- "Consider the jlumbroso/free-disk-space action which also frees memory by removing unused pre-installed tools."
|
|
108
|
+
- "For self-hosted runners, set memory limits per job via systemd slice or cgroup to prevent one job from OOM-killing others."
|
|
109
|
+
docs:
|
|
110
|
+
- url: "https://github.com/actions/runner/issues/3724"
|
|
111
|
+
label: "actions/runner #3724 — runner shutdown signal reports"
|
|
112
|
+
- url: "https://github.com/orgs/community/discussions/188508"
|
|
113
|
+
label: "Community discussion #188508 — unexpected job cancellations and OOM"
|
|
114
|
+
- url: "https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources"
|
|
115
|
+
label: "GitHub-hosted runner hardware resources"
|
|
116
|
+
- url: "https://stackoverflow.com/questions/72489714/github-actions-job-cancelled-for-no-obvious-reason"
|
|
117
|
+
label: "Stack Overflow — job cancelled with no obvious reason (exit 137)"
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
id: runner-environment-041
|
|
2
|
+
title: "actions/setup-go Go 1.23 Module Cache Restore Fails — Tar Extraction Error on Telemetry Files"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- actions/setup-go
|
|
7
|
+
- go
|
|
8
|
+
- go-1.23
|
|
9
|
+
- cache
|
|
10
|
+
- tar
|
|
11
|
+
- telemetry
|
|
12
|
+
- module-cache
|
|
13
|
+
patterns:
|
|
14
|
+
- regex: "Cannot open: File exists"
|
|
15
|
+
flags: "i"
|
|
16
|
+
- regex: "tar.*failed with exit code 2|exit code 2.*tar"
|
|
17
|
+
flags: "i"
|
|
18
|
+
- regex: "Failed to restore.*usr/bin/tar.*failed"
|
|
19
|
+
flags: "i"
|
|
20
|
+
- regex: "golang\\.org/x/telemetry.*File exists"
|
|
21
|
+
flags: "i"
|
|
22
|
+
error_messages:
|
|
23
|
+
- "/usr/bin/tar: ../../../go/pkg/mod/golang.org/x/telemetry/config@v0.31.0/config.json: Cannot open: File exists"
|
|
24
|
+
- "/usr/bin/tar: Exiting with failure status due to previous errors"
|
|
25
|
+
- "Warning: Failed to restore: \"/usr/bin/tar\" failed with error: The process '/usr/bin/tar' failed with exit code 2"
|
|
26
|
+
- "Cache is not found"
|
|
27
|
+
root_cause: |
|
|
28
|
+
Go 1.23.0 introduced a telemetry subsystem that writes configuration files into the
|
|
29
|
+
module cache at `$GOPATH/pkg/mod/golang.org/x/telemetry/`. When `actions/setup-go`
|
|
30
|
+
attempts to restore a previously saved module cache, `tar` fails to extract these
|
|
31
|
+
telemetry files because they **already exist** on the runner filesystem from the
|
|
32
|
+
Go toolchain installation step.
|
|
33
|
+
|
|
34
|
+
The collision happens because:
|
|
35
|
+
1. `actions/setup-go` installs Go 1.23.0 (which creates telemetry files in the
|
|
36
|
+
module cache directory during toolchain initialization)
|
|
37
|
+
2. When restoring the cached module archive, `tar` attempts to write the same
|
|
38
|
+
telemetry files and hits "Cannot open: File exists" for each conflicting path
|
|
39
|
+
3. `tar` exits with code 2, causing the cache restore to report failure
|
|
40
|
+
4. The module cache falls back to a full fresh download — wasting CI minutes
|
|
41
|
+
|
|
42
|
+
This was a regression introduced in Go 1.23.0 and fixed in Go 1.23.1 by adjusting
|
|
43
|
+
how the telemetry module integrates with the module cache to avoid the path collision.
|
|
44
|
+
|
|
45
|
+
Source: actions/setup-go issue #506
|
|
46
|
+
fix: |
|
|
47
|
+
**Upgrade to Go 1.23.1 or later** — the fix was shipped in the patch release.
|
|
48
|
+
Pin `go-version` to `>=1.23.1` in your `actions/setup-go` step.
|
|
49
|
+
|
|
50
|
+
If you must remain on 1.23.0 temporarily, the workaround is to delete the conflicting
|
|
51
|
+
telemetry directory before the cache restore runs, or to disable module cache caching
|
|
52
|
+
entirely for affected workflows until you can upgrade.
|
|
53
|
+
fix_code:
|
|
54
|
+
- language: yaml
|
|
55
|
+
label: "Fixed — pin to Go 1.23.1+ to avoid the telemetry cache collision"
|
|
56
|
+
code: |
|
|
57
|
+
- uses: actions/setup-go@v5
|
|
58
|
+
with:
|
|
59
|
+
go-version: '1.23.1' # 1.23.0 has the tar collision bug; 1.23.1+ is fixed
|
|
60
|
+
cache: true
|
|
61
|
+
- language: yaml
|
|
62
|
+
label: "Fixed — use go-version-file to inherit version from go.mod"
|
|
63
|
+
code: |
|
|
64
|
+
# ✅ RECOMMENDED: source version from go.mod so the workflow stays in sync automatically
|
|
65
|
+
- uses: actions/setup-go@v5
|
|
66
|
+
with:
|
|
67
|
+
go-version-file: go.mod # reads the version from the go directive in go.mod
|
|
68
|
+
cache: true
|
|
69
|
+
# Ensure go.mod specifies 'go 1.23.1' or later to avoid the cache bug
|
|
70
|
+
- language: yaml
|
|
71
|
+
label: "Workaround — clear telemetry before cache restore (Go 1.23.0 only)"
|
|
72
|
+
code: |
|
|
73
|
+
# Workaround if stuck on Go 1.23.0: pre-remove telemetry path before setup-go
|
|
74
|
+
- name: Clear stale telemetry module cache
|
|
75
|
+
run: rm -rf ~/go/pkg/mod/golang.org/x/telemetry || true
|
|
76
|
+
|
|
77
|
+
- uses: actions/setup-go@v5
|
|
78
|
+
with:
|
|
79
|
+
go-version: '1.23.0'
|
|
80
|
+
cache: true
|
|
81
|
+
prevention:
|
|
82
|
+
- "Pin `go-version` to patch releases (e.g., `1.23.1`) rather than minor versions (e.g., `1.23`) to avoid picking up newly released patch versions with regressions before they are fixed."
|
|
83
|
+
- "Use `go-version-file: go.mod` to keep CI and local development in sync — update go.mod to `go 1.23.1` or later."
|
|
84
|
+
- "Monitor `actions/setup-go` releases for patch notes when upgrading across Go minor versions."
|
|
85
|
+
- "If cache restore fails with tar errors, check if the error involves newly introduced toolchain files that collide with the restore path."
|
|
86
|
+
docs:
|
|
87
|
+
- url: "https://github.com/actions/setup-go/issues/506"
|
|
88
|
+
label: "actions/setup-go issue #506 — Go 1.23 telemetry cache tar collision"
|
|
89
|
+
- url: "https://github.com/actions/setup-go"
|
|
90
|
+
label: "actions/setup-go repository"
|
|
91
|
+
- url: "https://go.dev/doc/devel/release#go1.23.minor"
|
|
92
|
+
label: "Go 1.23 release notes and minor releases"
|