@htekdev/actions-debugger 1.0.114 → 1.0.116
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/errors/concurrency-timing/concurrency-timing-053.yml +83 -0
- package/errors/known-unsolved/known-unsolved-062.yml +87 -0
- package/errors/known-unsolved/runner-rest-api-busy-false-broker-state-desync.yml +102 -0
- package/errors/permissions-auth/upload-code-coverage-missing-code-quality-write-permission.yml +94 -0
- package/errors/runner-environment/arc-ephemeral-runner-oom-kill-session-conflict.yml +129 -0
- package/errors/runner-environment/macos-26-homebrew-python313-removed-stdlib-modules.yml +113 -0
- package/errors/runner-environment/macos-26-openssl3-legacy-cipher-p12-import-failure.yml +102 -0
- package/errors/runner-environment/runner-environment-199.yml +93 -0
- package/errors/runner-environment/runner-v2334-action-download-repeated-case-sensitivity.yml +100 -0
- package/errors/runner-environment/setup-python-macos-self-hosted-symlink-permission-denied.yml +94 -0
- package/errors/runner-environment/setup-python-windows-self-hosted-no-admin-install-fails.yml +101 -0
- package/errors/silent-failures/paths-filter-before-field-missing-workflow-run.yml +105 -0
- package/errors/silent-failures/windows-11-arm-bash-shell-intermittent-zero-output.yml +99 -0
- package/errors/triggers/triggers-069.yml +100 -0
- package/errors/yaml-syntax/continue-on-error-inputs-composite-action-unexpected-value.yml +110 -0
- package/package.json +1 -1
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
id: silent-failures-106
|
|
2
|
+
title: 'windows-11-arm shell: bash Steps Intermittently Produce Zero Output and Exit 0'
|
|
3
|
+
category: silent-failures
|
|
4
|
+
severity: silent-failure
|
|
5
|
+
tags:
|
|
6
|
+
- windows-11-arm
|
|
7
|
+
- bash
|
|
8
|
+
- composite-action
|
|
9
|
+
- arm64
|
|
10
|
+
- wow64
|
|
11
|
+
- silent-failure
|
|
12
|
+
- intermittent
|
|
13
|
+
patterns:
|
|
14
|
+
- regex: 'error: no such command: `[a-z]'
|
|
15
|
+
flags: 'i'
|
|
16
|
+
- regex: 'error: no such subcommand: `[a-z]'
|
|
17
|
+
flags: 'i'
|
|
18
|
+
- regex: 'error\[E0463\]: can''t find crate for `[a-z]'
|
|
19
|
+
flags: 'i'
|
|
20
|
+
error_messages:
|
|
21
|
+
- 'error: no such command: `make`'
|
|
22
|
+
- 'error: no such command: `expand`'
|
|
23
|
+
- 'error: no such subcommand: `make`'
|
|
24
|
+
root_cause: |
|
|
25
|
+
On `windows-11-arm` runners, `shell: bash` resolves to `C:\Program Files\Git\bin\bash.EXE`,
|
|
26
|
+
which is an x86_64 binary running under WoW64 (Windows-on-Windows 64-bit) ARM64
|
|
27
|
+
emulation. The `actions/runner` binary on this platform is a **native ARM64** process.
|
|
28
|
+
When the native ARM64 runner spawns the x86_64 bash.EXE as a child process, an
|
|
29
|
+
intermittent failure in the WoW64 cross-architecture process launch causes the bash
|
|
30
|
+
process to start but never execute its script body. The step logs the command invocation
|
|
31
|
+
and environment dump, then exits 0 with zero script output — the script never ran.
|
|
32
|
+
|
|
33
|
+
Key characteristics:
|
|
34
|
+
- Failure is transient per-process-invocation: two consecutive bash steps in the same
|
|
35
|
+
job can have one succeed and one fail, ruling out image or runner misconfiguration.
|
|
36
|
+
- Zero-output steps take 0-3 seconds; successful steps take 2-7 seconds.
|
|
37
|
+
- Only occurs on `windows-11-arm`; `windows-latest` (amd64) is unaffected.
|
|
38
|
+
- The downstream step then fails with "no such command" or "not installed" errors because
|
|
39
|
+
the tool that was supposed to be installed by the bash step is missing.
|
|
40
|
+
- Reported across multiple independent Microsoft repositories
|
|
41
|
+
(microsoft/Windows-rust-driver-samples, microsoft/windows-drivers-rs), confirming
|
|
42
|
+
this is a platform-level runner bug, not a workflow configuration issue.
|
|
43
|
+
|
|
44
|
+
Root cause: intermittent x86_64 process execution failure under ARM64 WoW64 emulation
|
|
45
|
+
when launched from a native ARM64 parent process. No fix from the platform side as of
|
|
46
|
+
April 2026; actions/runner issue is open in partner-runner-images.
|
|
47
|
+
fix: |
|
|
48
|
+
Option 1 (recommended): invoke bash from PowerShell as a workaround. Wrapping the bash
|
|
49
|
+
call in a pwsh step bypasses the native-arm64 → x86_64 WoW64 launch that triggers the
|
|
50
|
+
bug, because PowerShell on windows-11-arm is itself x86_64, so spawning x86_64 bash
|
|
51
|
+
from x86_64 pwsh does not cross the ARM64/x86_64 boundary:
|
|
52
|
+
|
|
53
|
+
- name: Run script via pwsh workaround
|
|
54
|
+
shell: pwsh
|
|
55
|
+
run: |
|
|
56
|
+
$result = & 'C:\Program Files\Git\bin\bash.EXE' -c "./your-script.sh"
|
|
57
|
+
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
|
58
|
+
|
|
59
|
+
Option 2: use `shell: pwsh` for the entire step and rewrite the logic in PowerShell.
|
|
60
|
+
|
|
61
|
+
Option 3: add a retry wrapper that re-runs the composite action step if the output
|
|
62
|
+
is unexpectedly empty (e.g. check for absence of the installed binary before proceeding
|
|
63
|
+
and re-invoke if missing).
|
|
64
|
+
|
|
65
|
+
Option 4: avoid `windows-11-arm` in the runner matrix until the platform bug is fixed
|
|
66
|
+
upstream, or pin to `windows-latest` (amd64) for bash-heavy composite actions.
|
|
67
|
+
fix_code:
|
|
68
|
+
- language: yaml
|
|
69
|
+
label: 'Invoke bash from pwsh to avoid the WoW64 ARM64 launch bug'
|
|
70
|
+
code: |
|
|
71
|
+
- name: Install tool (windows-11-arm workaround)
|
|
72
|
+
shell: pwsh
|
|
73
|
+
run: |
|
|
74
|
+
# Call x86_64 bash from x86_64 pwsh — avoids native-arm64 → x86_64 WoW64 issue
|
|
75
|
+
& 'C:\Program Files\Git\bin\bash.EXE' --noprofile --norc `
|
|
76
|
+
"${env:GITHUB_ACTION_PATH}/main.sh"
|
|
77
|
+
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
|
78
|
+
- language: yaml
|
|
79
|
+
label: 'Exclude windows-11-arm from bash-heavy matrix jobs'
|
|
80
|
+
code: |
|
|
81
|
+
jobs:
|
|
82
|
+
build:
|
|
83
|
+
strategy:
|
|
84
|
+
matrix:
|
|
85
|
+
os: [windows-latest, ubuntu-latest, macos-latest]
|
|
86
|
+
# windows-11-arm excluded: shell: bash intermittent zero-output bug
|
|
87
|
+
# See: https://github.com/actions/partner-runner-images/issues/169
|
|
88
|
+
prevention:
|
|
89
|
+
- 'Test composite actions on windows-11-arm at scale before relying on them in production CI.'
|
|
90
|
+
- 'Add post-step verification that checks for the installed binary; fail explicitly rather than silently continuing.'
|
|
91
|
+
- 'Monitor taiki-e/install-action release notes for the official workaround (pwsh retry wrapper) if using that action.'
|
|
92
|
+
- 'Prefer shell: pwsh over shell: bash for setup/install scripts in composite actions targeting windows-11-arm.'
|
|
93
|
+
docs:
|
|
94
|
+
- url: 'https://github.com/actions/partner-runner-images/issues/169'
|
|
95
|
+
label: '[windows-11-arm] Composite action bash steps intermittently produce zero output and exit 0'
|
|
96
|
+
- url: 'https://github.com/taiki-e/install-action/issues/1562'
|
|
97
|
+
label: 'On windows-11-arm, sometimes does nothing, but succeeds'
|
|
98
|
+
- url: 'https://github.com/taiki-e/install-action/pull/1647'
|
|
99
|
+
label: 'Call main.sh from pwsh on Windows to work around windows-11-arm runner bug'
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
id: triggers-069
|
|
2
|
+
title: 'push tags: filter silently stops all branch-push triggers — branches: filter must be added separately to also run on branch commits'
|
|
3
|
+
category: triggers
|
|
4
|
+
severity: silent-failure
|
|
5
|
+
tags:
|
|
6
|
+
- push
|
|
7
|
+
- tags-filter
|
|
8
|
+
- branches
|
|
9
|
+
- silent-failure
|
|
10
|
+
- trigger-missing
|
|
11
|
+
- filter-whitelist
|
|
12
|
+
patterns:
|
|
13
|
+
- regex: 'on:\s*\n\s+push:\s*\n\s+tags:'
|
|
14
|
+
flags: 'i'
|
|
15
|
+
error_messages: []
|
|
16
|
+
root_cause: |
|
|
17
|
+
When a workflow specifies on: push: with only a tags: filter and no branches: filter,
|
|
18
|
+
ALL branch push events are silently excluded. The workflow fires exclusively on tag
|
|
19
|
+
pushes matching the tags: pattern.
|
|
20
|
+
|
|
21
|
+
This contradicts the common mental model that tags: adds an extra "also trigger on
|
|
22
|
+
these tags" condition on top of the default "trigger on all branch pushes" behavior.
|
|
23
|
+
In reality, any filter key under on: push: (branches:, tags:, branches-ignore:,
|
|
24
|
+
tags-ignore:, paths:) replaces the implicit "trigger on everything" default with a
|
|
25
|
+
whitelist. Specifying tags: without branches: means only tags match.
|
|
26
|
+
|
|
27
|
+
A workflow with:
|
|
28
|
+
on:
|
|
29
|
+
push:
|
|
30
|
+
tags:
|
|
31
|
+
- 'v*'
|
|
32
|
+
|
|
33
|
+
will never fire when code is pushed to main, feature branches, or any other branch.
|
|
34
|
+
If the team also needs CI on commits to main or pull request merges, a separate
|
|
35
|
+
branches: filter is required in the same on: push: block.
|
|
36
|
+
|
|
37
|
+
This is the inverse of the documented "branches: filter does not block tag pushes"
|
|
38
|
+
behavior (triggers-055). Both stem from the same whitelist-per-filter-key design.
|
|
39
|
+
fix: |
|
|
40
|
+
Add an explicit branches: filter alongside tags: to restore branch-push triggering:
|
|
41
|
+
|
|
42
|
+
on:
|
|
43
|
+
push:
|
|
44
|
+
branches:
|
|
45
|
+
- main
|
|
46
|
+
tags:
|
|
47
|
+
- 'v*'
|
|
48
|
+
|
|
49
|
+
If only tag-based triggering is intended (e.g., a release workflow), the original
|
|
50
|
+
configuration is correct. Document the intent clearly so future maintainers do not
|
|
51
|
+
accidentally add branches: thinking CI was "broken".
|
|
52
|
+
|
|
53
|
+
To trigger on ALL branch pushes plus specific tags, omit branches: from on: push:
|
|
54
|
+
and add a separate on: push: tags: entry — but note that on: push: without filters
|
|
55
|
+
and on: push: tags: cannot coexist in the same block; split into two trigger blocks
|
|
56
|
+
using pull_request for branch coverage and push: tags: for tags.
|
|
57
|
+
fix_code:
|
|
58
|
+
- language: yaml
|
|
59
|
+
label: 'Bug: tags: filter silently excludes all branch-push events'
|
|
60
|
+
code: |
|
|
61
|
+
on:
|
|
62
|
+
push:
|
|
63
|
+
tags:
|
|
64
|
+
- 'v*'
|
|
65
|
+
# Workflow NEVER runs on branch pushes — only fires when a v* tag is pushed
|
|
66
|
+
- language: yaml
|
|
67
|
+
label: 'Fix: add branches: filter to also run on branch commits'
|
|
68
|
+
code: |
|
|
69
|
+
on:
|
|
70
|
+
push:
|
|
71
|
+
branches:
|
|
72
|
+
- main
|
|
73
|
+
- 'release/**'
|
|
74
|
+
tags:
|
|
75
|
+
- 'v*'
|
|
76
|
+
|
|
77
|
+
jobs:
|
|
78
|
+
ci:
|
|
79
|
+
runs-on: ubuntu-latest
|
|
80
|
+
steps:
|
|
81
|
+
- uses: actions/checkout@v4
|
|
82
|
+
- run: make test
|
|
83
|
+
- language: yaml
|
|
84
|
+
label: 'Intentional tag-only release workflow (correct if branch CI is handled in a separate workflow)'
|
|
85
|
+
code: |
|
|
86
|
+
# release.yml — intentionally runs only on release tags
|
|
87
|
+
on:
|
|
88
|
+
push:
|
|
89
|
+
tags:
|
|
90
|
+
- 'v[0-9]+.[0-9]+.[0-9]+'
|
|
91
|
+
prevention:
|
|
92
|
+
- 'Remember that any filter key under on: push: creates a whitelist — adding tags: without branches: stops all branch-push triggers silently'
|
|
93
|
+
- 'Keep release tag workflows in a dedicated file (release.yml) separate from branch-CI workflows (ci.yml) to avoid accidentally merging their trigger logic'
|
|
94
|
+
- 'After adding a tags: filter to an existing workflow, push a test commit to a branch and verify the workflow appears in the Actions tab'
|
|
95
|
+
- 'Use nektos/act or GitHub Actions VS Code extension to preview which events match a workflow trigger before merging'
|
|
96
|
+
docs:
|
|
97
|
+
- url: 'https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#push'
|
|
98
|
+
label: 'GitHub Docs: push event filters'
|
|
99
|
+
- url: 'https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#onpushbranchestagsbranches-ignoretags-ignore'
|
|
100
|
+
label: 'GitHub Docs: Workflow syntax — on.push filter keys'
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
id: yaml-syntax-070
|
|
2
|
+
title: "continue-on-error expression using inputs.* silently resolves null at composite action call site \u2014 \"Unexpected value ''\""
|
|
3
|
+
category: yaml-syntax
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- continue-on-error
|
|
7
|
+
- composite-actions
|
|
8
|
+
- inputs-context
|
|
9
|
+
- expression-scoping
|
|
10
|
+
- template-validation
|
|
11
|
+
patterns:
|
|
12
|
+
- regex: 'Unexpected value\s+''''$'
|
|
13
|
+
flags: 'i'
|
|
14
|
+
- regex: 'error.*determining.*continue on error'
|
|
15
|
+
flags: 'i'
|
|
16
|
+
- regex: 'The template is not valid.*Unexpected value\s+'''
|
|
17
|
+
flags: 'i'
|
|
18
|
+
error_messages:
|
|
19
|
+
- "Error: .github/workflows/test.yml (Line: N, Col: N): Unexpected value ''"
|
|
20
|
+
- 'Error: The step failed and an error occurred when attempting to determine whether to continue on error.'
|
|
21
|
+
- "Error: The template is not valid. .github/workflows/test.yml (Line: N, Col: N): Unexpected value ''"
|
|
22
|
+
root_cause: |
|
|
23
|
+
When continue-on-error on a uses: step that calls a composite action contains an
|
|
24
|
+
expression referencing inputs.*, the expression is evaluated inside the composite
|
|
25
|
+
action context — not the calling workflow context. Inside the composite action,
|
|
26
|
+
inputs refers to the composite action''s own declared inputs, not the caller''s
|
|
27
|
+
workflow_dispatch inputs or other workflow-level inputs.
|
|
28
|
+
|
|
29
|
+
If the composite action does not declare that input, inputs.my_flag resolves to
|
|
30
|
+
null, which becomes an empty string in the expression context. The runner then
|
|
31
|
+
tries to parse the empty string as a boolean and emits:
|
|
32
|
+
|
|
33
|
+
Error: Unexpected value ''
|
|
34
|
+
|
|
35
|
+
followed by:
|
|
36
|
+
|
|
37
|
+
Error: The step failed and an error occurred when attempting to determine
|
|
38
|
+
whether to continue on error.
|
|
39
|
+
|
|
40
|
+
The workflow then halts at that step regardless of what the caller intended.
|
|
41
|
+
|
|
42
|
+
This context-crossing is unique to uses: steps (composite actions). For run:
|
|
43
|
+
steps in the same job, inputs.my_flag evaluates in the workflow context and
|
|
44
|
+
works correctly with continue-on-error.
|
|
45
|
+
fix: |
|
|
46
|
+
Replace inputs.* with github.event.inputs.* in the continue-on-error expression
|
|
47
|
+
when calling composite actions from a workflow_dispatch event. github.event.inputs
|
|
48
|
+
is evaluated in the workflow/runner context before the composite action is entered,
|
|
49
|
+
so it resolves correctly.
|
|
50
|
+
|
|
51
|
+
Alternatively, capture the input as a job-level env or step output and reference
|
|
52
|
+
the env var or step output in the continue-on-error expression.
|
|
53
|
+
fix_code:
|
|
54
|
+
- language: yaml
|
|
55
|
+
label: 'Bug: inputs.continue resolves to null inside composite action context'
|
|
56
|
+
code: |
|
|
57
|
+
on:
|
|
58
|
+
workflow_dispatch:
|
|
59
|
+
inputs:
|
|
60
|
+
continue:
|
|
61
|
+
type: boolean
|
|
62
|
+
default: false
|
|
63
|
+
|
|
64
|
+
jobs:
|
|
65
|
+
test:
|
|
66
|
+
runs-on: ubuntu-latest
|
|
67
|
+
steps:
|
|
68
|
+
- uses: my-org/fail-action@main
|
|
69
|
+
# inputs.continue resolves to null here — "Unexpected value ''"
|
|
70
|
+
continue-on-error: ${{ github.event_name == 'workflow_dispatch' && inputs.continue }}
|
|
71
|
+
- language: yaml
|
|
72
|
+
label: 'Fix: use github.event.inputs.* instead of inputs.* in continue-on-error on uses: steps'
|
|
73
|
+
code: |
|
|
74
|
+
on:
|
|
75
|
+
workflow_dispatch:
|
|
76
|
+
inputs:
|
|
77
|
+
continue:
|
|
78
|
+
type: boolean
|
|
79
|
+
default: false
|
|
80
|
+
|
|
81
|
+
jobs:
|
|
82
|
+
test:
|
|
83
|
+
runs-on: ubuntu-latest
|
|
84
|
+
steps:
|
|
85
|
+
- uses: my-org/fail-action@main
|
|
86
|
+
# github.event.inputs evaluates in workflow context, not composite context
|
|
87
|
+
continue-on-error: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.continue == 'true' }}
|
|
88
|
+
- language: yaml
|
|
89
|
+
label: 'Alternative fix: pre-evaluate the flag into an env var'
|
|
90
|
+
code: |
|
|
91
|
+
jobs:
|
|
92
|
+
test:
|
|
93
|
+
runs-on: ubuntu-latest
|
|
94
|
+
env:
|
|
95
|
+
SHOULD_CONTINUE: ${{ inputs.continue }}
|
|
96
|
+
steps:
|
|
97
|
+
- uses: my-org/fail-action@main
|
|
98
|
+
continue-on-error: ${{ env.SHOULD_CONTINUE == 'true' }}
|
|
99
|
+
prevention:
|
|
100
|
+
- 'Never reference inputs.* in continue-on-error on a uses: step — use github.event.inputs.* for workflow_dispatch inputs or env.* for pre-evaluated values'
|
|
101
|
+
- 'Remember that expression contexts differ between run: steps (workflow context) and uses: composite action steps (composite context)'
|
|
102
|
+
- 'Test continue-on-error with expressions locally using nektos/act before merging to catch context-crossing issues'
|
|
103
|
+
- 'If a composite action needs conditional behavior, declare it as an explicit composite input and pass the value from the caller'
|
|
104
|
+
docs:
|
|
105
|
+
- url: 'https://github.com/actions/runner/issues/2418'
|
|
106
|
+
label: 'GitHub runner#2418: continue-on-error with inputs variables in composite actions (bug, 12 reactions)'
|
|
107
|
+
- url: 'https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/evaluate-expressions-in-workflows-and-actions#context-availability'
|
|
108
|
+
label: 'GitHub Docs: Expression context availability'
|
|
109
|
+
- url: 'https://docs.github.com/en/actions/sharing-automations/creating-actions/creating-a-composite-action'
|
|
110
|
+
label: 'GitHub Docs: Creating a composite action'
|
package/package.json
CHANGED