@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,108 @@
1
+ id: runner-environment-039
2
+ title: "setup-java Fails with 'Distribution Input Value Is Required' After v1 to v2 Migration"
3
+ category: runner-environment
4
+ severity: error
5
+ tags:
6
+ - setup-java
7
+ - java
8
+ - distribution
9
+ - breaking-change
10
+ - temurin
11
+ - adoptopenjdk
12
+ - v2-migration
13
+ patterns:
14
+ - regex: "Distribution input value is required"
15
+ flags: "i"
16
+ - regex: "'distribution' must be one of:.*temurin|adopt|zulu|liberica|corretto|microsoft|semeru"
17
+ flags: "i"
18
+ - regex: "actions/setup-java.*distribution.*required"
19
+ flags: "i"
20
+ - regex: "Input required and not supplied: distribution"
21
+ flags: "i"
22
+ error_messages:
23
+ - "Error: Distribution input value is required. 'distribution' must be one of: temurin, adopt, zulu, liberica, corretto, microsoft, semeru, dragonwell, sapmachine, graalvm"
24
+ - "Error: Input required and not supplied: distribution"
25
+ root_cause: |
26
+ In `actions/setup-java` v2 (released 2021), the `distribution` input became mandatory.
27
+ In v1, AdoptOpenJDK was the implicit default distribution and no `distribution` key was
28
+ needed. When workflows that were written for v1 are updated to use @v2, @v3, or @v4 without
29
+ adding a `distribution:` input, the action fails immediately.
30
+
31
+ This also occurs when:
32
+ - An organization adopts setup-java for the first time using documentation examples from an
33
+ older blog post or tutorial that predates v2
34
+ - A Dependabot PR bumps setup-java from @v1 to @v3 or @v4 without updating the inputs
35
+ - Internal action templates or reusable workflows reference setup-java without distribution
36
+
37
+ Available distributions (as of 2024-2026):
38
+ - `temurin` — Eclipse Temurin (recommended, successor to AdoptOpenJDK)
39
+ - `zulu` — Azul Zulu OpenJDK
40
+ - `corretto` — Amazon Corretto
41
+ - `microsoft` — Microsoft Build of OpenJDK
42
+ - `liberica` — BellSoft Liberica JDK
43
+ - `semeru` — IBM Semeru Runtime
44
+ - `dragonwell` — Alibaba Dragonwell
45
+ - `sapmachine` — SAP Machine
46
+ - `graalvm` — GraalVM Community Edition
47
+ - `adopt` — Legacy AdoptOpenJDK alias (still supported but deprecated; use temurin instead)
48
+
49
+ Note: `adopt` (AdoptOpenJDK) was renamed/rebranded to Adoptium / Eclipse Temurin.
50
+ Using `distribution: adopt` still works but `distribution: temurin` is the modern equivalent.
51
+ fix: |
52
+ Add the `distribution:` input to all `actions/setup-java` steps. Use `temurin` as the
53
+ recommended default (it is the open-source successor to AdoptOpenJDK hosted by Adoptium).
54
+
55
+ If you need to match your production environment's exact JDK distribution, choose the
56
+ corresponding option from the available distributions list.
57
+ fix_code:
58
+ - language: yaml
59
+ label: "Add required distribution input to setup-java"
60
+ code: |
61
+ jobs:
62
+ build:
63
+ runs-on: ubuntu-latest
64
+ steps:
65
+ - uses: actions/checkout@v4
66
+
67
+ # ❌ v1-style — fails on v2+
68
+ # - uses: actions/setup-java@v4
69
+ # with:
70
+ # java-version: '17'
71
+
72
+ # ✅ v2+ style — distribution is required
73
+ - uses: actions/setup-java@v4
74
+ with:
75
+ distribution: 'temurin' # Eclipse Temurin (recommended)
76
+ java-version: '21'
77
+ cache: 'maven' # optional: enables Maven dependency caching
78
+
79
+ - name: Build with Maven
80
+ run: mvn --batch-mode --update-snapshots package
81
+ - language: yaml
82
+ label: "Using Corretto (Amazon) or Zulu distributions"
83
+ code: |
84
+ # Amazon Corretto
85
+ - uses: actions/setup-java@v4
86
+ with:
87
+ distribution: 'corretto'
88
+ java-version: '21'
89
+
90
+ # Azul Zulu
91
+ - uses: actions/setup-java@v4
92
+ with:
93
+ distribution: 'zulu'
94
+ java-version: '17'
95
+ prevention:
96
+ - "Always specify `distribution:` when using actions/setup-java v2 or later — there is no default."
97
+ - "Use `temurin` as the default distribution for open-source projects (it is the community-maintained successor to AdoptOpenJDK)."
98
+ - "When Dependabot bumps setup-java, check that the resulting PR also adds or preserves the `distribution:` input."
99
+ - "Review your org's reusable workflow templates and action wrappers for setup-java v1-style usage that lacks distribution."
100
+ docs:
101
+ - url: "https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md"
102
+ label: "actions/setup-java — advanced usage and distribution options"
103
+ - url: "https://github.com/actions/setup-java/releases/tag/v2.0.0"
104
+ label: "actions/setup-java v2.0.0 release notes (distribution became required)"
105
+ - url: "https://adoptium.net/"
106
+ label: "Eclipse Temurin (Adoptium) — recommended open-source JDK distribution"
107
+ - url: "https://stackoverflow.com/questions/69595609/github-actions-actions-setup-java-distribution-input-required"
108
+ label: "Stack Overflow — setup-java distribution input required error"
@@ -0,0 +1,107 @@
1
+ id: runner-environment-049
2
+ title: "ubuntu-20.04 runner retired — jobs fail during brownouts or after full removal"
3
+ category: runner-environment
4
+ severity: error
5
+ tags:
6
+ - ubuntu
7
+ - ubuntu-20-04
8
+ - runner-retirement
9
+ - image-removal
10
+ - brownout
11
+ - eol
12
+ patterns:
13
+ - regex: "scheduled Ubuntu 20\\.04 retirement|Ubuntu 20\\.04.*retirement"
14
+ flags: "i"
15
+ - regex: "ubuntu-20\\.04.*removed|ubuntu-20\\.04.*unavailable"
16
+ flags: "i"
17
+ - regex: "ubuntu-20\\.04.*runner will be removed"
18
+ flags: "i"
19
+ - regex: "No hosted runner.*ubuntu-20|ubuntu-20\\.04.*no.*runner"
20
+ flags: "i"
21
+ error_messages:
22
+ - "This is a scheduled Ubuntu 20.04 retirement. Ubuntu 20.04 LTS runner will be removed on 2025-04-15. For more details, see https://github.com/actions/runner-images/issues/11101"
23
+ - "ubuntu-20.04 is no longer available. Please use ubuntu-22.04 or ubuntu-24.04 instead."
24
+ - "No hosted runner was found that matches the requested labels: ubuntu-20.04"
25
+ root_cause: |
26
+ Ubuntu 20.04 LTS (Focal Fossa) reached end of standard support on April 2,
27
+ 2025. GitHub followed by retiring the ubuntu-20.04 GitHub-hosted runner
28
+ image on April 15, 2025, after a series of intentional brownout windows
29
+ that began in March 2025 (March 4, 11, 18, 25 and April 1, 8).
30
+
31
+ During each brownout window (13:00–21:00 UTC), any job using runs-on:
32
+ ubuntu-20.04 was deliberately failed with an explicit retirement message.
33
+ After April 15, 2025, the image was permanently removed and no longer
34
+ available as a runner label on GitHub.com.
35
+
36
+ Workflows that hardcode ubuntu-20.04 in their runs-on: field now fail
37
+ immediately with "No hosted runner was found that matches the requested
38
+ labels: ubuntu-20.04". This also affects:
39
+ - Actions pinned inside third-party repos that ship their own workflow
40
+ files using ubuntu-20.04
41
+ - Reusable workflow templates or starter workflows referencing ubuntu-20.04
42
+ - Matrix strategies that include ubuntu-20.04 as one of several OS targets
43
+ - Composite actions or action.yml files in public actions that list
44
+ ubuntu-20.04 as a required environment
45
+
46
+ Self-hosted runners with the ubuntu-20.04 label are NOT affected — they
47
+ only match the name locally and keep running as long as the self-hosted
48
+ runner agent is online.
49
+ fix: |
50
+ Replace ubuntu-20.04 with ubuntu-22.04 or ubuntu-24.04 (ubuntu-latest).
51
+
52
+ For most workflows, ubuntu-22.04 is the most compatible drop-in replacement:
53
+ it shares glibc 2.35 which supports binaries built on Ubuntu 20. However,
54
+ several packages and tools differ between 20.04 and 22.04:
55
+ - Python 3.8 and 3.9 are no longer pre-installed on ubuntu-22.04+
56
+ - libssl1.1 is absent; libssl3 is the current version
57
+ - Some apt package versions differ
58
+
59
+ For ubuntu-24.04:
60
+ - Python 3.11 is the default (3.8/3.9/3.10 absent)
61
+ - libssl3 only
62
+ - Node 18 removed from toolcache
63
+
64
+ Run your workflow with ubuntu-22.04 first. Address any package-version
65
+ failures before migrating to ubuntu-24.04.
66
+ fix_code:
67
+ - language: yaml
68
+ label: "Upgrade hardcoded ubuntu-20.04 references to ubuntu-22.04"
69
+ code: |
70
+ jobs:
71
+ build:
72
+ # Replace deprecated image with supported LTS
73
+ runs-on: ubuntu-22.04 # was: ubuntu-20.04
74
+ steps:
75
+ - uses: actions/checkout@v4
76
+ - name: Install dependencies
77
+ run: sudo apt-get install -y libssl-dev # libssl3 on 22.04, libssl1.1 on 20.04
78
+ - run: make build
79
+ - language: yaml
80
+ label: "Migrate matrix strategy that included ubuntu-20.04"
81
+ code: |
82
+ jobs:
83
+ test:
84
+ strategy:
85
+ matrix:
86
+ os:
87
+ - ubuntu-22.04 # was ubuntu-20.04
88
+ - ubuntu-24.04 # was ubuntu-latest (if you want explicit LTS pin)
89
+ - windows-latest
90
+ - macos-latest
91
+ runs-on: ${{ matrix.os }}
92
+ steps:
93
+ - uses: actions/checkout@v4
94
+ - run: make test
95
+ prevention:
96
+ - "Use ubuntu-latest instead of pinning specific Ubuntu versions to avoid hard failures on retirement"
97
+ - "If you need a specific Ubuntu LTS, pin to ubuntu-22.04 or ubuntu-24.04 — never a version past its support window"
98
+ - "Subscribe to runner-images retirement notifications on GitHub (watch actions/runner-images for Issues)"
99
+ - "Add a monthly workflow audit job that fails if any runs-on: references a known-retired image label"
100
+ - "Check third-party action.yml files in your dependency tree for hardcoded ubuntu-20.04 references"
101
+ docs:
102
+ - url: "https://github.com/actions/runner-images/issues/11101"
103
+ label: "runner-images#11101 — Ubuntu 20.04 retirement announcement and timeline"
104
+ - url: "https://github.blog/changelog/2025-02-12-notice-of-upcoming-deprecations-and-breaking-changes-for-github-actions/"
105
+ label: "GitHub Changelog — Ubuntu 20.04 brownout schedule (Feb 2025)"
106
+ - url: "https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources"
107
+ label: "GitHub Docs — Supported GitHub-hosted runner images"
@@ -0,0 +1,104 @@
1
+ id: runner-environment-043
2
+ title: "windows-latest Windows Server 2025 Runner Removed D: Drive — Paths Fail"
3
+ category: runner-environment
4
+ severity: error
5
+ tags:
6
+ - windows
7
+ - runner-image
8
+ - d-drive
9
+ - path
10
+ - windows-server-2025
11
+ - breaking-change
12
+ patterns:
13
+ - regex: "The system cannot find the path specified.*D:\\\\"
14
+ flags: "i"
15
+ - regex: "D:\\\\.*No such file or directory"
16
+ flags: "i"
17
+ - regex: "Path.*D:\\\\.*does not exist"
18
+ flags: "i"
19
+ - regex: "cannot find.*'D:\\\\|D:\\\\.*not found"
20
+ flags: "i"
21
+ error_messages:
22
+ - "The system cannot find the path specified: 'D:\\a\\'"
23
+ - "D:\\a\\ : No such file or directory"
24
+ - "Cannot find path 'D:\\build' because it does not exist."
25
+ - "Error: ENOENT: no such file or directory, open 'D:\\tools\\...'"
26
+ root_cause: |
27
+ The Windows Server 2025 runner image, which became the target of `windows-latest`
28
+ and `windows-2025` starting mid-2026, **removed the D: drive** that was present
29
+ on earlier Windows runner images (Windows Server 2019 and 2022).
30
+
31
+ On Windows Server 2019/2022 runners, the D: drive was a separate disk used for
32
+ temporary build storage and tools. Some workflows hardcoded paths like
33
+ `D:\a\`, `D:\tools\`, `D:\hostedtoolcache\`, or `D:\temp\` instead of using
34
+ environment variables like `${{ runner.tool_cache }}`, `$RUNNER_TOOL_CACHE`,
35
+ or workspace-relative paths.
36
+
37
+ On Windows Server 2025 runners, only the C: drive is available. Any workflow
38
+ step that writes to or reads from an absolute `D:\` path will immediately fail
39
+ with a path-not-found error, often as a confusing "system cannot find path" error
40
+ rather than a clear "D: drive missing" message.
41
+
42
+ Root issue thread: actions/runner-images#12416 (D: drive removal discussion)
43
+ and runner-images#12677 (windows-latest → Windows Server 2025 migration).
44
+ fix: |
45
+ Replace all hardcoded `D:\` paths with environment variable references or
46
+ workspace-relative paths:
47
+
48
+ | Old (hardcoded D:) | New (portable) |
49
+ |--------------------|----------------------------------------|
50
+ | `D:\hostedtoolcache` | `${{ runner.tool_cache }}` |
51
+ | `D:\a\${{ github.repository }}` | `${{ github.workspace }}` |
52
+ | `D:\temp\` | `${{ runner.temp }}` |
53
+ | `D:\tools\` | Explicit installation to `C:\tools\` |
54
+
55
+ For existing scripts that reference `D:\` directly, either:
56
+ 1. Update all references to use RUNNER_TEMP, RUNNER_TOOL_CACHE, or GITHUB_WORKSPACE
57
+ 2. Temporarily pin `runs-on: windows-2022` while you migrate
58
+ fix_code:
59
+ - language: yaml
60
+ label: "Replace D:\\ paths with portable runner environment variables"
61
+ code: |
62
+ jobs:
63
+ build:
64
+ runs-on: windows-latest # Works on Server 2025 (no D: drive)
65
+ steps:
66
+ - uses: actions/checkout@v4
67
+
68
+ # ❌ Broken: hardcoded D: path
69
+ # - run: Copy-Item -Path "D:\hostedtoolcache\node\20.0.0\x64\bin\node.exe" -Destination "${{ github.workspace }}"
70
+
71
+ # ✅ Fixed: use runner context variables
72
+ - name: Use portable paths
73
+ run: |
74
+ echo "Workspace: ${{ github.workspace }}"
75
+ echo "Tool cache: ${{ runner.tool_cache }}"
76
+ echo "Temp dir: ${{ runner.temp }}"
77
+ # C: drive is always available on all Windows runner images
78
+ $toolsDir = "C:\tools"
79
+ New-Item -ItemType Directory -Force -Path $toolsDir
80
+ - language: yaml
81
+ label: "Temporary rollback — pin to windows-2022 while migrating"
82
+ code: |
83
+ jobs:
84
+ build:
85
+ # Pin to windows-2022 (D: drive still present) while fixing hardcoded paths
86
+ runs-on: windows-2022
87
+ steps:
88
+ - uses: actions/checkout@v4
89
+ - run: msbuild MyProject.sln
90
+ prevention:
91
+ - "Never hardcode `D:\\` paths in workflows or scripts — always use `${{ runner.tool_cache }}`, `${{ runner.temp }}`, `${{ github.workspace }}`, or `C:\\`-relative paths."
92
+ - "Audit workflows and called scripts for `D:\\` references before migrating to `windows-latest` (Windows Server 2025)."
93
+ - "Subscribe to actions/runner-images release announcements so runner image migrations do not catch you off-guard."
94
+ - "Use `windows-2022` as a temporary pin if immediate migration is not feasible; note that Server 2022 images have a defined EOL."
95
+ - "Test Windows workflows in a `windows-2025` matrix slot before the `windows-latest` migration window completes."
96
+ docs:
97
+ - url: "https://github.com/actions/runner-images/issues/12416"
98
+ label: "runner-images#12416 — D: drive removal discussion"
99
+ - url: "https://github.com/actions/runner-images/issues/12677"
100
+ label: "runner-images#12677 — windows-latest migration to Windows Server 2025"
101
+ - url: "https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables"
102
+ label: "GitHub Docs: Default environment variables (runner.tool_cache, runner.temp)"
103
+ - url: "https://docs.github.com/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories"
104
+ label: "About GitHub-hosted runners — Windows Server 2025 specs"
@@ -0,0 +1,145 @@
1
+ id: runner-environment-046
2
+ title: "CUDA nvcc Rejects Visual Studio 2026 Host Compiler on windows-latest"
3
+ category: runner-environment
4
+ severity: error
5
+ tags:
6
+ - windows
7
+ - windows-latest
8
+ - cuda
9
+ - nvcc
10
+ - visual-studio-2026
11
+ - vs2026
12
+ - runner-image
13
+ - breaking-change
14
+ - gpu
15
+ patterns:
16
+ - regex: "unsupported Microsoft Visual Studio version.*Only the versions between 2019 and 2022"
17
+ flags: "i"
18
+ - regex: "fatal error C1189.*unsupported Microsoft Visual Studio version"
19
+ flags: "i"
20
+ - regex: "nvcc.*error.*host_config\\.h.*C1189"
21
+ flags: "i"
22
+ - regex: "CUDA.*requires Visual Studio.*2022|nvcc.*does not support.*Visual Studio 18"
23
+ flags: "i"
24
+ - regex: "error:\\s+--\\s+unsupported Microsoft Visual Studio version"
25
+ flags: "i"
26
+ error_messages:
27
+ - "fatal error C1189: #error: -- unsupported Microsoft Visual Studio version! Only the versions between 2019 and 2022 (inclusive) are supported!"
28
+ - "Error in C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v13.1\\include\\crt/host_config.h(164)"
29
+ - "nvcc fatal : Host compiler targets unsupported OS."
30
+ - "nvcc error : Failed to preprocess the host compiler properties."
31
+ root_cause: |
32
+ GitHub Actions migrated `windows-latest` (and `windows-2025`) from Visual Studio 2022 to
33
+ Visual Studio 2026 (version 18.x) beginning June 8, 2026, completing by June 15, 2026.
34
+ Additionally, some users saw the switch as early as May 5, 2026 when `windows-2025`
35
+ started serving the `windows-2025-vs2026` image label prematurely (runner-images#14004).
36
+
37
+ CUDA toolkits up to and including CUDA 13.x hard-code supported Visual Studio version
38
+ ranges inside `<CUDA_ROOT>/include/crt/host_config.h`. The file checks the `_MSC_VER`
39
+ compiler macro and rejects any version outside the explicitly listed range. Visual Studio
40
+ 2022 (MSVC 19.3x) is the last version supported by all CUDA releases through CUDA 13.x.
41
+ Visual Studio 2026 (MSVC 19.4x / VS version 18.x) falls outside these ranges and triggers
42
+ an immediate hard compiler error:
43
+
44
+ fatal error C1189: #error: -- unsupported Microsoft Visual Studio version! Only the
45
+ versions between 2019 and 2022 (inclusive) are supported! The nvcc flag
46
+ '-allow-unsupported-compiler' can be used to override this version check; however,
47
+ using an unsupported host compiler may cause compilation failure or incorrect run time
48
+ execution. Use at your own risk.
49
+
50
+ The error fires at the preprocessing stage — before any CUDA code is compiled — so it
51
+ affects any project that invokes `nvcc`, regardless of the CUDA source code content.
52
+
53
+ Source: actions/runner-images#14017, runner-images#14004, NVIDIA CUDA Installation Guide
54
+ fix: |
55
+ **Option 1 — Use `-allow-unsupported-compiler` flag** (quick unblock, use at own risk):
56
+ Adds a flag to nvcc that bypasses the version check. Works for many projects but NVIDIA
57
+ does not guarantee correctness with unsupported compilers.
58
+
59
+ **Option 2 — Pin to windows-2022** (safest immediate fix):
60
+ `windows-2022` still ships Visual Studio 2022. It is not yet deprecated.
61
+
62
+ **Option 3 — Upgrade to a CUDA version that supports VS 2026** (best long-term):
63
+ NVIDIA releases new CUDA toolkits that list VS 2026 in their supported compiler matrix.
64
+ Check the CUDA Toolkit Release Notes for the current supported VS version table.
65
+
66
+ **Option 4 — Use CMake's `CUDAARCHS` + VS2022 generator explicitly**:
67
+ If using CMake, pin the generator to `Visual Studio 17 2022` even on windows-latest by
68
+ specifying `-G "Visual Studio 17 2022"` in your cmake configure step. This forces CMake
69
+ to use the VS 2022 tools even if VS 2026 is the default.
70
+ fix_code:
71
+ - language: yaml
72
+ label: "Pin to windows-2022 to avoid VS 2026 entirely"
73
+ code: |
74
+ jobs:
75
+ build-cuda:
76
+ runs-on: windows-2022 # VS 2022 — supported by CUDA up to 13.x
77
+ steps:
78
+ - uses: actions/checkout@v4
79
+
80
+ - name: Build with CUDA
81
+ run: cmake --build . --config Release
82
+ - language: yaml
83
+ label: "Pass -allow-unsupported-compiler to nvcc (quick unblock)"
84
+ code: |
85
+ jobs:
86
+ build-cuda:
87
+ runs-on: windows-latest
88
+ steps:
89
+ - uses: actions/checkout@v4
90
+
91
+ # Pass flag via CMake CUDA_NVCC_FLAGS
92
+ - name: Configure CMake
93
+ run: |
94
+ cmake -B build -DCMAKE_CUDA_FLAGS="-allow-unsupported-compiler"
95
+
96
+ - name: Build
97
+ run: cmake --build build --config Release
98
+ - language: yaml
99
+ label: "Force VS 2022 CMake generator on windows-latest (VS 2026 image)"
100
+ code: |
101
+ jobs:
102
+ build-cuda:
103
+ runs-on: windows-latest
104
+ steps:
105
+ - uses: actions/checkout@v4
106
+
107
+ # Explicitly select VS 2022 generator even when VS 2026 is default
108
+ - name: Configure with VS 2022 generator
109
+ run: |
110
+ cmake -B build `
111
+ -G "Visual Studio 17 2022" `
112
+ -A x64
113
+
114
+ - name: Build
115
+ run: cmake --build build --config Release
116
+ - language: yaml
117
+ label: "Upgrade CUDA toolkit version that supports VS 2026"
118
+ code: |
119
+ jobs:
120
+ build-cuda:
121
+ runs-on: windows-latest
122
+ steps:
123
+ - uses: actions/checkout@v4
124
+
125
+ # Install a CUDA version that explicitly supports VS 2026
126
+ # (check NVIDIA release notes for the current minimum supported version)
127
+ - name: Install CUDA Toolkit
128
+ uses: Jimver/cuda-toolkit@v0.2.21
129
+ with:
130
+ cuda: '12.8.0' # Check if this version lists VS 2026 in its support matrix
131
+
132
+ - name: Build
133
+ run: cmake --build build --config Release
134
+ prevention:
135
+ - "Never assume CUDA is forward-compatible with new Visual Studio versions — CUDA hard-codes supported MSVC version ranges."
136
+ - "Pin `runs-on: windows-2022` for CUDA workflows until the CUDA version you use explicitly lists VS 2026 as supported."
137
+ - "Subscribe to runner-images#14017 and similar announcements before the windows-latest label migration date."
138
+ - "Check the CUDA Toolkit Release Notes for your version's supported host compiler table before upgrading either Visual Studio or CUDA."
139
+ docs:
140
+ - url: "https://github.com/actions/runner-images/issues/14017"
141
+ label: "runner-images#14017: windows-latest will use VS 2026 image in June 2026"
142
+ - url: "https://github.com/actions/runner-images/issues/14004"
143
+ label: "runner-images#14004: windows-2025 serving VS 2026 image prematurely (May 2026)"
144
+ - url: "https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/"
145
+ label: "NVIDIA CUDA Installation Guide — supported Visual Studio versions"
@@ -0,0 +1,110 @@
1
+ id: silent-failures-018
2
+ title: "github.event.commits and github.event.head_commit Are Null/Empty on Non-Push Triggers"
3
+ category: silent-failures
4
+ severity: silent-failure
5
+ tags:
6
+ - github-context
7
+ - workflow-dispatch
8
+ - schedule
9
+ - commits
10
+ - null-access
11
+ - push-event
12
+ - expression
13
+ patterns:
14
+ - regex: "github\\.event\\.commits\\[0\\]"
15
+ flags: "i"
16
+ - regex: "github\\.event\\.head_commit\\.(message|id|author)"
17
+ flags: "i"
18
+ - regex: "github\\.event\\.commits is not iterable|Cannot read.*commits"
19
+ flags: "i"
20
+ error_messages:
21
+ - "Error: Cannot read properties of undefined (reading 'message')"
22
+ - "Error: github.event.commits[0] is undefined"
23
+ root_cause: |
24
+ The `github.event.commits` array and `github.event.head_commit` object are ONLY populated
25
+ for `push` webhook events. They are absent (null / empty array) for all other trigger types:
26
+
27
+ - `workflow_dispatch` — manual UI or API trigger, no commit context
28
+ - `schedule` — cron-triggered run, no specific push associated
29
+ - `pull_request` / `pull_request_target` — uses github.event.pull_request instead
30
+ - `workflow_call` — reusable workflow invocation, no commit array
31
+ - `repository_dispatch` — uses github.event.client_payload, no commits key
32
+ - `release` — uses github.event.release, no commits array
33
+
34
+ When a workflow is triggered on both `push` and `workflow_dispatch` (a common pattern),
35
+ expressions like:
36
+ ${{ github.event.commits[0].message }}
37
+ ${{ github.event.head_commit.id }}
38
+
39
+ silently evaluate to empty string ('') on non-push triggers rather than raising an error.
40
+ GitHub Actions treats missing context properties as empty string, so the step runs but
41
+ with blank or wrong data — the workflow shows green while producing incorrect output.
42
+
43
+ This is a silent failure because there is no error in the logs when the empty string is
44
+ used in a step (e.g., an echo, a tag, a release title). The problem only becomes visible
45
+ when the downstream artifact or message is inspected.
46
+ fix: |
47
+ Use git directly to extract commit information — it works reliably across all trigger types
48
+ (as long as fetch-depth is not 1 / uses default full clone or depth >= 2):
49
+
50
+ git log --format=%s -1 # subject line
51
+ git log --format=%H -1 # full SHA
52
+ git log --format=%ae -1 # author email
53
+
54
+ Alternatively, guard commit-context access with an event_name check, or use the
55
+ github.sha context (which IS available on all triggers) when a commit SHA is needed.
56
+ fix_code:
57
+ - language: yaml
58
+ label: "Portable commit message extraction via git (works on all triggers)"
59
+ code: |
60
+ jobs:
61
+ release:
62
+ runs-on: ubuntu-latest
63
+ steps:
64
+ - uses: actions/checkout@v4
65
+ with:
66
+ fetch-depth: 2 # depth >= 2 required for git log on non-push
67
+
68
+ - name: Get commit message (safe for push, workflow_dispatch, schedule)
69
+ id: meta
70
+ run: |
71
+ echo "sha=${{ github.sha }}" >> $GITHUB_OUTPUT
72
+ echo "message=$(git log --format=%s -1 ${{ github.sha }})" >> $GITHUB_OUTPUT
73
+ echo "author=$(git log --format=%ae -1 ${{ github.sha }})" >> $GITHUB_OUTPUT
74
+
75
+ - name: Use commit metadata
76
+ run: |
77
+ echo "SHA: ${{ steps.meta.outputs.sha }}"
78
+ echo "Message: ${{ steps.meta.outputs.message }}"
79
+ - language: yaml
80
+ label: "Guard push-only context with event_name check"
81
+ code: |
82
+ - name: Get commit message (push only)
83
+ if: github.event_name == 'push' && github.event.commits[0] != null
84
+ run: |
85
+ echo "COMMIT_MSG=${{ github.event.commits[0].message }}" >> $GITHUB_ENV
86
+
87
+ - name: Fallback for non-push triggers
88
+ if: github.event_name != 'push'
89
+ run: |
90
+ echo "COMMIT_MSG=$(git log --format=%s -1)" >> $GITHUB_ENV
91
+ - language: yaml
92
+ label: "Debug: dump full event payload to understand what is available"
93
+ code: |
94
+ - name: Debug — dump event context
95
+ run: echo '${{ toJSON(github.event) }}'
96
+ prevention:
97
+ - "Never access github.event.commits or github.event.head_commit without first checking github.event_name == 'push'."
98
+ - "Use `git log --format=%s -1 ${{ github.sha }}` for commit message extraction — it works on all trigger types."
99
+ - "Note that github.sha IS available on all triggers and points to the relevant commit; use it as a portable substitute for github.event.head_commit.id."
100
+ - "Add a debug step early in development to dump `${{ toJSON(github.event) }}` so you can see exactly what context is available for each trigger type."
101
+ - "Test workflows by triggering them manually via workflow_dispatch to catch push-only context assumptions before they hit production."
102
+ docs:
103
+ - url: "https://docs.github.com/en/webhooks/webhook-events-and-payloads#push"
104
+ label: "GitHub docs — push event payload (includes commits array)"
105
+ - url: "https://docs.github.com/en/webhooks/webhook-events-and-payloads#workflow_dispatch"
106
+ label: "GitHub docs — workflow_dispatch event payload (no commits array)"
107
+ - url: "https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/accessing-contextual-information-about-workflow-runs#github-context"
108
+ label: "GitHub docs — github context reference"
109
+ - url: "https://github.com/orgs/community/discussions/27058"
110
+ label: "Community discussion — github.event.commits undefined on workflow_dispatch"
@@ -0,0 +1,77 @@
1
+ id: silent-failures-022
2
+ title: "fetch-tags: true Silently Fetches No Tags When fetch-depth Is 1"
3
+ category: silent-failures
4
+ severity: silent-failure
5
+ tags:
6
+ - checkout
7
+ - fetch-tags
8
+ - shallow-clone
9
+ - fetch-depth
10
+ - git-tags
11
+ - versioning
12
+ patterns:
13
+ - regex: "No tags found|no tags found"
14
+ flags: "i"
15
+ - regex: "fatal: No names found, cannot describe anything"
16
+ flags: "i"
17
+ - regex: "CHANGELOG.*No tag found"
18
+ flags: "i"
19
+ error_messages:
20
+ - "fatal: No names found, cannot describe anything"
21
+ - "No tags found. Try unshallowing the repository"
22
+ - "CHANGELOG ERROR: No tag found on HEAD"
23
+ - "Error: No tags matching '*' found, exiting"
24
+ root_cause: |
25
+ The `fetch-tags: true` option in `actions/checkout` was introduced in v3.6.0 to restore tag
26
+ fetching after `--no-tags` was made the default for shallow clones. However, when `fetch-depth`
27
+ remains at its default value of `1` (shallow clone), the tag fetch silently produces no results.
28
+
29
+ With a shallow clone, git only downloads a single commit. Tags are only present if they point
30
+ directly to that one commit — i.e., the workflow was triggered by a tag push. In all other
31
+ cases, `fetch-tags: true` appears to succeed (no error, no warning) but `git tag -l` returns
32
+ empty results.
33
+
34
+ This silently breaks tools that depend on git tags for versioning: semantic-release,
35
+ commitizen, standard-version, cargo-smart-release, setuptools-scm, and any script using
36
+ `git describe --tags`. Builds succeed but produce wrong version numbers (often 0.0.0 or
37
+ commit-hash-only versions).
38
+ fix: |
39
+ Pair `fetch-tags: true` with `fetch-depth: 0` to fetch the full history including all tags.
40
+ On very large repositories, use `filter: tree:0` for a blobless partial clone that still
41
+ includes complete tag history. As a targeted workaround, add a second step to fetch only
42
+ tags after a shallow checkout.
43
+ fix_code:
44
+ - language: yaml
45
+ label: "Recommended: full history with all tags"
46
+ code: |
47
+ - uses: actions/checkout@v4
48
+ with:
49
+ fetch-depth: 0 # full history required for tags
50
+ fetch-tags: true # fetch all tags
51
+ - language: yaml
52
+ label: "Large repos: blobless filter (faster, still includes tags)"
53
+ code: |
54
+ - uses: actions/checkout@v4
55
+ with:
56
+ fetch-depth: 0
57
+ filter: tree:0 # blobless clone — avoids downloading file blobs
58
+ fetch-tags: true
59
+ - language: yaml
60
+ label: "Workaround: shallow checkout + separate tag fetch step"
61
+ code: |
62
+ - uses: actions/checkout@v4
63
+ with:
64
+ fetch-depth: 1
65
+ - name: Fetch all tags
66
+ run: git fetch --prune --unshallow --tags
67
+ prevention:
68
+ - "Always pair `fetch-tags: true` with `fetch-depth: 0` unless the workflow is only triggered by tag pushes"
69
+ - "Add `git tag -l` as a debug step in release workflows to verify tags are present after checkout"
70
+ - "If using semantic-release or similar, test your version script locally with a shallow clone to catch this early"
71
+ docs:
72
+ - url: "https://github.com/actions/checkout/issues/1471"
73
+ label: "actions/checkout#1471 — fetch-tags: true doesn't actually fetch any tags (126 reactions)"
74
+ - url: "https://github.com/actions/checkout/issues/1467"
75
+ label: "actions/checkout#1467 — related: no-tags default behavior"
76
+ - url: "https://github.com/actions/checkout#usage"
77
+ label: "actions/checkout — fetch-tags and fetch-depth inputs documentation"