@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.
Files changed (58) hide show
  1. package/dist/db/search.js +3 -1
  2. package/dist/db/search.js.map +1 -1
  3. package/dist/tools/suggest-fix.d.ts.map +1 -1
  4. package/dist/tools/suggest-fix.js +5 -1
  5. package/dist/tools/suggest-fix.js.map +1 -1
  6. package/errors/caching-artifacts/cache-key-too-long.yml +93 -0
  7. package/errors/caching-artifacts/cache-path-not-exist-skipped.yml +152 -0
  8. package/errors/caching-artifacts/cache-save-same-key-html-conflict.yml +109 -0
  9. package/errors/caching-artifacts/docker-buildx-gha-cache-capacity.yml +107 -0
  10. package/errors/caching-artifacts/setup-ruby-bundler-ephemeral-workdir-cache-miss.yml +147 -0
  11. package/errors/caching-artifacts/upload-artifact-v3-retirement-blocked.yml +123 -0
  12. package/errors/caching-artifacts/upload-artifact-v4-large-file-macos-hang.yml +111 -0
  13. package/errors/concurrency-timing/always-cleanup-5min-forced-kill.yml +140 -0
  14. package/errors/concurrency-timing/concurrency-group-env-context-undefined.yml +99 -0
  15. package/errors/concurrency-timing/required-check-pending-path-filter-skip.yml +160 -0
  16. package/errors/concurrency-timing/wait-timer-cancel-in-progress-starvation.yml +125 -0
  17. package/errors/known-unsolved/composite-action-step-timeout-minutes-ignored.yml +146 -0
  18. package/errors/known-unsolved/reusable-workflow-no-composite-action-call.yml +116 -0
  19. package/errors/known-unsolved/schedule-trigger-default-branch-only.yml +113 -0
  20. package/errors/known-unsolved/secrets-not-allowed-in-if-conditions.yml +149 -0
  21. package/errors/known-unsolved/workflow-50-rerun-limit.yml +110 -0
  22. package/errors/permissions-auth/check-run-status-modification-blocked.yml +134 -0
  23. package/errors/permissions-auth/dependabot-pr-secrets-unavailable.yml +133 -0
  24. package/errors/permissions-auth/fine-grained-pat-deployment-write-required.yml +146 -0
  25. package/errors/permissions-auth/github-app-installation-token-new-format.yml +124 -0
  26. package/errors/permissions-auth/github-packages-read-requires-packages-permission.yml +128 -0
  27. package/errors/permissions-auth/oidc-id-token-write-permission-missing.yml +169 -0
  28. package/errors/permissions-auth/permissions-empty-block-removes-contents-read.yml +97 -0
  29. package/errors/permissions-auth/reusable-workflow-permissions-not-inherited.yml +114 -0
  30. package/errors/runner-environment/checkout-windows-ebusy-lock.yml +124 -0
  31. package/errors/runner-environment/deprecated-action-version-auto-rejected.yml +89 -0
  32. package/errors/runner-environment/github-hosted-runner-disk-space-full.yml +85 -0
  33. package/errors/runner-environment/github-path-same-step-not-found.yml +114 -0
  34. package/errors/runner-environment/github-script-v6-octokit-rest-actions-not-function.yml +87 -0
  35. package/errors/runner-environment/macos-13-deprecation-brownout.yml +93 -0
  36. package/errors/runner-environment/macos-15-mono-nuget-removed.yml +151 -0
  37. package/errors/runner-environment/macos-15-xcode-simulator-sdk-policy.yml +141 -0
  38. package/errors/runner-environment/multi-runtime-nov2025-removal.yml +120 -0
  39. package/errors/runner-environment/runner-oom-exit-code-137.yml +117 -0
  40. package/errors/runner-environment/setup-go-go123-telemetry-cache-failure.yml +92 -0
  41. package/errors/runner-environment/setup-java-distribution-required.yml +108 -0
  42. package/errors/runner-environment/ubuntu-2004-retirement-brownout.yml +107 -0
  43. package/errors/runner-environment/windows-latest-d-drive-removed.yml +104 -0
  44. package/errors/runner-environment/windows-vs2026-cuda-host-compiler-unsupported.yml +145 -0
  45. package/errors/silent-failures/event-commits-empty-on-workflow-dispatch.yml +110 -0
  46. package/errors/silent-failures/fetch-tags-depth-one-silent-no-op.yml +77 -0
  47. package/errors/silent-failures/github-env-multiline-value-truncated.yml +127 -0
  48. package/errors/silent-failures/github-sha-pr-merge-commit-not-head.yml +150 -0
  49. package/errors/silent-failures/job-output-masked-as-secret-empty.yml +147 -0
  50. package/errors/silent-failures/upload-artifact-permissions-stripped.yml +98 -0
  51. package/errors/triggers/pull-request-branches-filter-matches-base-not-head.yml +140 -0
  52. package/errors/triggers/push-event-fires-on-branch-delete.yml +129 -0
  53. package/errors/triggers/push-first-commit-before-sha-zeros.yml +160 -0
  54. package/errors/yaml-syntax/continue-on-error-env-context-rejected.yml +130 -0
  55. package/errors/yaml-syntax/fromjson-empty-string-crash.yml +99 -0
  56. package/errors/yaml-syntax/if-bang-negation-yaml-tag.yml +145 -0
  57. package/errors/yaml-syntax/local-action-path-always-top-level.yml +142 -0
  58. 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"