@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.
- package/dist/db/search.js +3 -1
- package/dist/db/search.js.map +1 -1
- package/dist/tools/suggest-fix.d.ts.map +1 -1
- package/dist/tools/suggest-fix.js +5 -1
- package/dist/tools/suggest-fix.js.map +1 -1
- package/errors/caching-artifacts/cache-key-too-long.yml +93 -0
- package/errors/caching-artifacts/cache-path-not-exist-skipped.yml +152 -0
- package/errors/caching-artifacts/docker-buildx-gha-cache-capacity.yml +107 -0
- package/errors/caching-artifacts/setup-ruby-bundler-ephemeral-workdir-cache-miss.yml +147 -0
- package/errors/caching-artifacts/upload-artifact-v3-retirement-blocked.yml +123 -0
- package/errors/concurrency-timing/always-cleanup-5min-forced-kill.yml +140 -0
- package/errors/concurrency-timing/concurrency-group-env-context-undefined.yml +99 -0
- package/errors/concurrency-timing/required-check-pending-path-filter-skip.yml +160 -0
- package/errors/concurrency-timing/wait-timer-cancel-in-progress-starvation.yml +125 -0
- package/errors/known-unsolved/composite-action-step-timeout-minutes-ignored.yml +146 -0
- package/errors/known-unsolved/reusable-workflow-no-composite-action-call.yml +116 -0
- package/errors/known-unsolved/schedule-trigger-default-branch-only.yml +113 -0
- package/errors/known-unsolved/secrets-not-allowed-in-if-conditions.yml +149 -0
- package/errors/permissions-auth/dependabot-pr-secrets-unavailable.yml +133 -0
- package/errors/permissions-auth/fine-grained-pat-deployment-write-required.yml +146 -0
- package/errors/permissions-auth/github-app-installation-token-new-format.yml +124 -0
- package/errors/permissions-auth/github-packages-read-requires-packages-permission.yml +128 -0
- package/errors/permissions-auth/oidc-id-token-write-permission-missing.yml +169 -0
- package/errors/permissions-auth/permissions-empty-block-removes-contents-read.yml +97 -0
- package/errors/permissions-auth/reusable-workflow-permissions-not-inherited.yml +114 -0
- package/errors/runner-environment/az-powershell-14-to-15-breaking.yml +108 -0
- package/errors/runner-environment/checkout-windows-ebusy-lock.yml +124 -0
- package/errors/runner-environment/deprecated-action-version-auto-rejected.yml +89 -0
- package/errors/runner-environment/github-hosted-runner-disk-space-full.yml +85 -0
- package/errors/runner-environment/github-path-same-step-not-found.yml +114 -0
- package/errors/runner-environment/github-script-v6-octokit-rest-actions-not-function.yml +87 -0
- package/errors/runner-environment/macos-15-mono-nuget-removed.yml +151 -0
- package/errors/runner-environment/macos-15-xcode-simulator-sdk-policy.yml +141 -0
- package/errors/runner-environment/runner-oom-exit-code-137.yml +117 -0
- package/errors/runner-environment/setup-go-go123-telemetry-cache-failure.yml +92 -0
- package/errors/runner-environment/setup-java-distribution-required.yml +108 -0
- package/errors/runner-environment/ubuntu-2204-precached-docker-removed.yml +110 -0
- package/errors/runner-environment/windows-latest-d-drive-removed.yml +104 -0
- package/errors/runner-environment/windows-msvc-ltcg-mixed-image-versions.yml +112 -0
- package/errors/runner-environment/windows-vs2026-cuda-host-compiler-unsupported.yml +145 -0
- package/errors/silent-failures/app-store-ios26-sdk-required.yml +113 -0
- package/errors/silent-failures/event-commits-empty-on-workflow-dispatch.yml +110 -0
- package/errors/silent-failures/fetch-tags-depth-one-silent-no-op.yml +77 -0
- package/errors/silent-failures/github-env-multiline-value-truncated.yml +127 -0
- package/errors/silent-failures/github-sha-pr-merge-commit-not-head.yml +150 -0
- package/errors/silent-failures/job-output-masked-as-secret-empty.yml +147 -0
- package/errors/silent-failures/upload-artifact-permissions-stripped.yml +98 -0
- package/errors/triggers/pull-request-branches-filter-matches-base-not-head.yml +140 -0
- package/errors/triggers/push-event-fires-on-branch-delete.yml +129 -0
- package/errors/triggers/push-first-commit-before-sha-zeros.yml +160 -0
- package/errors/yaml-syntax/fromjson-empty-string-crash.yml +99 -0
- package/errors/yaml-syntax/if-bang-negation-yaml-tag.yml +145 -0
- package/errors/yaml-syntax/local-action-path-always-top-level.yml +142 -0
- 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,110 @@
|
|
|
1
|
+
id: runner-environment-035
|
|
2
|
+
title: "ubuntu-22.04 Pre-Cached Docker Images Removed — Cold Pulls Now Required"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: warning
|
|
5
|
+
tags:
|
|
6
|
+
- ubuntu
|
|
7
|
+
- docker
|
|
8
|
+
- pre-cached
|
|
9
|
+
- runner-image
|
|
10
|
+
- pull-rate
|
|
11
|
+
- performance
|
|
12
|
+
patterns:
|
|
13
|
+
- regex: "Unable to find image '.*' locally"
|
|
14
|
+
flags: "i"
|
|
15
|
+
- regex: "Pulling from (?:library/)?(?:node|python|postgres|redis|mysql|nginx|ubuntu|alpine).*\nDigest:"
|
|
16
|
+
flags: "im"
|
|
17
|
+
- regex: "docker: Error response from daemon.*manifest.*not found"
|
|
18
|
+
flags: "i"
|
|
19
|
+
error_messages:
|
|
20
|
+
- "Unable to find image 'node:lts-alpine' locally"
|
|
21
|
+
- "Unable to find image 'postgres:15' locally"
|
|
22
|
+
- "Unable to find image 'redis:7-alpine' locally"
|
|
23
|
+
- "Pulling from library/node"
|
|
24
|
+
- "Pulling from library/postgres"
|
|
25
|
+
root_cause: |
|
|
26
|
+
Starting January 12, 2026, GitHub removed all pre-cached Docker images from the
|
|
27
|
+
ubuntu-22.04 runner image to address disk space limits. Previously, commonly used
|
|
28
|
+
Docker images (node, postgres, redis, mysql, python, nginx, alpine, etc.) were
|
|
29
|
+
pre-pulled into the runner's local Docker image cache, so `docker pull` or
|
|
30
|
+
`docker run` on those images started immediately without a network pull.
|
|
31
|
+
|
|
32
|
+
After the change, ALL Docker images must be pulled from the registry at runtime.
|
|
33
|
+
This has two main effects:
|
|
34
|
+
|
|
35
|
+
1. **Longer job times**: Cold pulls for large images (node, python, postgres) add
|
|
36
|
+
30-120+ seconds per job depending on image size and registry speed.
|
|
37
|
+
|
|
38
|
+
2. **DockerHub rate limit exposure**: Workflows that previously never hit the
|
|
39
|
+
DockerHub anonymous pull rate limit (100 pulls/6h per IP) may now exceed it
|
|
40
|
+
once caching is removed — especially on parallel matrix jobs all pulling the
|
|
41
|
+
same image from the same runner subnet IP.
|
|
42
|
+
|
|
43
|
+
The change only affects ubuntu-22.04. Ubuntu 24.04 and other images were not
|
|
44
|
+
pre-caching Docker images in the same way.
|
|
45
|
+
|
|
46
|
+
Source: actions/runner-images#13472
|
|
47
|
+
fix: |
|
|
48
|
+
**Option 1 — Authenticate to DockerHub** to raise the rate limit to 200 pulls/6h
|
|
49
|
+
(free account) or unlimited (Pro/Team).
|
|
50
|
+
|
|
51
|
+
**Option 2 — Use GitHub Container Registry (ghcr.io)** for your own images —
|
|
52
|
+
these never count against DockerHub rate limits and pull faster from GitHub runners.
|
|
53
|
+
|
|
54
|
+
**Option 3 — Upgrade to ubuntu-24.04** if the workflow is not tied to ubuntu-22.04
|
|
55
|
+
specific packages. The 24.04 image has current tooling and better long-term support.
|
|
56
|
+
|
|
57
|
+
**Option 4 — Add a docker/login-action step** before any Docker operations to
|
|
58
|
+
authenticate even with a free DockerHub account, which 2x the anonymous rate limit.
|
|
59
|
+
fix_code:
|
|
60
|
+
- language: yaml
|
|
61
|
+
label: "Authenticate to DockerHub to avoid rate limits on ubuntu-22.04"
|
|
62
|
+
code: |
|
|
63
|
+
jobs:
|
|
64
|
+
build:
|
|
65
|
+
runs-on: ubuntu-22.04
|
|
66
|
+
steps:
|
|
67
|
+
- name: Log in to DockerHub
|
|
68
|
+
uses: docker/login-action@v3
|
|
69
|
+
with:
|
|
70
|
+
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
|
71
|
+
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
|
72
|
+
|
|
73
|
+
- name: Run tests with Postgres
|
|
74
|
+
run: |
|
|
75
|
+
docker run --rm -d -p 5432:5432 \
|
|
76
|
+
-e POSTGRES_PASSWORD=test \
|
|
77
|
+
postgres:15-alpine
|
|
78
|
+
- language: yaml
|
|
79
|
+
label: "Use GitHub Container Registry instead of DockerHub"
|
|
80
|
+
code: |
|
|
81
|
+
jobs:
|
|
82
|
+
build:
|
|
83
|
+
runs-on: ubuntu-22.04
|
|
84
|
+
permissions:
|
|
85
|
+
packages: read
|
|
86
|
+
steps:
|
|
87
|
+
- name: Log in to GHCR
|
|
88
|
+
uses: docker/login-action@v3
|
|
89
|
+
with:
|
|
90
|
+
registry: ghcr.io
|
|
91
|
+
username: ${{ github.actor }}
|
|
92
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
93
|
+
|
|
94
|
+
- name: Run service container from GHCR
|
|
95
|
+
run: docker run --rm ghcr.io/myorg/my-image:latest
|
|
96
|
+
prevention:
|
|
97
|
+
- "Authenticate to DockerHub in all workflows that pull images on ubuntu-22.04 runners."
|
|
98
|
+
- "Consider migrating ubuntu-22.04 workflows to ubuntu-24.04 — it's the current default and avoids this issue."
|
|
99
|
+
- "Prefer GitHub Container Registry (ghcr.io) for your own images to eliminate DockerHub rate limits entirely."
|
|
100
|
+
- "Use `docker/login-action` as a standard first step in any workflow that involves Docker image pulls."
|
|
101
|
+
- "Monitor job durations after runner image updates — unexpected slowdowns often signal a caching change."
|
|
102
|
+
docs:
|
|
103
|
+
- url: "https://github.com/actions/runner-images/issues/13472"
|
|
104
|
+
label: "runner-images#13472 — ubuntu-22.04 pre-cached Docker images removal announcement"
|
|
105
|
+
- url: "https://github.com/actions/runner-images/issues/1445"
|
|
106
|
+
label: "runner-images#1445 — DockerHub pull rate limit discussion"
|
|
107
|
+
- url: "https://docs.docker.com/docker-hub/download-rate-limit/"
|
|
108
|
+
label: "DockerHub pull rate limits documentation"
|
|
109
|
+
- url: "https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry"
|
|
110
|
+
label: "Working with GitHub Container Registry (ghcr.io)"
|
|
@@ -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,112 @@
|
|
|
1
|
+
id: runner-environment-036
|
|
2
|
+
title: "Windows MSVC LTCG Linker Fails When Jobs in Same Run Receive Different Image Versions"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- windows
|
|
7
|
+
- msvc
|
|
8
|
+
- ltcg
|
|
9
|
+
- linker
|
|
10
|
+
- runner-image
|
|
11
|
+
- build
|
|
12
|
+
- vs2026
|
|
13
|
+
patterns:
|
|
14
|
+
- regex: "C1900.*Il mismatch between 'P1' version.*and 'P2' version"
|
|
15
|
+
flags: "i"
|
|
16
|
+
- regex: "LNK1257.*code generation failed"
|
|
17
|
+
flags: "i"
|
|
18
|
+
- regex: "LNK2001.*unresolved external symbol __std_"
|
|
19
|
+
flags: "i"
|
|
20
|
+
- regex: "fatal error C1900"
|
|
21
|
+
flags: "i"
|
|
22
|
+
error_messages:
|
|
23
|
+
- "EXEC : fatal error C1900: Il mismatch between 'P1' version '20251208' and 'P2' version '20250730'"
|
|
24
|
+
- "LINK : fatal error LNK1257: code generation failed"
|
|
25
|
+
- "skia.lib(...) : error LNK2001: unresolved external symbol __std_minmax_element_f_"
|
|
26
|
+
- "skia.lib(...) : error LNK2001: unresolved external symbol __std_max_element_2u"
|
|
27
|
+
root_cause: |
|
|
28
|
+
GitHub Actions does not guarantee that all jobs within a single workflow run receive
|
|
29
|
+
the same concrete runner image version. When a runner image is being rolled out
|
|
30
|
+
(e.g., during a VS 2026 update or patch cycle), some jobs may be assigned to runners
|
|
31
|
+
with image version 20260510.103.1 while others receive 20260518.113.1 — even for
|
|
32
|
+
jobs with the same `runs-on: windows-2025-vs2026` label.
|
|
33
|
+
|
|
34
|
+
This becomes a hard build failure for workflows that use MSVC Link-Time Code
|
|
35
|
+
Generation (LTCG / /GL):
|
|
36
|
+
- Job A (build) compiles .obj and .lib files with /GL on image version X
|
|
37
|
+
→ MSVC compiler emits Intermediate Language (IL) artifacts stamped with version X.
|
|
38
|
+
- Job B (link) downloads those artifacts and attempts to link them using /LTCG on
|
|
39
|
+
image version Y (a different MSVC toolset patch version).
|
|
40
|
+
- MSVC detects the IL version mismatch (C1900) and aborts: the IL produced by
|
|
41
|
+
one toolset cannot be consumed by a different toolset version.
|
|
42
|
+
|
|
43
|
+
The same failure can occur for any build pipeline that:
|
|
44
|
+
- Splits compilation and linking across separate jobs
|
|
45
|
+
- Uses artifact upload/download to pass compiled objects between jobs
|
|
46
|
+
- Relies on LTCG, MSVC STL internals, or other IL-sensitive optimizations
|
|
47
|
+
|
|
48
|
+
This is a known limitation of the GitHub Actions runner assignment model — image
|
|
49
|
+
rollouts are gradual across the runner pool, and job assignments are not pinned
|
|
50
|
+
to a specific image version within a run.
|
|
51
|
+
|
|
52
|
+
Source: actions/runner-images#14140
|
|
53
|
+
fix: |
|
|
54
|
+
**Option 1 — Combine compile and link in a single job** so all MSVC operations
|
|
55
|
+
run on the same runner image. This eliminates the cross-image artifact transfer.
|
|
56
|
+
|
|
57
|
+
**Option 2 — Disable LTCG for CI builds** (/GL is a release optimization; most
|
|
58
|
+
CI builds only need it for final release binaries, not PRs or branch builds).
|
|
59
|
+
|
|
60
|
+
**Option 3 — Add MSVC toolset version check** in the link job to detect mismatches
|
|
61
|
+
before the link fails, and fail fast with a clear diagnostic message.
|
|
62
|
+
|
|
63
|
+
**Option 4 — Use a self-hosted runner** with a pinned image version for builds
|
|
64
|
+
that require LTCG across jobs.
|
|
65
|
+
fix_code:
|
|
66
|
+
- language: yaml
|
|
67
|
+
label: "Combine compile and link in one job to avoid image mismatch"
|
|
68
|
+
code: |
|
|
69
|
+
jobs:
|
|
70
|
+
build-and-link:
|
|
71
|
+
runs-on: windows-2025-vs2026
|
|
72
|
+
steps:
|
|
73
|
+
- uses: actions/checkout@v4
|
|
74
|
+
|
|
75
|
+
- name: Configure CMake
|
|
76
|
+
run: cmake -B build -DCMAKE_BUILD_TYPE=Release
|
|
77
|
+
|
|
78
|
+
# Compile AND link in the same job — same image version guaranteed
|
|
79
|
+
- name: Build (compile + link)
|
|
80
|
+
run: cmake --build build --config Release
|
|
81
|
+
- language: yaml
|
|
82
|
+
label: "Disable LTCG on CI builds, enable only for release"
|
|
83
|
+
code: |
|
|
84
|
+
jobs:
|
|
85
|
+
build:
|
|
86
|
+
runs-on: windows-2025-vs2026
|
|
87
|
+
steps:
|
|
88
|
+
- uses: actions/checkout@v4
|
|
89
|
+
|
|
90
|
+
- name: Build without LTCG (CI)
|
|
91
|
+
# Pass -DNO_LTCG=1 or equivalent CMake flag to disable /GL and /LTCG
|
|
92
|
+
# LTCG is only enabled in the separate release workflow
|
|
93
|
+
run: cmake -B build -DCMAKE_BUILD_TYPE=Release -DENABLE_LTCG=OFF
|
|
94
|
+
env:
|
|
95
|
+
# Alternatively: override CFLAGS/CXXFLAGS directly
|
|
96
|
+
CFLAGS: /O2 # Optimize without /GL
|
|
97
|
+
CXXFLAGS: /O2
|
|
98
|
+
prevention:
|
|
99
|
+
- "Never split MSVC compilation and LTCG linking across separate jobs that upload/download artifacts."
|
|
100
|
+
- "Disable /GL (LTCG) in CI builds — reserve it for final release artifact builds on a single job."
|
|
101
|
+
- "Monitor runner image rollout announcements; if a new Windows image version is being deployed, LTCG cross-job builds are at risk during the rollout window."
|
|
102
|
+
- "Add a MSVC version check step at the start of link jobs to emit the toolset version to logs for post-failure diagnosis."
|
|
103
|
+
- "Use self-hosted runners with pinned image versions for release builds that require LTCG across jobs."
|
|
104
|
+
docs:
|
|
105
|
+
- url: "https://github.com/actions/runner-images/issues/14140"
|
|
106
|
+
label: "runner-images#14140 — MSVC LTCG linker failure from mixed image versions in same run"
|
|
107
|
+
- url: "https://learn.microsoft.com/en-us/cpp/build/reference/gl-whole-program-optimization"
|
|
108
|
+
label: "MSVC /GL (Whole Program Optimization) documentation"
|
|
109
|
+
- url: "https://learn.microsoft.com/en-us/cpp/build/reference/ltcg-link-time-code-generation"
|
|
110
|
+
label: "MSVC /LTCG (Link-Time Code Generation) documentation"
|
|
111
|
+
- url: "https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners"
|
|
112
|
+
label: "About GitHub-hosted runners"
|
|
@@ -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"
|