@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,124 @@
1
+ id: runner-environment-042
2
+ title: "actions/checkout EBUSY File Lock on Windows Self-Hosted Runners"
3
+ category: runner-environment
4
+ severity: error
5
+ tags:
6
+ - windows
7
+ - self-hosted
8
+ - checkout
9
+ - ebusy
10
+ - file-lock
11
+ - git-fsmonitor
12
+ patterns:
13
+ - regex: "EBUSY.*resource busy or locked"
14
+ flags: "i"
15
+ - regex: "File was unable to be removed.*EBUSY"
16
+ flags: "i"
17
+ - regex: "Unable to remove.*_temp.*EBUSY"
18
+ flags: "i"
19
+ error_messages:
20
+ - "Error: File was unable to be removed Error: EBUSY: resource busy or locked, rmdir 'C:\\Users\\...\\runner\\_temp\\...'"
21
+ - "Error: EBUSY: resource busy or locked, rmdir"
22
+ - "Error: The process cannot access the file because it is being used by another process"
23
+ root_cause: |
24
+ On Windows self-hosted runners, `actions/checkout` fails with an `EBUSY` (resource
25
+ busy or locked) error when attempting to clean up temp directories during checkout.
26
+
27
+ **Primary cause — Git FSMonitor:**
28
+ Git's `core.fsmonitor` daemon (enabled by default in Git 2.36+) keeps a file handle
29
+ open on the repository directory. When `actions/checkout` tries to remove or clean the
30
+ `_temp` directory between runs, the FSMonitor process holds the lock, causing EBUSY.
31
+
32
+ **Secondary causes:**
33
+ - Windows Defender / antivirus scanning files that checkout is trying to delete
34
+ - Other processes (IDE file watchers, npm watchers, running Node processes) holding
35
+ handles on workspace files
36
+ - Concurrent runner jobs accessing the same workspace directory
37
+
38
+ **Why Windows only:**
39
+ Linux/macOS do not enforce EBUSY locks in the same way. Windows file locking is
40
+ advisory on Unix but mandatory on NTFS, so the same handle that would succeed on
41
+ Linux causes a hard error on Windows.
42
+
43
+ Source: actions/checkout#1388
44
+ fix: |
45
+ **Option 1 (recommended): Disable Git FSMonitor on the runner**
46
+
47
+ Configure Git globally on the self-hosted runner to disable fsmonitor:
48
+ ```
49
+ git config --global core.fsmonitor false
50
+ git config --global core.useBuiltinFSMonitor false
51
+ ```
52
+
53
+ **Option 2: Add a pre-checkout cleanup step**
54
+
55
+ Kill any lingering Git processes before checkout:
56
+ ```yaml
57
+ - name: Kill lingering git processes
58
+ shell: pwsh
59
+ run: Get-Process -Name "git" -ErrorAction SilentlyContinue | Stop-Process -Force
60
+ ```
61
+
62
+ **Option 3: Configure antivirus exclusions**
63
+
64
+ Add the runner workspace directory (e.g., `C:\actions-runner\_work\`) to Windows
65
+ Defender's exclusion list on the self-hosted runner machine.
66
+
67
+ **Option 4: Use `clean: false` and handle cleanup manually**
68
+
69
+ Setting `clean: false` on `actions/checkout` prevents the step from attempting to
70
+ clean the workspace, avoiding the lock conflict entirely.
71
+ fix_code:
72
+ - language: yaml
73
+ label: "Workaround — disable git FSMonitor before checkout"
74
+ code: |
75
+ jobs:
76
+ build:
77
+ runs-on: [self-hosted, windows]
78
+ steps:
79
+ # Kill git fsmonitor daemon before checkout to release file locks
80
+ - name: Disable git fsmonitor
81
+ shell: pwsh
82
+ run: |
83
+ git config --global core.fsmonitor false
84
+ git config --global core.useBuiltinFSMonitor false
85
+ Get-Process -Name "git" -ErrorAction SilentlyContinue | Stop-Process -Force
86
+
87
+ - uses: actions/checkout@v4
88
+ - language: yaml
89
+ label: "Workaround — skip workspace clean to avoid EBUSY on _temp"
90
+ code: |
91
+ jobs:
92
+ build:
93
+ runs-on: [self-hosted, windows]
94
+ steps:
95
+ - uses: actions/checkout@v4
96
+ with:
97
+ clean: false # Skip workspace clean; avoids EBUSY on locked dirs
98
+ - language: yaml
99
+ label: "Workaround — retry checkout on EBUSY failure"
100
+ code: |
101
+ jobs:
102
+ build:
103
+ runs-on: [self-hosted, windows]
104
+ steps:
105
+ - name: Checkout with retry
106
+ uses: nick-fields/retry@v3
107
+ with:
108
+ timeout_minutes: 5
109
+ max_attempts: 3
110
+ command: git checkout
111
+ - uses: actions/checkout@v4
112
+ prevention:
113
+ - "Disable Git FSMonitor globally on Windows self-hosted runners: `git config --global core.fsmonitor false`."
114
+ - "Add the runner `_work` directory to Windows Defender exclusions — AV scanning causes EBUSY on files checkout needs to delete."
115
+ - "Avoid running multiple workflow jobs concurrently on the same workspace directory on a single Windows self-hosted runner."
116
+ - "Upgrade to `actions/checkout@v4` — later versions have improved retry logic and are more resilient to transient locks."
117
+ - "Consider using ephemeral self-hosted runners that start fresh for each job, eliminating stale workspace lock issues entirely."
118
+ docs:
119
+ - url: "https://github.com/actions/checkout/issues/1388"
120
+ label: "actions/checkout#1388 — EBUSY resource busy or locked on Windows self-hosted"
121
+ - url: "https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners"
122
+ label: "GitHub Docs: About self-hosted runners"
123
+ - url: "https://git-scm.com/docs/git-config#Documentation/git-config.txt-corefsmonitor"
124
+ label: "Git config: core.fsmonitor"
@@ -0,0 +1,89 @@
1
+ id: runner-environment-037
2
+ title: "Deprecated Action Version Automatically Rejected by Runner"
3
+ category: runner-environment
4
+ severity: error
5
+ tags:
6
+ - deprecated
7
+ - action-version
8
+ - actions-cache
9
+ - breaking-change
10
+ - pinning
11
+ - migration
12
+ patterns:
13
+ - regex: "This request has been automatically failed because it uses a deprecated version of"
14
+ flags: "i"
15
+ - regex: "uses a deprecated version of `actions/(cache|checkout|upload-artifact|download-artifact)"
16
+ flags: "i"
17
+ - regex: "Please update your workflow to use v[0-9]+ of `actions/"
18
+ flags: "i"
19
+ error_messages:
20
+ - "Error: This request has been automatically failed because it uses a deprecated version of `actions/cache: v4.0.2`. Please update your workflow to use v3/v4 of actions/cache. Learn more: https://github.blog/changelog/..."
21
+ - "Error: This request has been automatically failed because it uses a deprecated version of `actions/upload-artifact: v1`."
22
+ root_cause: |
23
+ GitHub periodically deprecates specific minor/patch version tags of official actions (e.g.,
24
+ actions/cache, actions/checkout, actions/upload-artifact). When a workflow pins a deprecated
25
+ specific version (e.g., @v4.0.2 instead of @v4), the Actions runner rejects the entire run
26
+ immediately with an "automatically failed" message — before executing any step logic.
27
+
28
+ This is distinct from a runtime failure: the runner halts before any user code runs, which
29
+ means logs contain only the rejection message and no build output.
30
+
31
+ Deprecation schedules and affected versions are announced via GitHub Changelog. Common
32
+ scenarios that trigger this:
33
+ - Pinning exact minor/patch SHA-like versions (v4.0.2) instead of major aliases (v4)
34
+ - Old workflow files that predate a deprecation cycle and have not been updated
35
+ - Third-party or internal actions that internally depend on deprecated toolkit versions
36
+ - Dependabot bumping a minor version that happens to be on the deprecated list
37
+
38
+ Affected actions as of 2024-2026 include actions/cache v1/v2, specific v4.0.x minor pins,
39
+ actions/upload-artifact v1/v2, and associated @actions/toolkit package versions used as
40
+ dependencies in published actions.
41
+ fix: |
42
+ Update all action `uses:` references to a currently supported version tag.
43
+
44
+ For official GitHub actions, always prefer the major version alias (e.g., @v4, @v3) rather
45
+ than pinning a minor or patch version. This ensures your workflow automatically receives
46
+ non-breaking updates and avoids deprecation gates.
47
+
48
+ To track deprecation notices proactively:
49
+ - Watch or subscribe to https://github.blog/changelog/ for "breaking changes" announcements
50
+ - Enable Dependabot for GitHub Actions in your repository
51
+ - Check the action's GitHub releases page for deprecation notices in release notes
52
+ fix_code:
53
+ - language: yaml
54
+ label: "Use major version alias instead of pinned minor version"
55
+ code: |
56
+ jobs:
57
+ build:
58
+ steps:
59
+ # ❌ Pinned minor version — may be auto-rejected after deprecation
60
+ - uses: actions/cache@v4.0.2
61
+
62
+ # ✅ Major alias — always points to latest supported minor in that major
63
+ - uses: actions/cache@v4
64
+
65
+ # ✅ Full SHA pin — immune to deprecation gates (security-conscious alternative)
66
+ - uses: actions/cache@5a3ec84eff668545956fd18022155c47c3f8e48
67
+ - language: yaml
68
+ label: "Enable Dependabot to keep action versions current"
69
+ code: |
70
+ # .github/dependabot.yml
71
+ version: 2
72
+ updates:
73
+ - package-ecosystem: "github-actions"
74
+ directory: "/"
75
+ schedule:
76
+ interval: "weekly"
77
+ prevention:
78
+ - "Use major version aliases (@v4, @v3) instead of exact minor/patch versions for official GitHub actions."
79
+ - "Subscribe to github.blog/changelog and watch for 'Notice of upcoming releases and breaking changes for GitHub Actions' posts."
80
+ - "Enable Dependabot for the github-actions ecosystem in your repository to auto-bump pinned versions."
81
+ - "Periodically audit your workflows for pinned minor/patch versions: grep -r 'uses:' .github/workflows/ | grep -E '@v[0-9]+\\.[0-9]+'"
82
+ - "When using SHA pinning for security, use a tool like StepSecurity's Harden-Runner or pin-github-action to maintain fresh SHAs."
83
+ docs:
84
+ - url: "https://github.blog/changelog/2024-12-05-notice-of-upcoming-releases-and-breaking-changes-for-github-actions/#actions-cache-v1-v2-and-actions-toolkit-cache-package-closing-down"
85
+ label: "GitHub Changelog — actions/cache v1/v2 deprecation notice"
86
+ - url: "https://github.com/orgs/community/discussions/151729"
87
+ label: "Community discussion #151729 — deprecated action version auto-failure"
88
+ - url: "https://github.com/actions/setup-python/issues/1037"
89
+ label: "actions/setup-python #1037 — reports of deprecated cache version failures"
@@ -0,0 +1,85 @@
1
+ id: runner-environment-048
2
+ title: "GitHub-hosted runner disk space exhausted (No space left on device)"
3
+ category: runner-environment
4
+ severity: error
5
+ tags:
6
+ - disk-space
7
+ - ubuntu
8
+ - docker
9
+ - storage
10
+ - enospc
11
+ patterns:
12
+ - regex: "No space left on device"
13
+ flags: "i"
14
+ - regex: "ENOSPC: no space left on device"
15
+ flags: "i"
16
+ - regex: "Disk usage: 100%"
17
+ flags: "i"
18
+ - regex: "write .*: no space left on device"
19
+ flags: "i"
20
+ error_messages:
21
+ - "No space left on device"
22
+ - "Error: ENOSPC: no space left on device, write"
23
+ - "OSError: [Errno 28] No space left on device"
24
+ root_cause: |
25
+ GitHub-hosted ubuntu-latest runners start with approximately 14-25 GB of free
26
+ disk space after the OS and pre-installed toolchains occupy the rest of the
27
+ ~80 GB disk. Workflows that build large Docker images, run multi-stage builds,
28
+ download large artifacts, or install additional software can exhaust this
29
+ budget mid-job.
30
+
31
+ Common culprits:
32
+ - Docker build layers accumulating in /var/lib/docker (no automatic pruning)
33
+ - Android SDK, .NET SDKs, Haskell GHC, and other large pre-installed tools
34
+ consuming 50+ GB of disk that most workflows never need
35
+ - Multiple matrix jobs each pulling large container images on the same runner
36
+ (each job gets a fresh runner, but a single job's steps share one disk)
37
+ fix: |
38
+ Add a disk-space cleanup step at the start of your job before any build steps.
39
+ The jlumbroso/free-disk-space action removes pre-installed tools you don't
40
+ need, recovering 30-60 GB.
41
+
42
+ Alternatively, use docker system prune to clean up intermediate layers after
43
+ each build stage, or split large jobs across multiple workflows.
44
+ fix_code:
45
+ - language: yaml
46
+ label: "Use free-disk-space action at job start"
47
+ code: |
48
+ jobs:
49
+ build:
50
+ runs-on: ubuntu-latest
51
+ steps:
52
+ - name: Free disk space
53
+ uses: jlumbroso/free-disk-space@v1.3.1
54
+ with:
55
+ tool-cache: false
56
+ android: true
57
+ dotnet: true
58
+ haskell: true
59
+ large-packages: true
60
+ swap-storage: true
61
+ - uses: actions/checkout@v4
62
+ - name: Build Docker image
63
+ run: docker build -t myapp .
64
+ - language: yaml
65
+ label: "Prune Docker intermediate layers between build stages"
66
+ code: |
67
+ - name: Build builder stage
68
+ run: docker build --target builder -t myapp:builder .
69
+ - name: Prune intermediate layers
70
+ run: docker image prune -f
71
+ - name: Build final image
72
+ run: docker build -t myapp:final .
73
+ prevention:
74
+ - "Add jlumbroso/free-disk-space as the first step in any disk-intensive job"
75
+ - "Use multi-stage Docker builds and prune builder images after the final stage"
76
+ - "Run df -h early in the job to baseline free space and catch issues before they crash"
77
+ - "Consider GitHub larger runners (30-100 GB disk) for builds that legitimately need space"
78
+ - "Cache Docker layers with type=gha to avoid re-downloading the same base images"
79
+ docs:
80
+ - url: "https://github.com/jlumbroso/free-disk-space"
81
+ label: "jlumbroso/free-disk-space — reclaim disk on GitHub-hosted runners"
82
+ - url: "https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources"
83
+ label: "GitHub Docs — Hosted runner hardware resources and disk space"
84
+ - url: "https://github.com/actions/runner-images/issues/2840"
85
+ label: "runner-images#2840 — Disk space workarounds discussion"
@@ -0,0 +1,114 @@
1
+ id: runner-environment-040
2
+ title: "GITHUB_PATH Updates Are Not Available in the Same Step That Writes Them"
3
+ category: runner-environment
4
+ severity: silent-failure
5
+ tags:
6
+ - GITHUB_PATH
7
+ - GITHUB_ENV
8
+ - path
9
+ - environment-file
10
+ - command-not-found
11
+ - same-step
12
+ patterns:
13
+ - regex: "command not found"
14
+ flags: "i"
15
+ - regex: "not recognized as.*cmdlet|not recognized as.*function"
16
+ flags: "i"
17
+ - regex: "GITHUB_PATH.*same step|same step.*GITHUB_PATH"
18
+ flags: "i"
19
+ error_messages:
20
+ - "/bin/bash: line X: my-tool: command not found"
21
+ - "The term 'my-tool' is not recognized as the name of a cmdlet, function, script file, or executable program"
22
+ root_cause: |
23
+ When you write a directory path to `$GITHUB_PATH` (or an environment variable to
24
+ `$GITHUB_ENV`), the change is **NOT available in the same `run:` step** that writes
25
+ the file. It only takes effect for **subsequent steps** in the same job.
26
+
27
+ The runner reads the environment files between steps — not mid-step. The typical
28
+ developer mistake is:
29
+
30
+ ```yaml
31
+ - name: Install and use tool
32
+ run: |
33
+ echo "$HOME/.local/bin" >> $GITHUB_PATH # writes to GITHUB_PATH
34
+ my-tool --version # ❌ fails — PATH not updated yet
35
+ ```
36
+
37
+ The same applies to `$GITHUB_ENV` — variables written to the env file are not
38
+ accessible via `${{ env.VAR }}` or as shell variables in the same step.
39
+
40
+ Additionally, using `>` instead of `>>` to write to `$GITHUB_PATH` or `$GITHUB_ENV`
41
+ overwrites the entire file, wiping all previously set paths/variables and causing
42
+ unexpected "command not found" errors in later steps.
43
+
44
+ Sources: GitHub Community #80916, nektos/act issue #2637, GitHub Docs
45
+ fix: |
46
+ Split the install/configure step from the step that uses the tool. Write to
47
+ `$GITHUB_PATH` or `$GITHUB_ENV` in one step, then use the tool/variable in a
48
+ subsequent step.
49
+
50
+ For the current step only, modify `$PATH` directly in the shell environment
51
+ (not via `$GITHUB_PATH`) if you need immediate access.
52
+
53
+ Always use `>>` (append) when writing to `$GITHUB_PATH` or `$GITHUB_ENV` — never
54
+ `>` (overwrite).
55
+ fix_code:
56
+ - language: yaml
57
+ label: "Broken — tool used in same step as GITHUB_PATH write"
58
+ code: |
59
+ # ❌ BROKEN: my-tool not found because PATH not updated until next step
60
+ - name: Install and use tool
61
+ run: |
62
+ echo "$HOME/.local/bin" >> $GITHUB_PATH
63
+ my-tool --version # fails: command not found
64
+ - language: yaml
65
+ label: "Fixed — split into two steps"
66
+ code: |
67
+ # ✅ FIXED: separate steps so runner reads GITHUB_PATH between them
68
+ - name: Add tool to PATH
69
+ run: echo "$HOME/.local/bin" >> $GITHUB_PATH
70
+
71
+ - name: Use tool (PATH now includes ~/.local/bin)
72
+ run: my-tool --version
73
+ - language: yaml
74
+ label: "Fixed — same-step access via direct PATH export (no GITHUB_PATH)"
75
+ code: |
76
+ # ✅ ALTERNATIVE: Export PATH directly in the same step if splitting isn't possible
77
+ - name: Install and use tool in same step
78
+ run: |
79
+ export PATH="$HOME/.local/bin:$PATH" # takes effect immediately in this step
80
+ my-tool --version
81
+ # Also persist for later steps:
82
+ echo "$HOME/.local/bin" >> $GITHUB_PATH
83
+ - language: yaml
84
+ label: "Fixed — GITHUB_ENV: split the set and the use"
85
+ code: |
86
+ # ❌ BROKEN: Variable not available yet in same step
87
+ - run: |
88
+ echo "MY_VAR=hello" >> $GITHUB_ENV
89
+ echo "$MY_VAR" # empty — not yet loaded
90
+
91
+ # ✅ FIXED: Use in a later step
92
+ - run: echo "MY_VAR=hello" >> $GITHUB_ENV
93
+ - run: echo "$MY_VAR" # prints 'hello'
94
+ - language: yaml
95
+ label: "Warning — always append (>>) never overwrite (>)"
96
+ code: |
97
+ # ❌ BROKEN: Overwrites GITHUB_PATH, removing all previously set paths
98
+ echo "/new/path" > $GITHUB_PATH
99
+
100
+ # ✅ FIXED: Append to preserve existing entries
101
+ echo "/new/path" >> $GITHUB_PATH
102
+ prevention:
103
+ - "Never use the result of `$GITHUB_PATH` or `$GITHUB_ENV` writes in the same `run:` step — they take effect in the next step."
104
+ - "Always use `>>` (append) not `>` (overwrite) when writing to `$GITHUB_PATH` or `$GITHUB_ENV`."
105
+ - "If you need a tool available in the same step, export `PATH` directly in the shell command: `export PATH=\"/dir:$PATH\"` before calling the tool."
106
+ - "On Windows (PowerShell), use `Add-Content` or `Out-File -Append` — do not use `Set-Content` which overwrites the file."
107
+ - "Check the GitHub Actions docs section on 'environment files' to understand the step boundary at which env files are read."
108
+ docs:
109
+ - url: "https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#adding-a-system-path"
110
+ label: "GitHub Docs: Workflow commands — Adding a system path (GITHUB_PATH)"
111
+ - url: "https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#setting-an-environment-variable"
112
+ label: "GitHub Docs: Workflow commands — Setting an environment variable (GITHUB_ENV)"
113
+ - url: "https://github.com/orgs/community/discussions/80916"
114
+ label: "GitHub Community #80916 — GITHUB_PATH not available same step"
@@ -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,93 @@
1
+ id: runner-environment-050
2
+ title: "macOS 13 Runner Deprecated and Removed — Jobs Fail During Brownout Windows"
3
+ category: runner-environment
4
+ severity: error
5
+ tags:
6
+ - macos-13
7
+ - runner-deprecation
8
+ - brownout
9
+ - migration
10
+ - macos-14
11
+ - runner-images
12
+ patterns:
13
+ - regex: "The label 'macos-13' is not present on any runner"
14
+ flags: "i"
15
+ - regex: "No runner matching the specified labels was found.*macos-13"
16
+ flags: "i"
17
+ - regex: "macos-13.*deprecated|deprecated.*macos-13"
18
+ flags: "i"
19
+ - regex: "Request 'macos-13'.*could not be satisfied"
20
+ flags: "i"
21
+ error_messages:
22
+ - "The label 'macos-13' is not present on any runner"
23
+ - "No runner matching the specified labels was found: macos-13"
24
+ root_cause: |
25
+ GitHub deprecated and eventually removed the `macos-13` and `macos-13-xlarge` runner labels
26
+ in 2025 (announced in runner-images#13046). GitHub applied brownout windows before full removal:
27
+ during these windows the macOS 13 label is temporarily unavailable and any job requesting it
28
+ either hangs waiting for a runner or immediately fails with a "label not present" error.
29
+
30
+ After the final retirement date, the label is gone entirely. The retirement schedule followed
31
+ the same brownout → retirement pattern used for Ubuntu 20.04 and Windows 2019.
32
+
33
+ Common workflows affected:
34
+ - iOS/macOS app CI that pinned to `macos-13` for Xcode 15 compatibility
35
+ - Workflows that avoided `macos-14` (Apple Silicon) due to architecture differences
36
+ - Repos that never updated after initially picking `macos-13` at release time
37
+ fix: |
38
+ Migrate `runs-on: macos-13` to a supported macOS label. Recommended choices:
39
+
40
+ - `macos-latest` — automatically follows GitHub's current default (tracks major version bumps)
41
+ - `macos-15` — macOS 15 Sequoia, ARM64 (Apple Silicon), Xcode 16+
42
+ - `macos-14` — macOS 14 Sonoma, ARM64 (Apple Silicon), well-supported
43
+ - `macos-15-intel` or `macos-14-large` — for workflows requiring x86-64 architecture
44
+
45
+ Note: macOS 14+ runners are ARM64 by default. If your build toolchain requires x86-64, use
46
+ an explicitly-labeled Intel variant. Test Homebrew packages, build scripts, and any binary
47
+ tools on the new architecture before fully migrating.
48
+ fix_code:
49
+ - language: yaml
50
+ label: "Migrate from macos-13 to macos-15 (ARM64)"
51
+ code: |
52
+ jobs:
53
+ build:
54
+ # Before: runs-on: macos-13
55
+ runs-on: macos-15 # macOS 15 Sequoia, ARM64, Xcode 16+
56
+ steps:
57
+ - uses: actions/checkout@v4
58
+ - name: Build and test
59
+ run: xcodebuild test -scheme MyApp -destination 'platform=iOS Simulator,name=iPhone 16'
60
+ - language: yaml
61
+ label: "Use macos-latest for automatic version tracking"
62
+ code: |
63
+ jobs:
64
+ build:
65
+ runs-on: macos-latest # tracks GitHub's current recommended version
66
+ steps:
67
+ - uses: actions/checkout@v4
68
+ - name: Build
69
+ run: swift build
70
+ - language: yaml
71
+ label: "Matrix testing across macOS versions"
72
+ code: |
73
+ jobs:
74
+ test:
75
+ strategy:
76
+ matrix:
77
+ os: [macos-14, macos-15]
78
+ runs-on: ${{ matrix.os }}
79
+ steps:
80
+ - uses: actions/checkout@v4
81
+ - run: swift test
82
+ prevention:
83
+ - "Subscribe to runner-images announcements to learn about deprecation timelines before brownout windows start."
84
+ - "Use `macos-latest` when your workflow does not require a specific OS version — it automatically follows GitHub's supported default."
85
+ - "Test on the new image in a feature branch before the official retirement date to catch Xcode, SDK, or toolchain differences."
86
+ - "For x86-64-specific toolchains, check whether an Intel variant label is available before the migration deadline."
87
+ docs:
88
+ - url: "https://github.com/actions/runner-images/issues/13046"
89
+ label: "runner-images#13046 — macOS 13 deprecation and brownout schedule"
90
+ - url: "https://github.com/actions/runner-images/releases"
91
+ label: "runner-images releases — current supported macOS image versions"
92
+ - url: "https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners"
93
+ label: "GitHub Docs — supported GitHub-hosted runner labels"