@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,114 @@
1
+ id: permissions-auth-012
2
+ title: "Reusable Workflow Permissions Not Inherited from Caller — Must Be Granted Explicitly"
3
+ category: permissions-auth
4
+ severity: error
5
+ tags:
6
+ - reusable-workflow
7
+ - permissions
8
+ - github-token
9
+ - caller
10
+ - contents
11
+ patterns:
12
+ - regex: "is requesting '([^']+)', but is only allowed '([^']+)'"
13
+ flags: "i"
14
+ - regex: "The workflow.*is requesting.*but is only allowed"
15
+ flags: "i"
16
+ - regex: "Resource not accessible by integration"
17
+ flags: "i"
18
+ error_messages:
19
+ - "The workflow is not valid. .github/workflows/caller.yml: Error calling workflow 'org/repo/.github/workflows/reusable.yml@main'. The workflow 'org/repo/.github/workflows/reusable.yml@main' is requesting 'contents: read', but is only allowed 'contents: none'."
20
+ - "Resource not accessible by integration"
21
+ root_cause: |
22
+ When a workflow calls a reusable workflow using `jobs.<job>.uses`, the called workflow
23
+ runs with a GITHUB_TOKEN whose permissions are the INTERSECTION of:
24
+ 1. The permissions declared in the caller workflow (or job)
25
+ 2. The permissions the called reusable workflow needs
26
+
27
+ Reusable workflows do NOT automatically inherit the caller's permissions. If the caller
28
+ workflow declares a restrictive permissions block (or relies on repository-default
29
+ read-all), but the reusable workflow declares or needs broader permissions, the call
30
+ fails at validation time with:
31
+
32
+ "The workflow 'X' is requesting 'contents: read', but is only allowed 'contents: none'."
33
+
34
+ This also manifests at runtime as "Resource not accessible by integration" (HTTP 403)
35
+ when the reusable workflow's steps attempt API calls or git operations that require
36
+ permissions not granted by the caller.
37
+
38
+ Common scenarios:
39
+ - Caller explicitly sets `permissions: {}` (no permissions) for security hardening
40
+ - Caller sets only `id-token: write` for OIDC but reusable workflow needs `contents: read`
41
+ - Repository setting "Read and write permissions" is overridden to "Read repository
42
+ contents and packages permissions" at org level, reducing the default token scope
43
+ - Caller passes `secrets: inherit` but forgets to also pass `permissions:`
44
+
45
+ Source: GitHub Community Discussion #52665
46
+ fix: |
47
+ Explicitly grant the required permission scopes in the **caller** workflow, at either
48
+ the workflow level or the specific job level that uses the reusable workflow.
49
+
50
+ To discover which permissions a reusable workflow needs, check its `on.workflow_call`
51
+ declaration or read its steps to see which GitHub API/resource operations it performs.
52
+
53
+ Follow least privilege: grant only what the reusable workflow actually needs, not
54
+ blanket read-all.
55
+ fix_code:
56
+ - language: yaml
57
+ label: "Broken — caller grants no permissions, reusable workflow needs contents"
58
+ code: |
59
+ # ❌ BROKEN: caller sets permissions: {} — reusable workflow inherits none
60
+ name: Release
61
+ on: push
62
+
63
+ permissions: {} # Locks down all permissions — nothing passes through
64
+
65
+ jobs:
66
+ release:
67
+ uses: my-org/shared-workflows/.github/workflows/release.yml@main
68
+ # Error: release.yml requests 'contents: write' but caller allows 'contents: none'
69
+ - language: yaml
70
+ label: "Fixed — grant required scopes explicitly at the job level"
71
+ code: |
72
+ # ✅ FIXED: grant only what the reusable workflow needs
73
+ name: Release
74
+ on: push
75
+
76
+ permissions: {} # Lock down at workflow level for security
77
+
78
+ jobs:
79
+ release:
80
+ permissions:
81
+ contents: write # Required by the reusable workflow for creating releases
82
+ id-token: write # Required for OIDC if the reusable workflow uses it
83
+ uses: my-org/shared-workflows/.github/workflows/release.yml@main
84
+ - language: yaml
85
+ label: "Fixed — grant permissions at workflow level when multiple jobs use reusable workflows"
86
+ code: |
87
+ # ✅ FIXED: grant at workflow level when multiple jobs need the same scopes
88
+ name: CI
89
+ on: [push, pull_request]
90
+
91
+ permissions:
92
+ contents: read # Needed for checkout in reusable workflows
93
+ packages: write # Needed for reusable workflow that publishes packages
94
+ pull-requests: write # Needed for reusable workflow that adds PR comments
95
+
96
+ jobs:
97
+ build:
98
+ uses: my-org/shared-workflows/.github/workflows/build.yml@main
99
+ publish:
100
+ needs: build
101
+ uses: my-org/shared-workflows/.github/workflows/publish.yml@main
102
+ prevention:
103
+ - "Always read the reusable workflow's steps to know which permissions it needs before calling it."
104
+ - "Test reusable workflow calls from a caller with explicit `permissions: {}` first — failures reveal required scopes."
105
+ - "Document required permissions in the reusable workflow's `on.workflow_call` block as comments."
106
+ - "When adding `permissions:` to a caller, remember that declaring ANY permission sets all others to `none` — enumerate every scope you need."
107
+ - "Use job-level `permissions:` rather than workflow-level to apply least-privilege per job."
108
+ docs:
109
+ - url: "https://docs.github.com/en/actions/sharing-automations/reusing-workflows"
110
+ label: "Reusing workflows — permissions and access"
111
+ - url: "https://github.com/orgs/community/discussions/52665"
112
+ label: "GitHub Community #52665 — reusable workflow permissions"
113
+ - url: "https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/controlling-permissions-for-github_token"
114
+ label: "Controlling permissions for GITHUB_TOKEN"
@@ -0,0 +1,108 @@
1
+ id: runner-environment-034
2
+ title: "Azure PowerShell Az Module Upgraded from 14.x to 15.x on All Runner Images"
3
+ category: runner-environment
4
+ severity: error
5
+ tags:
6
+ - azure
7
+ - powershell
8
+ - az-module
9
+ - breaking-change
10
+ - runner-image
11
+ - migration
12
+ patterns:
13
+ - regex: "Az\\.(?:Accounts|Compute|Storage|Network|Resources|KeyVault|Sql|Monitor).*not recognized|The term '.*-Az.*' is not recognized"
14
+ flags: "i"
15
+ - regex: "Install-Module.*Az.*RequiredVersion.*14"
16
+ flags: "i"
17
+ - regex: "Get-AzVM|Set-AzVMExtension|New-AzResourceGroup.*parameter.*was not found|does not exist in the cmdlet"
18
+ flags: "i"
19
+ - regex: "CommandNotFoundException.*Az\\.|ParameterBindingException.*Az\\."
20
+ flags: "i"
21
+ error_messages:
22
+ - "The term 'Get-AzXxx' is not recognized as a name of a cmdlet"
23
+ - "A parameter cannot be found that matches parameter name"
24
+ - "Cannot process argument transformation on parameter"
25
+ - "Object reference not set to an instance of an object"
26
+ root_cause: |
27
+ The Azure PowerShell (Az) module was upgraded from version 14.6.0 to 15.6.1 on all
28
+ GitHub-hosted runner images beginning June 8, 2026 (completing June 15, 2026).
29
+ This is a major version bump (14 → 15) and includes breaking changes:
30
+
31
+ - **Removed cmdlets**: Several deprecated cmdlets from Az 14.x were dropped with no
32
+ backward-compatible alias.
33
+ - **Parameter changes**: Some cmdlets have altered parameter names, types, or
34
+ removed optional parameters that were previously accepted.
35
+ - **Output type changes**: Return objects from certain cmdlets have changed shape,
36
+ breaking pipeline expressions like `(Get-AzXxx).Property`.
37
+ - **ARM64 images affected disproportionately**: windows-11-arm64 and
38
+ windows-11-vs2026-arm64 jumped from Az 12.5.0 directly to 15.6.1 — a 3-major-version
39
+ leap with significantly more accumulated breaking changes.
40
+
41
+ Unlike other software installed on runner images, the Az PowerShell module does NOT
42
+ have an LTS version — only the latest release receives security fixes and support.
43
+ Microsoft discontinued support for Az 14.x as of the 15.x release cycle.
44
+
45
+ The runner images affected and their before/after versions:
46
+ - ubuntu-22.04, ubuntu-24.04, macos-14/15/26, windows-2022/2025/2025-vs2026: 14.6.0 → 15.6.1
47
+ - windows-11-arm64, windows-11-vs2026-arm64: 12.5.0 → 15.6.1
48
+
49
+ Source: actions/runner-images#14104
50
+ fix: |
51
+ **Option 1 — Pin to Az 14.6.0** (temporary fix while migrating):
52
+ Add an explicit Install-Module step at the start of any job using Az cmdlets.
53
+
54
+ **Option 2 — Migrate to Az 15.x** (recommended long-term):
55
+ Review the Az 15.x migration guide and update scripts to use the new cmdlet names,
56
+ parameters, and output types. Run `Get-AzVersion` to confirm the version in use.
57
+
58
+ **Diagnosis**: Use `Get-Module -Name Az.* -ListAvailable | Select Name, Version` to
59
+ confirm which Az module version is installed on the current runner.
60
+ fix_code:
61
+ - language: yaml
62
+ label: "Pin Az module to 14.6.0 for immediate rollback"
63
+ code: |
64
+ jobs:
65
+ deploy:
66
+ runs-on: ubuntu-latest
67
+ steps:
68
+ - name: Pin Azure PowerShell to 14.6.0
69
+ shell: pwsh
70
+ run: |
71
+ Install-Module -Name Az -RequiredVersion 14.6.0 -Force -AllowClobber -Scope CurrentUser
72
+ Import-Module Az -RequiredVersion 14.6.0
73
+
74
+ - name: Azure login
75
+ uses: azure/login@v2
76
+ with:
77
+ client-id: ${{ secrets.AZURE_CLIENT_ID }}
78
+ tenant-id: ${{ secrets.AZURE_TENANT_ID }}
79
+ subscription-id: ${{ secrets.AZURE_SUBSCRIPTION_ID }}
80
+
81
+ - name: Run Azure operations
82
+ shell: pwsh
83
+ run: |
84
+ # Your existing Az 14.x scripts
85
+ Get-AzVM -ResourceGroupName $env:RG_NAME
86
+ - language: yaml
87
+ label: "Verify installed Az version (diagnosis step)"
88
+ code: |
89
+ - name: Check Az module version
90
+ shell: pwsh
91
+ run: |
92
+ Get-Module -Name Az.Accounts -ListAvailable | Select-Object Name, Version
93
+ Get-AzVersion
94
+ prevention:
95
+ - "Subscribe to actions/runner-images announcements to get advance warning of Az module version changes."
96
+ - "Pin the Az module version explicitly in all CI workflows using `Install-Module -RequiredVersion` rather than relying on the runner image default."
97
+ - "Test Az-based workflows against the new version by temporarily installing Az 15.x before the runner image rollout date."
98
+ - "Review the Az 15.x migration guide (https://learn.microsoft.com/en-us/powershell/azure/migrate-az-15.0.0) when upgrading."
99
+ - "Use `Get-AzVersion` at the start of troublesome workflows to emit the exact Az version to logs."
100
+ docs:
101
+ - url: "https://github.com/actions/runner-images/issues/14104"
102
+ label: "runner-images#14104 — Az module update announcement (14.6.0 → 15.6.1)"
103
+ - url: "https://learn.microsoft.com/en-us/powershell/azure/migrate-az-15.0.0"
104
+ label: "Az 15.x migration guide"
105
+ - url: "https://learn.microsoft.com/en-us/powershell/azure/azureps-support-lifecycle"
106
+ label: "Az PowerShell support lifecycle"
107
+ - url: "https://learn.microsoft.com/en-us/powershell/azure/release-notes-azureps"
108
+ label: "Az PowerShell release notes"
@@ -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"