@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,91 @@
1
+ id: silent-failures-110
2
+ title: 'setup-node v6 cache:npm silently aborts entire Windows job when npm cache directory does not exist'
3
+ category: silent-failures
4
+ severity: silent-failure
5
+ tags:
6
+ - setup-node
7
+ - windows
8
+ - npm
9
+ - cache
10
+ - silent-failure
11
+ - fresh-runner
12
+ - npm-cache-path
13
+ patterns:
14
+ - regex: 'Found in cache.*\n(?:.*\n){0,5}Post job cleanup'
15
+ flags: 'im'
16
+ - regex: 'npm config get cache.*\n(?:.*\n){0,3}(?:Detected npm|Auto caching)'
17
+ flags: 'im'
18
+ - regex: 'setup-node.*cache.*npm.*windows.*abort'
19
+ flags: 'i'
20
+ error_messages:
21
+ - 'Found in cache @ C:\hostedtoolcache\windows\node\22...'
22
+ - 'Detected npm as the package manager from package.json'
23
+ - 'Auto caching has been enabled for npm.'
24
+ root_cause: |
25
+ actions/setup-node@v6 with `cache: 'npm'` (or auto-detected npm caching when
26
+ package.json has `packageManager: npm`) calls `npm config get cache` to locate the
27
+ npm cache directory before registering it with actions/cache.
28
+
29
+ On fresh Windows runners (hosted or self-hosted), `C:\npm\cache` does not yet exist
30
+ because no prior npm install has run in this workspace. The Node.js process executing
31
+ `npm config get cache` internally tries to initialise the npm config directory and
32
+ hits an EEXIST or missing-parent-directory race in npm's cache initialisation code
33
+ (npm/cli#7308). The runner process exits after ~24 seconds with no error message and
34
+ no non-zero exit code.
35
+
36
+ The result: every step AFTER setup-node is silently skipped. The job shows as
37
+ "Success" or the failure appears much later in a confusing step, making this
38
+ extremely hard to diagnose.
39
+
40
+ Affected versions: actions/setup-node@v6.4.0+; most frequently seen on
41
+ `windows-latest` and `windows-2025` hosted runners.
42
+ fix: |
43
+ Remove `cache: 'npm'` from setup-node on Windows runners and handle npm caching
44
+ separately using actions/cache pointing at `~/.npm` or the correct Windows path.
45
+
46
+ Alternatively, run a no-op npm command before setup-node to force-create the cache
47
+ directory (not recommended as a long-term fix).
48
+
49
+ If npm caching is needed, use setup-node without `cache:` and add an explicit
50
+ actions/cache step after npm install has run at least once.
51
+ fix_code:
52
+ - language: yaml
53
+ label: 'Remove cache:npm from setup-node; handle caching separately'
54
+ code: |
55
+ - uses: actions/setup-node@v6
56
+ with:
57
+ node-version: '22'
58
+ # Do NOT set cache: 'npm' on Windows — it silently aborts on fresh runners
59
+
60
+ - name: Get npm cache dir
61
+ id: npm-cache-dir
62
+ shell: pwsh
63
+ run: echo "dir=$(npm config get cache)" >> $env:GITHUB_OUTPUT
64
+
65
+ - uses: actions/cache@v4
66
+ with:
67
+ path: ${{ steps.npm-cache-dir.outputs.dir }}
68
+ key: ${{ runner.os }}-npm-${{ hashFiles('**/package-lock.json') }}
69
+ restore-keys: |
70
+ ${{ runner.os }}-npm-
71
+
72
+ - run: npm ci
73
+ - language: yaml
74
+ label: 'Cross-platform: use cache:npm only on non-Windows'
75
+ code: |
76
+ - uses: actions/setup-node@v6
77
+ with:
78
+ node-version: '22'
79
+ cache: ${{ runner.os != 'Windows' && 'npm' || '' }}
80
+ prevention:
81
+ - 'Never set cache: npm in setup-node for Windows-targeted jobs without verifying the npm cache directory pre-exists.'
82
+ - 'When targeting multiple OSes with a matrix, conditionally disable cache:npm on Windows runners.'
83
+ - 'After setup-node on Windows, immediately run a trivial npm command (e.g., npm --version) and verify the step succeeds before continuing.'
84
+ - 'Pin setup-node version and watch the changelog for fixes to the Windows npm cache init race.'
85
+ docs:
86
+ - url: 'https://github.com/unslothai/unsloth/pull/5474'
87
+ label: 'unsloth PR #5474 — drop cache:npm from setup-node (silent abort on Windows)'
88
+ - url: 'https://github.com/npm/cli/issues/7308'
89
+ label: 'npm/cli#7308 — EEXIST/missing-dir race in npm cache directory initialisation'
90
+ - url: 'https://github.com/actions/setup-node/issues/1556'
91
+ label: 'setup-node#1556 — setup-node silently falls through on download/extract failure'
@@ -0,0 +1,107 @@
1
+ id: silent-failures-111
2
+ title: '`helm list` shows all release states by default in Helm 4 — scripts silently return unexpected releases'
3
+ category: silent-failures
4
+ severity: silent-failure
5
+ tags:
6
+ - helm
7
+ - helm-4
8
+ - ubuntu-26
9
+ - tool-upgrade
10
+ - output-change
11
+ - deploy-check
12
+ patterns:
13
+ - regex: 'helm list'
14
+ flags: 'i'
15
+ error_messages:
16
+ - '# No error message — helm list exits 0 but returns FAILED/SUPERSEDED/UNINSTALLED releases alongside DEPLOYED ones'
17
+ root_cause: |
18
+ In Helm 3, `helm list` (without flags) only returned releases in the DEPLOYED
19
+ state. To see releases in all states, you had to pass `-a`/`--all`.
20
+
21
+ In Helm 4 (installed on ubuntu-26.04), `helm list` returns releases of ALL
22
+ states by default: DEPLOYED, FAILED, SUPERSEDED, UNINSTALLED, PENDING_INSTALL,
23
+ PENDING_UPGRADE, PENDING_ROLLBACK. The `-a`/`--all` flag was temporarily removed
24
+ (helm/helm#31784) and restored as a deprecated no-op in Helm 4.1.1+.
25
+
26
+ This causes silent failures in two common patterns:
27
+
28
+ 1. **Existence check**: `helm list --filter my-release | grep my-release` returns
29
+ a match even if the release is in a FAILED state, causing a subsequent
30
+ `helm upgrade` to proceed when `helm install` should have been used instead
31
+ (or vice versa).
32
+
33
+ 2. **Release count**: Scripts that count `helm list | wc -l` to assert a number
34
+ of deployed releases now count more releases than expected.
35
+
36
+ 3. **CI deploy gate**: Pipelines that run `helm list` to verify a deployment
37
+ succeeded will see FAILED releases included in output and may incorrectly
38
+ conclude the deployment is present/healthy.
39
+
40
+ No error is thrown — `helm list` exits 0 in all cases. The bug is in the
41
+ consuming script's assumption about Helm 3 behavior.
42
+ fix: |
43
+ Filter `helm list` output explicitly by state using the `--deployed` flag
44
+ or the `--filter`+`--output json` approach to check actual release status.
45
+
46
+ In Helm 4, use `helm status <release>` to get the definitive state of a
47
+ specific release rather than parsing `helm list` output.
48
+ fix_code:
49
+ - language: yaml
50
+ label: 'Use --deployed flag to replicate Helm 3 default behavior'
51
+ code: |
52
+ - name: Check if release is deployed
53
+ run: |
54
+ # Helm 4 on ubuntu-26.04: helm list shows ALL states by default.
55
+ # Use --deployed to replicate Helm 3 default behavior:
56
+ DEPLOYED=$(helm list --deployed --filter "^my-release$" --short)
57
+ if [ -n "$DEPLOYED" ]; then
58
+ echo "Release is deployed — running upgrade"
59
+ helm upgrade my-release ./chart
60
+ else
61
+ echo "No deployed release found — running install"
62
+ helm install my-release ./chart
63
+ fi
64
+
65
+ - language: yaml
66
+ label: 'Use helm status for definitive state check'
67
+ code: |
68
+ - name: Check release status
69
+ run: |
70
+ # helm status exits non-zero if the release does not exist.
71
+ # Use --output json to get machine-parseable state:
72
+ STATUS=$(helm status my-release --output json 2>/dev/null | jq -r '.info.status' || echo "not-found")
73
+ echo "Release status: $STATUS"
74
+ if [ "$STATUS" = "deployed" ]; then
75
+ echo "Healthy — proceeding"
76
+ elif [ "$STATUS" = "failed" ]; then
77
+ echo "Previous install failed — rolling back before upgrade"
78
+ helm rollback my-release 0 # Roll back to last successful
79
+ else
80
+ echo "Installing fresh"
81
+ helm install my-release ./chart
82
+ fi
83
+
84
+ - language: yaml
85
+ label: 'Use helm list --output json for precise state parsing'
86
+ code: |
87
+ - name: List only deployed releases
88
+ run: |
89
+ # Explicitly request only DEPLOYED state, output JSON for safe parsing:
90
+ helm list --deployed --output json | jq '.[] | .name + " (" + .status + ")"'
91
+ # Do NOT rely on: helm list | grep release-name
92
+ # In Helm 4, this matches FAILED/SUPERSEDED releases too.
93
+ prevention:
94
+ - "Never use `helm list | grep <release>` as a deployment check — it matches any release state in Helm 4."
95
+ - "Use `helm list --deployed` or `helm status <release>` for definitive deployed-state checks."
96
+ - "When migrating to ubuntu-26.04, audit all scripts that parse `helm list` output."
97
+ - "Add `--output json` to `helm list` calls and parse `status` field explicitly rather than relying on line-presence checks."
98
+ - "Pin Helm 3 with `azure/setup-helm` if your scripts are not yet Helm 4 compatible."
99
+ docs:
100
+ - url: 'https://github.com/helm/helm/issues/31784'
101
+ label: 'helm/helm#31784 — Breaking change to helm list CLI command in v4'
102
+ - url: 'https://helm.sh/docs/topics/v4_migration/'
103
+ label: 'Helm v4 Migration Guide'
104
+ - url: 'https://helm.sh/docs/helm/helm_list/'
105
+ label: 'helm list command reference'
106
+ - url: 'https://github.com/actions/runner-images/commit/9e3319d6b4acc306925295853d0ff41ddd5c40f0'
107
+ label: 'runner-images commit: ubuntu-26.04 installs Helm 4'
@@ -0,0 +1,93 @@
1
+ id: yaml-syntax-072
2
+ title: 'concurrency queue: max rejected as "Unknown Property" by act and actionlint (May 2026 schema lag)'
3
+ category: yaml-syntax
4
+ severity: error
5
+ tags:
6
+ - concurrency
7
+ - queue
8
+ - act
9
+ - actionlint
10
+ - schema-validation
11
+ - local-ci
12
+ - queue-max
13
+ patterns:
14
+ - regex: 'Unknown Property queue'
15
+ flags: 'i'
16
+ - regex: 'Failed to match concurrency-mapping.*Unknown Property queue'
17
+ flags: 'is'
18
+ - regex: 'concurrency.*queue.*unknown|queue.*max.*schema.*invalid'
19
+ flags: 'i'
20
+ - regex: 'actionlint.*"queue".*unknown key'
21
+ flags: 'i'
22
+ error_messages:
23
+ - "Line: 4 Column 3: Unknown Property queue"
24
+ - "Failed to match concurrency-mapping: Line: 6 Column 3: Unknown Property queue"
25
+ - 'Actions YAML Schema Validation Error detected: Unknown Property queue'
26
+ - 'unknown key "queue" for "concurrency"'
27
+ root_cause: |
28
+ GitHub added the `queue` field to the concurrency block in May 2026 (Changelog:
29
+ "GitHub Actions concurrency groups now allow larger queues"). The new field accepts
30
+ `single` (default — one pending run) or `max` (up to 100 queued runs).
31
+
32
+ Local workflow tooling has not been updated to recognize this field:
33
+
34
+ - **nektos/act ≤0.2.88** — `pkg/schema/workflow_schema.json` defines `concurrency-mapping`
35
+ with only `group` and `cancel-in-progress`. Any workflow using `queue: max` or
36
+ `queue: single` fails immediately at schema validation, before any step runs.
37
+
38
+ - **rhysd/actionlint ≤1.7.8** — the actionlint parser similarly rejects `queue` as an
39
+ unknown concurrency key, blocking pre-commit hooks and CI lint gates.
40
+
41
+ This is a **tooling lag** — the workflow is perfectly valid on GitHub.com and runs
42
+ correctly in hosted runners. The failure only occurs in local development environments
43
+ and CI pipelines that use act or actionlint for pre-flight validation.
44
+
45
+ SchemaStore (github-workflow.json) already encodes the `queue` enum, so VS Code's
46
+ GitHub Actions extension does NOT exhibit this error.
47
+ fix: |
48
+ Until act and actionlint release updated versions with queue support, use one of:
49
+
50
+ 1. Upgrade act to a version that includes PR #6097 (queue schema fix) — check
51
+ github.com/nektos/act for the minimum patched version.
52
+
53
+ 2. Upgrade actionlint to a version that includes the fix for issue #657.
54
+
55
+ 3. Skip schema validation for workflows that use queue (act: add --no-schema-valid flag;
56
+ actionlint: add -ignore 'queue' comment).
57
+
58
+ 4. Temporarily remove queue: max while waiting for local tooling to catch up; GitHub.com
59
+ itself already supports it and local validation is the only blocker.
60
+ fix_code:
61
+ - language: yaml
62
+ label: 'Correct workflow syntax — valid on GitHub.com even if local tools reject it'
63
+ code: |
64
+ concurrency:
65
+ group: ${{ github.workflow }}-${{ github.ref }}
66
+ cancel-in-progress: false
67
+ queue: max # queues up to 100 pending runs instead of cancelling them
68
+ - language: yaml
69
+ label: 'Suppress actionlint error with inline ignore comment'
70
+ code: |
71
+ concurrency:
72
+ group: ${{ github.workflow }}-${{ github.ref }}
73
+ cancel-in-progress: false
74
+ queue: max # actionlint:ignore
75
+ - language: yaml
76
+ label: 'Skip act schema validation flag (temporary workaround)'
77
+ code: |
78
+ # In .actrc or CLI:
79
+ # act --no-schema-validate
80
+ prevention:
81
+ - 'Pin act and actionlint versions in your tooling and monitor their changelogs when GitHub Actions releases new YAML keys.'
82
+ - 'When a workflow is valid on GitHub.com but rejected locally, check if it uses a recently-added key (queue, timezone, etc.) that local tools have not caught up with.'
83
+ - 'Use the SchemaStore github-workflow.json schema in VS Code for real-time validation — it tends to be updated faster than act/actionlint.'
84
+ - 'Do not block PR merges on local-only actionlint errors when the same workflow runs successfully in GitHub Actions CI.'
85
+ docs:
86
+ - url: 'https://github.com/nektos/act/issues/6095'
87
+ label: 'nektos/act#6095 — concurrency.queue fails schema validation (May 2026)'
88
+ - url: 'https://github.com/rhysd/actionlint/issues/657'
89
+ label: 'rhysd/actionlint#657 — unknown key "queue" for concurrency'
90
+ - url: 'https://github.blog/changelog/2026-05-07-github-actions-concurrency-groups-now-allow-larger-queues/'
91
+ label: 'GitHub Changelog — concurrency groups now allow larger queues (May 2026)'
92
+ - url: 'https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#concurrencyqueue'
93
+ label: 'GitHub Docs — concurrency.queue syntax reference'
@@ -0,0 +1,103 @@
1
+ id: yaml-syntax-073
2
+ title: "setup-python 'python-version: 3.10' Parsed as YAML Float 3.1 — Wrong Python Version Installed"
3
+ category: yaml-syntax
4
+ severity: silent-failure
5
+ tags:
6
+ - setup-python
7
+ - yaml-float
8
+ - python-version
9
+ - version-mismatch
10
+ - silent-failure
11
+ patterns:
12
+ - regex: 'Version 3\.1 with arch .{0,20} not found'
13
+ flags: 'i'
14
+ - regex: "Installed Python 3\\.1\\."
15
+ flags: 'i'
16
+ - regex: 'python.version.*3\.10.*3\.1|3\.10.*yaml.*float'
17
+ flags: 'i'
18
+ error_messages:
19
+ - "Version 3.1 with arch x64 not found in the local, remote file."
20
+ - "Version 3.1 with arch x64 not found"
21
+ - "Installed Python 3.1.5"
22
+ - "Error: Version 3.1 was not found in the local cache"
23
+ root_cause: |
24
+ When 'python-version' is specified as a bare unquoted decimal like 3.10
25
+ in a workflow YAML file, the YAML parser interprets the value as a
26
+ floating-point number. The float representation of 3.10 is 3.1 (the
27
+ trailing zero is dropped during float-to-string conversion).
28
+
29
+ actions/setup-python then receives the string "3.1" and attempts to
30
+ install Python version 3.1.x. Python 3.1 is an extremely old release
31
+ from 2009 and is not available in the tool cache. The action either:
32
+
33
+ a) Fails with "Version 3.1 with arch x64 not found" — if the version
34
+ is not in the manifest (common on GitHub-hosted runners).
35
+ b) Silently installs the latest 3.1.x if one happens to be cached,
36
+ giving developers an unexpectedly old Python environment with no
37
+ warning.
38
+
39
+ Affected version strings: any Python version where the minor version
40
+ ends in zero (3.10, 3.20 if it existed, etc.) or has trailing decimal
41
+ zeros (3.10.0 → still has the problem if written unquoted as 3.10).
42
+
43
+ The same YAML float coercion affects other setup-* actions:
44
+ - setup-go with go-version: 1.20 → "1.2" (yaml-syntax-027)
45
+ - setup-node with node-version: 18.10 → "18.1"
46
+ This entry specifically covers setup-python.
47
+ fix: |
48
+ Always quote the python-version value in YAML to force the parser to
49
+ treat it as a string, not a number.
50
+ fix_code:
51
+ - language: yaml
52
+ label: "Wrong — unquoted 3.10 parsed as float 3.1"
53
+ code: |
54
+ - name: Set up Python
55
+ uses: actions/setup-python@v5
56
+ with:
57
+ python-version: 3.10 # ❌ YAML parses as float → installs 3.1.x
58
+
59
+ - language: yaml
60
+ label: "Fixed — quoted string forces correct version"
61
+ code: |
62
+ - name: Set up Python
63
+ uses: actions/setup-python@v5
64
+ with:
65
+ python-version: '3.10' # ✅ Quoted string → installs 3.10.x
66
+
67
+ - language: yaml
68
+ label: "Fixed — matrix with quoted python versions"
69
+ code: |
70
+ jobs:
71
+ test:
72
+ strategy:
73
+ matrix:
74
+ python-version: ['3.9', '3.10', '3.11', '3.12']
75
+ # ^^^^^^ ^^^^^^ ^^^^^^ ^^^^^^
76
+ # All quoted — prevents YAML float coercion for any version
77
+ steps:
78
+ - uses: actions/setup-python@v5
79
+ with:
80
+ python-version: ${{ matrix.python-version }}
81
+
82
+ - language: yaml
83
+ label: "Alternative — use python-version-file to avoid manual version strings"
84
+ code: |
85
+ - uses: actions/setup-python@v5
86
+ with:
87
+ python-version-file: '.python-version'
88
+ # .python-version file contains: 3.10.14
89
+ # File-based version is read as plain text, not YAML — no float risk
90
+
91
+ prevention:
92
+ - "Always quote python-version values in YAML: '3.10' not 3.10."
93
+ - "Use python-version-file: '.python-version' or pyproject.toml to read version from a non-YAML source."
94
+ - "Apply the same quoting rule to all setup-* version inputs: '1.20' for Go, '18.10' for Node."
95
+ - "Run actionlint — it warns about unquoted version strings in matrix definitions."
96
+ - "Check 'Set up Python' step output in the Actions log — it shows the resolved version string."
97
+ docs:
98
+ - url: "https://github.com/actions/setup-python/issues/160"
99
+ label: "actions/setup-python#160 — python-version 3.10 parsed as float 3.1 (109 reactions)"
100
+ - url: "https://yaml.org/spec/1.2.2/#floating-point-scalars"
101
+ label: "YAML spec — floating-point scalar parsing rules"
102
+ - url: "https://github.com/actions/setup-python#supported-version-syntax"
103
+ label: "actions/setup-python — supported version syntax"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@htekdev/actions-debugger",
3
- "version": "1.0.118",
3
+ "version": "1.0.119",
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",