@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.
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@htekdev/actions-debugger",
3
- "version": "1.0.114",
3
+ "version": "1.0.116",
4
4
  "description": "65+ real GitHub Actions errors, queryable by agents. CLI + MCP server + Copilot skills + error database.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",