@htekdev/actions-debugger 1.0.118 → 1.0.119

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.
@@ -0,0 +1,107 @@
1
+ id: runner-environment-214
2
+ title: 'setup-java Fails with "Invalid Version" for JetBrains Runtime 4-Part Semver (e.g. 17.0.8.1+1080.1)'
3
+ category: runner-environment
4
+ severity: error
5
+ tags:
6
+ - setup-java
7
+ - jbr
8
+ - jetbrains-runtime
9
+ - java
10
+ - semver
11
+ - version-parsing
12
+ - windows
13
+ - ubuntu
14
+ patterns:
15
+ - regex: 'Java setup process failed due to:\s*Invalid Version:\s*\d+\.\d+\.\d+\.\d+\+'
16
+ flags: 'i'
17
+ - regex: 'Invalid Version:\s*\d+\.\d+\.\d+\.\d+'
18
+ flags: 'i'
19
+ - regex: 'java setup.*failed.*Invalid Version'
20
+ flags: 'i'
21
+ error_messages:
22
+ - 'Error: Java setup process failed due to: Invalid Version: 17.0.8.1+1080.1'
23
+ - 'Error: Java setup process failed due to: Invalid Version: 25.0.3+480.61'
24
+ - 'Error: Java setup process failed due to: Invalid Version: 21.0.5.1+1100.2'
25
+ root_cause: |
26
+ JetBrains Runtime (JBR) version strings use a 4-part numeric format:
27
+ `major.minor.patch.update+build.sub-build` (e.g. `17.0.8.1+1080.1`).
28
+ This does NOT conform to standard semantic versioning (3-part numeric).
29
+
30
+ The `actions/setup-java` version resolver uses a semver parser internally.
31
+ When the user passes a full pinned JBR version string containing a 4-part
32
+ numeric prefix (the `.1` after the patch component), the parser throws:
33
+
34
+ "Invalid Version: 17.0.8.1+1080.1"
35
+
36
+ Affected distributions: `jetbrains` (JBR) distribution only.
37
+ Affected platforms: Ubuntu and Windows (both throw the same error).
38
+ Unaffected: Oracle, Temurin, Adopt, Corretto and other distributions whose
39
+ version strings use standard 3-part semver (e.g. `21.0.3+9`).
40
+
41
+ The root cause is that JBR independently versions patch updates
42
+ (the `.1` suffix), meaning a JBR patch release version is 4 integers deep,
43
+ which the bundled semver parser does not accept.
44
+
45
+ Tracked upstream: https://github.com/actions/setup-java/issues/1008 (open May 2026)
46
+ Fix PR: https://github.com/actions/setup-java/pull/1009 (isVersionSatisfies patch — pending merge)
47
+ fix: |
48
+ Until https://github.com/actions/setup-java/pull/1009 is merged and released,
49
+ do NOT pin the full 4-part JBR version string. Use either:
50
+
51
+ 1. The 3-part version prefix (major.minor.patch) — setup-java will resolve the
52
+ latest available JBR sub-build for that patch:
53
+
54
+ - uses: actions/setup-java@v5
55
+ with:
56
+ distribution: 'jetbrains'
57
+ java-version: '17.0.8' # omit the .1 suffix
58
+
59
+ 2. Just the major version for the latest JBR:
60
+
61
+ - uses: actions/setup-java@v5
62
+ with:
63
+ distribution: 'jetbrains'
64
+ java-version: '17'
65
+
66
+ 3. The pre-release format accepted by the current parser (major.minor.patch
67
+ with the build metadata only, omitting the update digit):
68
+
69
+ - uses: actions/setup-java@v5
70
+ with:
71
+ distribution: 'jetbrains'
72
+ java-version: '17.0.8+1080.1' # skip the 4th integer; use build metadata
73
+ fix_code:
74
+ - language: yaml
75
+ label: 'Use 3-part version prefix to avoid "Invalid Version" on JBR'
76
+ code: |
77
+ - name: Set up JBR 17 (JetBrains Runtime)
78
+ uses: actions/setup-java@v5
79
+ with:
80
+ distribution: 'jetbrains'
81
+ java-version: '17.0.8' # NOT '17.0.8.1+1080.1' — 4-part fails the parser
82
+ - language: yaml
83
+ label: 'Major-version pin (simplest, always resolves latest JBR for that major)'
84
+ code: |
85
+ - name: Set up JBR 25
86
+ uses: actions/setup-java@v5
87
+ with:
88
+ distribution: 'jetbrains'
89
+ java-version: '25'
90
+ prevention:
91
+ - 'Check the JBR releases page to understand the version format before pinning.
92
+ JBR versions are `major.minor.patch.update+build.sub-build`; only use the
93
+ 3-part prefix (major.minor.patch) or major-version-only with setup-java.'
94
+ - 'Watch https://github.com/actions/setup-java/pull/1009 for when the fix merges
95
+ so full 4-part JBR version strings become accepted.'
96
+ - 'For reproducibility without pinning the exact JBR sub-build, consider
97
+ using a `.java-version` file with a 3-part version string and referencing it
98
+ via `java-version-file:` in setup-java.'
99
+ docs:
100
+ - url: 'https://github.com/actions/setup-java/issues/1008'
101
+ label: 'setup-java #1008 — Error parsing JBR version 17.0.8.1+1080.1 (open, May 2026)'
102
+ - url: 'https://github.com/actions/setup-java/pull/1009'
103
+ label: 'setup-java PR #1009 — fix: reject non-semver candidate versions in isVersionSatisfies (pending)'
104
+ - url: 'https://github.com/actions/setup-java?tab=readme-ov-file#supported-distributions'
105
+ label: 'setup-java README — Supported distributions (JetBrains / JBR)'
106
+ - url: 'https://github.com/JetBrains/JetBrainsRuntime/releases'
107
+ label: 'JetBrains Runtime releases — version format reference'
@@ -0,0 +1,93 @@
1
+ id: runner-environment-215
2
+ title: 'setup-node fails with EBADDEVENGINES when devEngines.packageManager.version does not match initial npm'
3
+ category: runner-environment
4
+ severity: error
5
+ tags:
6
+ - setup-node
7
+ - npm
8
+ - devEngines
9
+ - EBADDEVENGINES
10
+ - package-manager
11
+ - npm-version
12
+ patterns:
13
+ - regex: 'npm error code EBADDEVENGINES'
14
+ flags: 'i'
15
+ - regex: 'npm error EBADDEVENGINES.*Invalid devEngines\.packageManager'
16
+ flags: 'i'
17
+ - regex: 'npm error EBADDEVENGINES.*Invalid semver version.*does not match.*for "packageManager"'
18
+ flags: 'i'
19
+ - regex: '/npm config get cache\s*npm error code EBADDEVENGINES'
20
+ flags: 'is'
21
+ error_messages:
22
+ - 'npm error code EBADDEVENGINES'
23
+ - 'npm error EBADDEVENGINES The developer of this package has specified the following through devEngines'
24
+ - 'npm error EBADDEVENGINES Invalid devEngines.packageManager'
25
+ - 'npm error EBADDEVENGINES Invalid semver version "^11.10.0" does not match "10.9.7" for "packageManager"'
26
+ root_cause: |
27
+ actions/setup-node@v6 runs `npm config get cache` immediately after installing Node.js to
28
+ determine the npm cache path before activating the package-manager-cache feature. If
29
+ package.json declares a `devEngines.packageManager.version` constraint (Node.js 22.6+
30
+ feature) that the bundled npm does NOT satisfy, npm exits with EBADDEVENGINES before
31
+ returning the cache path.
32
+
33
+ The failure happens before setup-node has a chance to upgrade npm to the required version,
34
+ creating a catch-22: the action needs the cache path to set up, but npm won't answer
35
+ because the version constraint is not yet met.
36
+
37
+ Common scenario: project requires `npm@^11.10.0` (for `min-release-age` or other features
38
+ added in npm 11.x), but Node 22 ships with npm 10.x. The first `npm` invocation fails
39
+ immediately when devEngines enforcement is active.
40
+ fix: |
41
+ Option 1 (recommended) — add `"onFail": "warn"` to the devEngines.packageManager block.
42
+ This downgrades version mismatches to warnings so npm commands still complete, letting
43
+ setup-node finish. Install the required npm version in a subsequent step.
44
+
45
+ Option 2 — pin Node.js to a version whose bundled npm satisfies devEngines (often
46
+ impractical).
47
+
48
+ Option 3 — set `package-manager-cache: false` in setup-node to skip the cache-path probe
49
+ entirely and manage npm caching separately.
50
+ fix_code:
51
+ - language: yaml
52
+ label: 'Option 1 — add onFail: warn to package.json (fix the root cause)'
53
+ code: |
54
+ # In package.json:
55
+ # {
56
+ # "devEngines": {
57
+ # "packageManager": {
58
+ # "name": "npm",
59
+ # "version": "^11.10.0",
60
+ # "onFail": "warn" <-- add this
61
+ # }
62
+ # }
63
+ # }
64
+
65
+ # In workflow — install the required npm version after setup-node succeeds:
66
+ - uses: actions/setup-node@v6
67
+ with:
68
+ node-version-file: package.json
69
+ - run: npm install -g npm@^11.10.0
70
+ - language: yaml
71
+ label: 'Option 3 — disable package-manager-cache in setup-node'
72
+ code: |
73
+ - uses: actions/setup-node@v6
74
+ with:
75
+ node-version: '22'
76
+ package-manager-cache: false # skip npm config get cache probe
77
+ - run: npm install -g npm@^11.10.0
78
+ - uses: actions/cache@v4
79
+ with:
80
+ path: ~/.npm
81
+ key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
82
+ prevention:
83
+ - 'Always pair devEngines.packageManager.version with "onFail": "warn" unless the project must hard-fail on CI for version mismatches.'
84
+ - 'Use package-manager-cache: false in setup-node and handle npm caching manually when devEngines constraints are strict.'
85
+ - 'Track the Node.js release schedule to choose a version that ships with an npm satisfying devEngines requirements from day one.'
86
+ - 'Pin action version in workflow (e.g., actions/setup-node@v6.4.0) and test upgrades in a branch before rolling out.'
87
+ docs:
88
+ - url: 'https://github.com/actions/setup-node/issues/1553'
89
+ label: 'setup-node#1553 — EBADDEVENGINES blocks cache-path probe (May 2026)'
90
+ - url: 'https://docs.npmjs.com/cli/v11/configuring-npm/package-json#devengines'
91
+ label: 'npm docs — devEngines field and onFail option'
92
+ - url: 'https://github.com/nodejs/node/issues/62425'
93
+ label: 'Node.js#62425 — npm installation behavior on Node v22.22.2 with devEngines'
@@ -0,0 +1,82 @@
1
+ id: runner-environment-216
2
+ title: 'ubuntu-26.04 ships Helm 4 — `helm repo add --no-update` removed, causes unknown flag error'
3
+ category: runner-environment
4
+ severity: error
5
+ tags:
6
+ - helm
7
+ - helm-4
8
+ - ubuntu-26
9
+ - tool-upgrade
10
+ - flag-removed
11
+ patterns:
12
+ - regex: 'Error: unknown flag: --no-update'
13
+ flags: 'i'
14
+ - regex: 'unknown flag.*--no-update'
15
+ flags: 'i'
16
+ error_messages:
17
+ - 'Error: unknown flag: --no-update'
18
+ - 'Error: flag provided but not defined: --no-update'
19
+ root_cause: |
20
+ ubuntu-26.04 runner images install Helm 4 (via the `get-helm-4` installer script)
21
+ instead of Helm 3 used on ubuntu-22.04 and ubuntu-24.04. In Helm 4, the
22
+ `--no-update` flag was permanently removed from `helm repo add`
23
+ (breaking change: helm/helm#13614, released in Helm v4.0.0, November 2025).
24
+
25
+ In Helm 3, `helm repo add <name> <url> --no-update` was used to add a repo
26
+ without triggering a refresh of all configured repos. This was common in CI
27
+ pipelines to speed up `helm repo add` when many repos are configured. The
28
+ flag was first deprecated in Helm 3.7 and has been removed entirely in Helm 4
29
+ with no deprecated alias retained.
30
+
31
+ The runner-images commit 9e3319d (May 2026) introduced Helm 4 for ubuntu-26.04.
32
+ Any workflow using `runs-on: ubuntu-26.04` (or eventually `ubuntu-latest` when
33
+ it migrates to 26.04) that calls `helm repo add --no-update` will fail
34
+ immediately with `Error: unknown flag: --no-update`.
35
+ fix: |
36
+ Remove the `--no-update` flag entirely. In Helm 4, `helm repo add` does not
37
+ update existing repos by default — the behavior the flag used to enforce is
38
+ now the default behavior.
39
+
40
+ If you need to force-update all repos after adding, use `helm repo update`.
41
+
42
+ To avoid Helm version surprises on ubuntu-26.04, pin a specific Helm version
43
+ using `azure/setup-helm` and pass the version explicitly.
44
+ fix_code:
45
+ - language: yaml
46
+ label: 'Remove --no-update flag (Helm 4 default behavior)'
47
+ code: |
48
+ - name: Add Helm repo
49
+ run: |
50
+ # Helm 4 on ubuntu-26.04: --no-update flag has been removed.
51
+ # Helm 4 does not update existing repos by default (old --no-update behavior).
52
+ # Simply omit the flag:
53
+ helm repo add bitnami https://charts.bitnami.com/bitnami
54
+ # If you still need to update all repos afterwards:
55
+ # helm repo update
56
+
57
+ - language: yaml
58
+ label: 'Pin Helm version with azure/setup-helm to avoid version surprises'
59
+ code: |
60
+ - name: Set up Helm
61
+ uses: azure/setup-helm@v5
62
+ with:
63
+ version: '3.17.x' # Pin to Helm 3 if your workflow isn't Helm 4 ready
64
+ # Or pin to a specific Helm 4 version:
65
+ # version: '4.2.x'
66
+
67
+ - name: Add Helm repo
68
+ run: helm repo add bitnami https://charts.bitnami.com/bitnami
69
+ prevention:
70
+ - "Pin your Helm version with `azure/setup-helm` rather than relying on the pre-installed Helm on the runner."
71
+ - "When migrating to ubuntu-26.04, audit all `helm repo add` calls and remove any `--no-update` flags."
72
+ - "Check the Helm 4 migration guide at https://helm.sh/docs/topics/v4_migration/ before adopting ubuntu-26.04."
73
+ - "Add a CI step that prints `helm version` so version surprises are immediately visible in logs."
74
+ docs:
75
+ - url: 'https://github.com/helm/helm/blob/main/CHANGELOG.md'
76
+ label: 'Helm 4 Changelog — breaking changes'
77
+ - url: 'https://helm.sh/docs/topics/v4_migration/'
78
+ label: 'Helm v4 Migration Guide'
79
+ - url: 'https://github.com/actions/runner-images/commit/9e3319d6b4acc306925295853d0ff41ddd5c40f0'
80
+ label: 'runner-images commit: ubuntu-26 ships Helm 4 (get-helm-4)'
81
+ - url: 'https://github.com/Azure/setup-helm'
82
+ label: 'azure/setup-helm action — pin Helm version'
@@ -0,0 +1,99 @@
1
+ id: runner-environment-217
2
+ title: 'ubuntu-26.04 Helm 4 — `helm install --atomic` fails with unknown flag error on Helm 4.0.x–4.1.0'
3
+ category: runner-environment
4
+ severity: error
5
+ tags:
6
+ - helm
7
+ - helm-4
8
+ - ubuntu-26
9
+ - tool-upgrade
10
+ - flag-renamed
11
+ - atomic
12
+ patterns:
13
+ - regex: 'Error: unknown flag: --atomic'
14
+ flags: 'i'
15
+ - regex: 'helm install.*Error.*unknown flag.*atomic'
16
+ flags: 'i'
17
+ error_messages:
18
+ - 'Error: unknown flag: --atomic'
19
+ - 'Error: flag provided but not defined: --atomic'
20
+ root_cause: |
21
+ ubuntu-26.04 runner images install Helm 4. In Helm 4, the `--atomic` flag was
22
+ renamed to `--rollback-on-failure`. On `helm upgrade`, the old `--atomic` flag
23
+ was retained as a deprecated alias that emits a warning. However, on
24
+ `helm install`, the `--atomic` binding was accidentally omitted in Helm 4.0.0,
25
+ so `helm install --atomic` fails with `Error: unknown flag: --atomic` on Helm
26
+ versions 4.0.0 through 4.1.0.
27
+
28
+ This was reported in helm/helm#31900 and fixed in Helm 4.1.1 via PR #31901
29
+ (March 4, 2026), which restored `--atomic` as a deprecated alias on
30
+ `helm install`. However, workflows that pin specific Helm 4 versions via
31
+ `azure/setup-helm` at versions 4.0.0–4.1.0, or any ubuntu-26.04 image built
32
+ before the Helm 4.1.1+ update, will still hit this error.
33
+
34
+ `--atomic` is extremely common in Kubernetes deployment workflows because it
35
+ auto-rolls back failed installs and waits for all pods to be Ready.
36
+ fix: |
37
+ Replace `--atomic` with `--rollback-on-failure` in your `helm install`
38
+ command. The semantics are identical: on failure, Helm rolls back (uninstalls)
39
+ the release and returns a non-zero exit code.
40
+
41
+ Note: `--wait` is implicitly enabled when `--rollback-on-failure` is set.
42
+
43
+ If you must use `--atomic` (e.g., shared scripts that support both Helm 3 and 4),
44
+ pin Helm 3 with `azure/setup-helm` or ensure Helm 4.1.1+ is installed.
45
+ fix_code:
46
+ - language: yaml
47
+ label: 'Replace --atomic with --rollback-on-failure (Helm 4 syntax)'
48
+ code: |
49
+ - name: Deploy chart
50
+ run: |
51
+ # Helm 4 on ubuntu-26.04: --atomic is removed from helm install (4.0.x-4.1.0).
52
+ # Use --rollback-on-failure instead (semantically identical):
53
+ helm install my-release ./chart \
54
+ --namespace production \
55
+ --rollback-on-failure \
56
+ --timeout 5m0s
57
+
58
+ - language: yaml
59
+ label: 'Pin Helm version to avoid flag compatibility issues'
60
+ code: |
61
+ - name: Set up Helm
62
+ uses: azure/setup-helm@v5
63
+ with:
64
+ version: '3.17.x' # Use Helm 3 if --atomic is required and not yet migrated
65
+ # Or use Helm 4.1.1+ which restores --atomic as a deprecated alias:
66
+ # version: '4.1.1'
67
+
68
+ - name: Deploy chart
69
+ run: |
70
+ helm install my-release ./chart \
71
+ --namespace production \
72
+ --atomic \
73
+ --timeout 5m0s
74
+
75
+ - language: yaml
76
+ label: 'Upgrade and install combined (helm upgrade --install)'
77
+ code: |
78
+ - name: Deploy chart
79
+ run: |
80
+ # helm upgrade retains --atomic as deprecated in all Helm 4 versions.
81
+ # Use upgrade --install as an alternative that works across Helm 3 and 4:
82
+ helm upgrade --install my-release ./chart \
83
+ --namespace production \
84
+ --atomic \
85
+ --timeout 5m0s
86
+ prevention:
87
+ - "Use `helm upgrade --install` instead of `helm install` when possible — `--atomic` was retained on upgrade in all Helm 4 versions."
88
+ - "Pin Helm versions with `azure/setup-helm` to avoid silent tool version changes when ubuntu-latest migrates to ubuntu-26.04."
89
+ - "Replace `--atomic` with `--rollback-on-failure` in new workflows — this is the Helm 4 canonical flag name."
90
+ - "Run `helm version` as an early step to catch unexpected version jumps before the deployment step."
91
+ docs:
92
+ - url: 'https://github.com/helm/helm/issues/31900'
93
+ label: 'helm/helm#31900 — helm install --atomic no longer works in Helm 4'
94
+ - url: 'https://github.com/helm/helm/pull/31901'
95
+ label: 'helm/helm#31901 — fix: restore deprecated --atomic flag on install for backwards compatibility'
96
+ - url: 'https://helm.sh/docs/topics/v4_migration/'
97
+ label: 'Helm v4 Migration Guide — CLI flag renames'
98
+ - url: 'https://github.com/actions/runner-images/commit/9e3319d6b4acc306925295853d0ff41ddd5c40f0'
99
+ label: 'runner-images commit: ubuntu-26.04 installs Helm 4'
@@ -0,0 +1,111 @@
1
+ id: runner-environment-218
2
+ title: "docker/build-push-action 'load: true' and 'push: true' Are Mutually Exclusive"
3
+ category: runner-environment
4
+ severity: error
5
+ tags:
6
+ - docker
7
+ - build-push-action
8
+ - buildx
9
+ - buildkit
10
+ - load
11
+ - push
12
+ patterns:
13
+ - regex: 'load.{0,20}push cannot be both set|cannot use both --load and --push|load.*push.*incompatible|--load.*--push.*incompatible'
14
+ flags: 'i'
15
+ - regex: "contradictory options given: load and push"
16
+ flags: 'i'
17
+ error_messages:
18
+ - "contradictory options given: load and push cannot be both set at the same time"
19
+ - "ERROR: cannot use both --load and --push flags"
20
+ - "error: '--load' and '--push' cannot be used together"
21
+ - "Error: buildx failed with: error: failed to solve: load and push cannot be both set"
22
+ root_cause: |
23
+ docker/build-push-action (and the underlying docker buildx) does not support
24
+ setting both 'load: true' and 'push: true' in the same build step. These two
25
+ options are mutually exclusive:
26
+
27
+ - 'load: true' exports the built image into the local Docker daemon
28
+ (equivalent to --load / --output type=docker).
29
+ - 'push: true' pushes the image to a remote registry
30
+ (equivalent to --push / --output type=registry).
31
+
32
+ Both flags specify different output targets, and docker buildx cannot satisfy
33
+ both simultaneously with most drivers. The docker-container and kubernetes
34
+ drivers explicitly reject the combination. The docker driver (used without
35
+ explicit driver setup) may silently ignore 'push' in some versions.
36
+
37
+ Common triggers:
38
+ - Copying a workflow snippet that has 'push: true' and adding 'load: true'
39
+ for local testing without removing 'push: true'.
40
+ - Conditional 'push' logic using expressions that evaluate to true at the
41
+ same time as unconditional 'load: true'.
42
+ fix: |
43
+ Use only one of 'load' or 'push' in a single step. To both test locally and
44
+ push to a registry, split the build into two separate steps, or use
45
+ conditional logic so only one output target is active at a time.
46
+
47
+ The idiomatic pattern is:
48
+ - Set 'push: ${{ github.ref == 'refs/heads/main' }}' to push only on
49
+ default branch, and omit 'load:' entirely (or use a separate step for
50
+ local testing).
51
+ - To load the image for integration tests AND push on main, build twice:
52
+ once with 'load: true' for tests, once with 'push: true' for release.
53
+ - Use build outputs caching (cache-from/cache-to) so the second build
54
+ is fast.
55
+ fix_code:
56
+ - language: yaml
57
+ label: "Wrong — load and push both true (fails)"
58
+ code: |
59
+ - name: Build and push
60
+ uses: docker/build-push-action@v6
61
+ with:
62
+ context: .
63
+ load: true # ❌ Incompatible with push: true
64
+ push: true # ❌ Incompatible with load: true
65
+ tags: myrepo/myimage:latest
66
+
67
+ - language: yaml
68
+ label: "Fixed — push conditionally, no load"
69
+ code: |
70
+ - name: Build and push
71
+ uses: docker/build-push-action@v6
72
+ with:
73
+ context: .
74
+ push: ${{ github.ref == 'refs/heads/main' }}
75
+ tags: myrepo/myimage:latest
76
+
77
+ - language: yaml
78
+ label: "Fixed — load for tests, push separately on main"
79
+ code: |
80
+ - name: Build image for integration tests
81
+ uses: docker/build-push-action@v6
82
+ with:
83
+ context: .
84
+ load: true # ✅ load only — no push
85
+ tags: myrepo/myimage:test
86
+
87
+ - name: Run integration tests
88
+ run: docker run --rm myrepo/myimage:test ./run-tests.sh
89
+
90
+ - name: Push to registry (main branch only)
91
+ if: github.ref == 'refs/heads/main'
92
+ uses: docker/build-push-action@v6
93
+ with:
94
+ context: .
95
+ push: true # ✅ push only — no load
96
+ tags: myrepo/myimage:latest
97
+ cache-from: type=gha
98
+ cache-to: type=gha,mode=max
99
+
100
+ prevention:
101
+ - "Never set both 'load: true' and 'push: true' in the same build-push-action step."
102
+ - "Use 'push: ${{ condition }}' expression to conditionally push; omit 'load' in the same step."
103
+ - "If you need the image locally for testing and also want to push, use two separate steps."
104
+ - "Review docker/build-push-action README — the compatibility matrix for load, push, and outputs is documented."
105
+ docs:
106
+ - url: "https://github.com/docker/build-push-action#inputs"
107
+ label: "docker/build-push-action — inputs reference (load, push, outputs)"
108
+ - url: "https://docs.docker.com/build/building/export/"
109
+ label: "Docker Buildx — build output types (load vs push)"
110
+ - url: "https://github.com/docker/build-push-action/blob/master/README.md#multi-platform-image"
111
+ label: "docker/build-push-action — multi-platform and output guidance"
@@ -0,0 +1,119 @@
1
+ id: silent-failures-109
2
+ title: 'electron-forge make Silently Exits 0 on Node.js 24.16.0+ — No .exe, No Error'
3
+ category: silent-failures
4
+ severity: silent-failure
5
+ tags:
6
+ - electron-forge
7
+ - nodejs
8
+ - node24
9
+ - extract-zip
10
+ - toolcache
11
+ - regression
12
+ - windows
13
+ - packaging
14
+ patterns:
15
+ - regex: 'Invalid input file path.{0,80}\.exe'
16
+ flags: 'i'
17
+ - regex: 'Finalizing package\s*$'
18
+ flags: 'im'
19
+ - regex: 'electron-forge make.{0,60}exit(?:ed)? (?:with )?(?:code )?0'
20
+ flags: 'i'
21
+ - regex: 'exec\: node\: not found'
22
+ flags: 'i'
23
+ error_messages:
24
+ - 'Error: Invalid input file path - apps/desktop/out/<AppName>-win32-x64/<App>.exe'
25
+ - '❯ Finalizing package'
26
+ - 'exec: node: not found'
27
+ - '> Packaging for x64 on win32'
28
+ root_cause: |
29
+ On the ubuntu-24.04 image update from 20260518.149.1 → 20260525.161.1 and
30
+ the Windows Server 2022/2025 image update from 20260518 → 20260525, the
31
+ cached Node.js toolcache version was bumped from 24.15.0 to 24.16.0. Node.js
32
+ 24.16.0 contains an upstream regression in the readable-stream.destroy()
33
+ lifecycle that breaks yauzl (a ZIP reading library) and extract-zip which
34
+ depends on it.
35
+
36
+ `electron-forge make` uses extract-zip internally during the "Finalizing
37
+ package" phase to extract the Electron binary archive. When running under
38
+ Node.js 24.16.0 or 26.1.0+, the forge process:
39
+ 1. Enters all packaging subtasks within ~5 ms (each spinner shows up instantly)
40
+ 2. Exits with code 0 — no checkmarks, no error, no output
41
+ 3. Produces no .exe in `out/<AppName>-win32-x64/`
42
+
43
+ The same regression affects other tools that use extract-zip internally:
44
+ - jsvu (JS engine version updater)
45
+ - Any npm package that has not yet migrated away from the 6-year-old
46
+ unmaintained extract-zip package
47
+
48
+ The affected subtasks (Copying files → Preparing native dependencies →
49
+ Finalizing package) complete within milliseconds instead of minutes, which
50
+ is the visible telltale sign — none receive a ✓ checkmark.
51
+
52
+ Upstream issues:
53
+ - https://github.com/nodejs/node/issues/63487 (yauzl/extract-zip partial extraction)
54
+ - https://github.com/nodejs/node/issues/63638 (libuv regression on Windows)
55
+ - https://github.com/electron/forge/issues/4277
56
+ fix: |
57
+ Pin Node.js to 24.15.0 (last unaffected 24.x release) until Node.js 24.17.0
58
+ ships the upstream fix and it is rolled into the runner toolcache via
59
+ actions/node-versions:
60
+
61
+ - uses: actions/setup-node@v6
62
+ with:
63
+ node-version: '24.15.0'
64
+
65
+ Alternatively, downgrade to Node.js 22 LTS which is unaffected:
66
+
67
+ - uses: actions/setup-node@v6
68
+ with:
69
+ node-version: '22'
70
+
71
+ For jsvu users, the same pin applies. Track the upstream fix at
72
+ https://github.com/nodejs/node/issues/63487 and
73
+ https://github.com/electron/forge/issues/4277 for when to unpin.
74
+ fix_code:
75
+ - language: yaml
76
+ label: 'Pin Node.js to 24.15.0 until extract-zip regression is fixed'
77
+ code: |
78
+ steps:
79
+ - uses: actions/checkout@v6
80
+
81
+ - name: Set up Node.js (pin to last unaffected 24.x)
82
+ uses: actions/setup-node@v6
83
+ with:
84
+ node-version: '24.15.0' # 24.16.0+ breaks extract-zip / electron-forge
85
+ cache: 'npm'
86
+
87
+ - name: Install dependencies
88
+ run: npm ci
89
+
90
+ - name: Package (electron-forge)
91
+ run: npx electron-forge make --platform win32 --arch x64
92
+ - language: yaml
93
+ label: 'Fallback to Node.js 22 LTS (unaffected by regression)'
94
+ code: |
95
+ steps:
96
+ - uses: actions/setup-node@v6
97
+ with:
98
+ node-version: '22' # LTS — unaffected by 24.16.0 extract-zip regression
99
+ prevention:
100
+ - 'Pin exact Node.js minor versions in actions/setup-node — semver ranges like
101
+ "24" silently upgrade to patch/minor releases that may carry regressions.'
102
+ - 'Watch https://github.com/nodejs/node/issues/63487 and
103
+ https://github.com/electron/forge/issues/4277 for when the regression is
104
+ fixed in both Node.js upstream and electron-forge itself.'
105
+ - 'If forge make exits 0 but produces no output files, check whether the Node.js
106
+ version in use is >=24.16.0 or >=26.1.0 — the silent exit is the diagnostic.'
107
+ - 'Consider using a lock-file approach: pin node-version in setup-node AND add
108
+ a post-step assertion that the expected .exe exists before continuing.'
109
+ docs:
110
+ - url: 'https://github.com/nodejs/node/issues/63487'
111
+ label: 'nodejs/node #63487 — yauzl/extract-zip hang and partial extraction (readable-stream regression)'
112
+ - url: 'https://github.com/nodejs/node/issues/63638'
113
+ label: 'nodejs/node #63638 — libuv regression in Node.js 24.16.0 on Windows'
114
+ - url: 'https://github.com/electron/forge/issues/4277'
115
+ label: 'electron/forge #4277 — make exits 0 silently on Node.js 24.16.0 / extract-zip regression'
116
+ - url: 'https://github.com/actions/runner-images/issues/14174'
117
+ label: 'runner-images #14174 — Windows 2022/2025 May 25 image: electron-forge make silent exit'
118
+ - url: 'https://github.com/actions/runner-images/issues/14173'
119
+ label: 'runner-images #14173 — Puppeteer broken in ubuntu-24.04 20260525 (same root cause)'