@htekdev/actions-debugger 1.0.13 → 1.0.15

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 (54) 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/docker-buildx-gha-cache-capacity.yml +107 -0
  9. package/errors/caching-artifacts/setup-ruby-bundler-ephemeral-workdir-cache-miss.yml +147 -0
  10. package/errors/caching-artifacts/upload-artifact-v3-retirement-blocked.yml +123 -0
  11. package/errors/concurrency-timing/always-cleanup-5min-forced-kill.yml +140 -0
  12. package/errors/concurrency-timing/concurrency-group-env-context-undefined.yml +99 -0
  13. package/errors/concurrency-timing/required-check-pending-path-filter-skip.yml +160 -0
  14. package/errors/concurrency-timing/wait-timer-cancel-in-progress-starvation.yml +125 -0
  15. package/errors/known-unsolved/composite-action-step-timeout-minutes-ignored.yml +146 -0
  16. package/errors/known-unsolved/reusable-workflow-no-composite-action-call.yml +116 -0
  17. package/errors/known-unsolved/schedule-trigger-default-branch-only.yml +113 -0
  18. package/errors/known-unsolved/secrets-not-allowed-in-if-conditions.yml +149 -0
  19. package/errors/permissions-auth/dependabot-pr-secrets-unavailable.yml +133 -0
  20. package/errors/permissions-auth/fine-grained-pat-deployment-write-required.yml +146 -0
  21. package/errors/permissions-auth/github-app-installation-token-new-format.yml +124 -0
  22. package/errors/permissions-auth/github-packages-read-requires-packages-permission.yml +128 -0
  23. package/errors/permissions-auth/oidc-id-token-write-permission-missing.yml +169 -0
  24. package/errors/permissions-auth/permissions-empty-block-removes-contents-read.yml +97 -0
  25. package/errors/permissions-auth/reusable-workflow-permissions-not-inherited.yml +114 -0
  26. package/errors/runner-environment/az-powershell-14-to-15-breaking.yml +108 -0
  27. package/errors/runner-environment/checkout-windows-ebusy-lock.yml +124 -0
  28. package/errors/runner-environment/deprecated-action-version-auto-rejected.yml +89 -0
  29. package/errors/runner-environment/github-hosted-runner-disk-space-full.yml +85 -0
  30. package/errors/runner-environment/github-path-same-step-not-found.yml +114 -0
  31. package/errors/runner-environment/github-script-v6-octokit-rest-actions-not-function.yml +87 -0
  32. package/errors/runner-environment/macos-15-mono-nuget-removed.yml +151 -0
  33. package/errors/runner-environment/macos-15-xcode-simulator-sdk-policy.yml +141 -0
  34. package/errors/runner-environment/runner-oom-exit-code-137.yml +117 -0
  35. package/errors/runner-environment/setup-go-go123-telemetry-cache-failure.yml +92 -0
  36. package/errors/runner-environment/setup-java-distribution-required.yml +108 -0
  37. package/errors/runner-environment/ubuntu-2204-precached-docker-removed.yml +110 -0
  38. package/errors/runner-environment/windows-latest-d-drive-removed.yml +104 -0
  39. package/errors/runner-environment/windows-msvc-ltcg-mixed-image-versions.yml +112 -0
  40. package/errors/runner-environment/windows-vs2026-cuda-host-compiler-unsupported.yml +145 -0
  41. package/errors/silent-failures/app-store-ios26-sdk-required.yml +113 -0
  42. package/errors/silent-failures/event-commits-empty-on-workflow-dispatch.yml +110 -0
  43. package/errors/silent-failures/fetch-tags-depth-one-silent-no-op.yml +77 -0
  44. package/errors/silent-failures/github-env-multiline-value-truncated.yml +127 -0
  45. package/errors/silent-failures/github-sha-pr-merge-commit-not-head.yml +150 -0
  46. package/errors/silent-failures/job-output-masked-as-secret-empty.yml +147 -0
  47. package/errors/silent-failures/upload-artifact-permissions-stripped.yml +98 -0
  48. package/errors/triggers/pull-request-branches-filter-matches-base-not-head.yml +140 -0
  49. package/errors/triggers/push-event-fires-on-branch-delete.yml +129 -0
  50. package/errors/triggers/push-first-commit-before-sha-zeros.yml +160 -0
  51. package/errors/yaml-syntax/fromjson-empty-string-crash.yml +99 -0
  52. package/errors/yaml-syntax/if-bang-negation-yaml-tag.yml +145 -0
  53. package/errors/yaml-syntax/local-action-path-always-top-level.yml +142 -0
  54. package/package.json +1 -1
@@ -0,0 +1,87 @@
1
+ id: runner-environment-047
2
+ title: "actions/github-script@v6 octokit.rest.actions.* Methods Not Available (Stale Octokit Bundle)"
3
+ category: runner-environment
4
+ severity: error
5
+ tags:
6
+ - github-script
7
+ - octokit
8
+ - rest-api
9
+ - variables-api
10
+ - actions-api
11
+ - version-mismatch
12
+ patterns:
13
+ - regex: "github\\.rest\\.actions\\.[a-zA-Z]+ is not a function"
14
+ flags: "i"
15
+ - regex: "TypeError.*github\\.rest\\.actions\\."
16
+ flags: "i"
17
+ - regex: "Unhandled error: TypeError.*github\\.rest\\."
18
+ flags: "i"
19
+ error_messages:
20
+ - "TypeError: github.rest.actions.createRepoVariable is not a function"
21
+ - "TypeError: github.rest.actions.listRepoVariables is not a function"
22
+ - "TypeError: github.rest.actions.getEnvironmentVariable is not a function"
23
+ - "TypeError: github.rest.actions.updateRepoVariable is not a function"
24
+ - "Unhandled error: TypeError: github.rest.actions.createOrUpdateRepoVariable is not a function"
25
+ root_cause: |
26
+ `actions/github-script@v6` bundles `@octokit/plugin-rest-endpoint-methods` v6.3.0, which
27
+ predates GitHub's Variables API endpoints and several other newer REST endpoints added to the
28
+ GitHub API in 2023. These methods were added to the Octokit plugin in v6.8.0+.
29
+
30
+ When a workflow step calls `github.rest.actions.createRepoVariable()`,
31
+ `github.rest.actions.listRepoVariables()`, `github.rest.actions.listEnvironmentVariables()`,
32
+ or other Variables API methods, these functions simply do not exist in the bundled octokit
33
+ inside `github-script@v6`. JavaScript returns `undefined` when accessing the property, and
34
+ attempting to call it throws a `TypeError: X is not a function` that fails the step immediately.
35
+
36
+ The workflow log shows the TypeError and a non-zero exit code. The confusing part is that the
37
+ GitHub REST API itself fully supports these endpoints — the failure is an action version issue,
38
+ not an API permission or token scope issue.
39
+ fix: |
40
+ Upgrade to `actions/github-script@v7`, which ships with a significantly newer version of
41
+ `@octokit/plugin-rest-endpoint-methods` that includes the Variables API and all other
42
+ endpoints added since 2023. As a workaround when staying on v6, use `github.request()`
43
+ with the raw REST endpoint path to call any API method directly, bypassing the typed wrapper.
44
+ fix_code:
45
+ - language: yaml
46
+ label: "Upgrade to github-script@v7 (recommended)"
47
+ code: |
48
+ - uses: actions/github-script@v7 # v7 ships updated @octokit/plugin-rest-endpoint-methods
49
+ with:
50
+ script: |
51
+ await github.rest.actions.createRepoVariable({
52
+ owner: context.repo.owner,
53
+ repo: context.repo.repo,
54
+ name: 'MY_VAR',
55
+ value: 'my-value'
56
+ });
57
+ - language: yaml
58
+ label: "Workaround for v6: use github.request() with raw REST path"
59
+ code: |
60
+ - uses: actions/github-script@v6
61
+ with:
62
+ script: |
63
+ // Use github.request() directly — bypasses the typed wrapper
64
+ await github.request('POST /repos/{owner}/{repo}/actions/variables', {
65
+ owner: context.repo.owner,
66
+ repo: context.repo.repo,
67
+ name: 'MY_VAR',
68
+ value: 'my-value'
69
+ });
70
+
71
+ // List variables example
72
+ const { data } = await github.request(
73
+ 'GET /repos/{owner}/{repo}/actions/variables',
74
+ { owner: context.repo.owner, repo: context.repo.repo }
75
+ );
76
+ console.log(data.variables);
77
+ prevention:
78
+ - "Pin to `actions/github-script@v7` or later for any workflow using Variables API or other endpoints added after mid-2022"
79
+ - "When adding a new `github.rest.*` call, verify the method exists in the action version's bundled octokit before deploying"
80
+ - "Use `github.request()` with raw REST paths as a version-independent fallback for any endpoint call"
81
+ docs:
82
+ - url: "https://github.com/actions/github-script/issues/345"
83
+ label: "actions/github-script#345 — octokit.rest.actions not available"
84
+ - url: "https://github.com/actions/github-script/releases/tag/v7.0.0"
85
+ label: "actions/github-script v7.0.0 release — updated @octokit/plugin-rest-endpoint-methods"
86
+ - url: "https://octokit.github.io/rest.js/v18/#actions"
87
+ label: "Octokit REST.js — actions endpoints reference"
@@ -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,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"