@htekdev/actions-debugger 1.0.124 → 1.0.126

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.
Files changed (32) hide show
  1. package/errors/caching-artifacts/caching-artifacts-073.yml +100 -0
  2. package/errors/caching-artifacts/caching-artifacts-074.yml +117 -0
  3. package/errors/concurrency-timing/concurrency-timing-059.yml +146 -0
  4. package/errors/concurrency-timing/concurrency-timing-060.yml +144 -0
  5. package/errors/known-unsolved/known-unsolved-071.yml +122 -0
  6. package/errors/known-unsolved/known-unsolved-072.yml +143 -0
  7. package/errors/known-unsolved/known-unsolved-073.yml +172 -0
  8. package/errors/permissions-auth/permissions-auth-071.yml +144 -0
  9. package/errors/permissions-auth/permissions-auth-072.yml +112 -0
  10. package/errors/permissions-auth/permissions-auth-073.yml +127 -0
  11. package/errors/permissions-auth/permissions-auth-074.yml +106 -0
  12. package/errors/permissions-auth/permissions-auth-075.yml +137 -0
  13. package/errors/runner-environment/runner-environment-227.yml +106 -0
  14. package/errors/runner-environment/runner-environment-228.yml +117 -0
  15. package/errors/runner-environment/runner-environment-229.yml +119 -0
  16. package/errors/runner-environment/runner-environment-230.yml +129 -0
  17. package/errors/runner-environment/runner-environment-231.yml +90 -0
  18. package/errors/runner-environment/runner-environment-232.yml +131 -0
  19. package/errors/runner-environment/runner-environment-233.yml +90 -0
  20. package/errors/runner-environment/runner-environment-234.yml +114 -0
  21. package/errors/runner-environment/runner-environment-235.yml +151 -0
  22. package/errors/silent-failures/silent-failures-112.yml +97 -0
  23. package/errors/silent-failures/silent-failures-113.yml +110 -0
  24. package/errors/silent-failures/silent-failures-114.yml +116 -0
  25. package/errors/silent-failures/silent-failures-115.yml +130 -0
  26. package/errors/silent-failures/silent-failures-116.yml +117 -0
  27. package/errors/silent-failures/silent-failures-117.yml +137 -0
  28. package/errors/silent-failures/silent-failures-118.yml +156 -0
  29. package/errors/triggers/triggers-072.yml +150 -0
  30. package/errors/yaml-syntax/yaml-syntax-075.yml +128 -0
  31. package/errors/yaml-syntax/yaml-syntax-076.yml +107 -0
  32. package/package.json +1 -1
@@ -0,0 +1,150 @@
1
+ id: triggers-072
2
+ title: 'Scheduled workflow silently disabled after 60 days of public repository inactivity — distinct from the fork schedule disabling rule'
3
+ category: triggers
4
+ severity: silent-failure
5
+ tags:
6
+ - schedule
7
+ - cron
8
+ - disabled
9
+ - inactivity
10
+ - public-repo
11
+ - silent-disable
12
+ - 60-days
13
+ patterns:
14
+ - regex: 'on:\s*\n\s+schedule:'
15
+ flags: 'im'
16
+ - regex: 'This workflow was disabled'
17
+ flags: 'i'
18
+ - regex: 'Workflow.*disabled.*inactiv'
19
+ flags: 'i'
20
+ error_messages:
21
+ - "This workflow was disabled."
22
+ - "Scheduled workflows are disabled for repositories with no recent activity."
23
+ root_cause: |
24
+ GitHub automatically disables scheduled (`on: schedule:`) workflows in **public
25
+ repositories** that have had no activity for more than **60 days**. "Activity"
26
+ includes pushes, pull requests, issue comments, or other events that generate
27
+ a repository event payload. Pure time-passing without any interaction does not
28
+ reset the timer.
29
+
30
+ The disabling happens silently:
31
+ - No email notification is sent to repository owners or workflow authors.
32
+ - No GitHub notification appears in the repository's notification feed.
33
+ - The scheduled run simply does not appear in the Actions run history.
34
+ - The workflow file is not changed — the `on: schedule:` trigger is still present
35
+ in the YAML, but the schedule is inactive in GitHub's internal scheduler.
36
+
37
+ The Actions tab will show the workflow listed but with a note that it has been
38
+ disabled. The **"Enable workflow"** button must be clicked manually to re-activate it.
39
+
40
+ This behavior is separate from the fork schedule-disabling rule (where ALL
41
+ scheduled workflows are disabled on forked repos regardless of activity). The
42
+ inactivity rule applies to non-fork public repositories.
43
+
44
+ Common scenarios:
45
+ - Maintenance scripts (e.g., weekly dependency updates, cleanup jobs) in repos
46
+ that receive no push activity between runs.
47
+ - Documentation or static-site repos where content is rarely updated but a nightly
48
+ build/deploy workflow is expected to run.
49
+ - Monitoring or alerting workflows in repos with no other CI triggers.
50
+ - Open-source libraries with stable codebases and monthly or quarterly releases.
51
+ fix: |
52
+ **Immediate fix:** Navigate to the repository → Actions tab → find the disabled
53
+ workflow → click "Enable workflow."
54
+
55
+ **Prevent future silent disabling — Option 1 (Recommended): Add a dummy commit
56
+ or workflow_dispatch trigger:**
57
+ Add `workflow_dispatch:` to the workflow so it can be triggered manually and also
58
+ resets the inactivity timer. Then use `gh workflow run` or the UI to manually
59
+ trigger it if needed.
60
+
61
+ **Prevent future silent disabling — Option 2: Artificially keep the repo active:**
62
+ Add a companion workflow that runs on schedule and updates a file (e.g., a
63
+ `last-run.txt` with the current timestamp) via a commit. This creates repository
64
+ activity and resets the 60-day timer. Warning: this generates commit noise.
65
+
66
+ **Prevent future silent disabling — Option 3: Convert to a self-hosted or
67
+ external scheduler:**
68
+ Use an external cron service (e.g., a cron job in a cloud provider) to trigger
69
+ the workflow via `workflow_dispatch` or `repository_dispatch`. External triggers
70
+ count as activity and keep the workflow enabled.
71
+
72
+ **Long-term design:** For workflows that are truly meant to run on a schedule
73
+ without any other repo activity, always add `workflow_dispatch:` as a co-trigger.
74
+ This makes the workflow manually invocable AND provides a path to re-enable it if
75
+ it is ever silently disabled.
76
+ fix_code:
77
+ - language: yaml
78
+ label: 'At-risk — schedule-only workflow in a low-activity public repo'
79
+ code: |
80
+ # ⚠ This workflow will be silently disabled after 60 days with no repo activity
81
+ name: Weekly Dependency Update
82
+
83
+ on:
84
+ schedule:
85
+ - cron: '0 9 * * 1' # Every Monday at 09:00 UTC
86
+
87
+ jobs:
88
+ update:
89
+ runs-on: ubuntu-latest
90
+ steps:
91
+ - uses: actions/checkout@v4
92
+ - run: npm update && npm audit fix
93
+
94
+ - language: yaml
95
+ label: 'Fixed — add workflow_dispatch to keep the workflow manageable and prevent inactivity disable'
96
+ code: |
97
+ name: Weekly Dependency Update
98
+
99
+ on:
100
+ schedule:
101
+ - cron: '0 9 * * 1' # Every Monday at 09:00 UTC
102
+ workflow_dispatch: # ✅ Allows manual trigger; manual runs also reset the inactivity timer
103
+
104
+ jobs:
105
+ update:
106
+ runs-on: ubuntu-latest
107
+ steps:
108
+ - uses: actions/checkout@v4
109
+ - run: npm update && npm audit fix
110
+
111
+ - language: yaml
112
+ label: 'Alternative — heartbeat workflow that commits a timestamp to keep the repo active'
113
+ code: |
114
+ name: Activity Heartbeat (prevents schedule auto-disable)
115
+
116
+ on:
117
+ schedule:
118
+ - cron: '0 0 * * 0' # Every Sunday midnight UTC — reset 60-day timer
119
+ workflow_dispatch:
120
+
121
+ permissions:
122
+ contents: write
123
+
124
+ jobs:
125
+ heartbeat:
126
+ runs-on: ubuntu-latest
127
+ steps:
128
+ - uses: actions/checkout@v4
129
+ - name: Update heartbeat timestamp
130
+ run: |
131
+ echo "$(date -u +%Y-%m-%dT%H:%M:%SZ)" > .github/heartbeat.txt
132
+ git config user.name 'github-actions[bot]'
133
+ git config user.email '41898282+github-actions[bot]@users.noreply.github.com'
134
+ git add .github/heartbeat.txt
135
+ git diff --staged --quiet || git commit -m 'chore: activity heartbeat [skip ci]'
136
+ git push
137
+
138
+ prevention:
139
+ - 'Always add `workflow_dispatch:` alongside `on: schedule:` for any workflow that should run reliably in a low-activity repo.'
140
+ - 'Check the Actions tab after a period of low repository activity to verify scheduled workflows are still enabled.'
141
+ - 'The 60-day inactivity rule applies to non-fork public repositories — private repos are NOT subject to this rule.'
142
+ - 'This is distinct from the fork schedule-disabling rule: forks disable schedules immediately on fork creation, not after inactivity.'
143
+ - 'Set up a GitHub Actions alert or monitoring workflow that notifies you if expected scheduled runs stop appearing.'
144
+ docs:
145
+ - url: 'https://docs.github.com/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows#schedule'
146
+ label: 'GitHub Docs: Events that trigger workflows — schedule (inactivity disable note)'
147
+ - url: 'https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/disabling-and-enabling-a-workflow'
148
+ label: 'GitHub Docs: Disabling and enabling a workflow'
149
+ - url: 'https://github.com/orgs/community/discussions/134086'
150
+ label: 'GitHub Community #134086: Scheduled workflows not running — inactivity disable reports'
@@ -0,0 +1,128 @@
1
+ id: yaml-syntax-075
2
+ title: 'environment: shorthand string format silently rejects needs.* and jobs.* contexts — use environment.name form'
3
+ category: yaml-syntax
4
+ severity: error
5
+ tags:
6
+ - environment
7
+ - dynamic-environment
8
+ - needs-context
9
+ - expression
10
+ - shorthand
11
+ - template-validation
12
+ patterns:
13
+ - regex: 'Unrecognized named-value.*needs.*environment'
14
+ flags: 'i'
15
+ - regex: "Unrecognized named-value: 'needs'.*position.*expression.*needs\\."
16
+ flags: 'i'
17
+ - regex: 'TemplateValidationException.*Unrecognized named-value.*needs'
18
+ flags: 'i'
19
+ error_messages:
20
+ - "The workflow is not valid. .github/workflows/deploy.yml (Line: 15, Col: 18): Unrecognized named-value: 'needs'. Located at position 1 within expression: needs.set_environment.outputs.my_env"
21
+ - "Unrecognized named-value: 'needs'. Located at position 1 within expression: needs.X.outputs.env"
22
+ root_cause: |
23
+ The GitHub Actions workflow parser supports two forms for specifying a job environment:
24
+
25
+ 1. Shorthand string: `environment: production` or `environment: ${{ some.expression }}`
26
+ 2. Explicit mapping: `environment:\n name: ${{ expression }}\n url: ${{ expression }}`
27
+
28
+ The shorthand string form (`environment: ${{ ... }}`) supports only a limited expression
29
+ context and does NOT support the `needs.*` or `jobs.*` contexts, even when the job
30
+ has `needs:` declared. Attempting to use `needs.X.outputs.Y` inside the shorthand
31
+ produces a TemplateValidationException at workflow parse time:
32
+
33
+ "Unrecognized named-value: 'needs'. Located at position 1 within expression: needs.X.outputs.Y"
34
+
35
+ The explicit mapping form (`environment:\n name: ${{ ... }}`) DOES support the `needs.*`
36
+ context fully — this is the documented way to set a dynamic environment name or URL.
37
+
38
+ This trips up developers who:
39
+ - Copy the shorthand form from documentation examples and add an expression.
40
+ - Want to choose between staging/production environments based on the branch output
41
+ of an earlier job.
42
+ - Try to set a dynamic environment URL using `needs.deploy.outputs.url`.
43
+
44
+ The error appears only at workflow validation time (not at job runtime), which means
45
+ the entire workflow is rejected before any jobs run.
46
+ fix: |
47
+ Use the explicit `environment:` mapping format with `name:` and optionally `url:` sub-keys
48
+ instead of the shorthand string with a `${{ }}` expression.
49
+
50
+ The shorthand `environment: ${{ expression }}` is only for literal strings or simple
51
+ expressions without `needs.*` / `jobs.*`. Once you need cross-job outputs, switch to
52
+ the explicit form.
53
+ fix_code:
54
+ - language: yaml
55
+ label: 'Broken — shorthand with needs.* context causes TemplateValidationException'
56
+ code: |
57
+ jobs:
58
+ determine-env:
59
+ runs-on: ubuntu-latest
60
+ outputs:
61
+ target: ${{ steps.pick.outputs.env }}
62
+ steps:
63
+ - id: pick
64
+ run: echo "env=production" >> $GITHUB_OUTPUT
65
+
66
+ deploy:
67
+ needs: determine-env
68
+ runs-on: ubuntu-latest
69
+ # ❌ BROKEN: shorthand does not support needs.* context
70
+ environment: ${{ needs.determine-env.outputs.target }}
71
+ steps:
72
+ - run: echo "deploying"
73
+
74
+ - language: yaml
75
+ label: 'Fixed — explicit environment.name form supports needs.* context'
76
+ code: |
77
+ jobs:
78
+ determine-env:
79
+ runs-on: ubuntu-latest
80
+ outputs:
81
+ target: ${{ steps.pick.outputs.env }}
82
+ steps:
83
+ - id: pick
84
+ run: |
85
+ if [[ "${{ github.ref_name }}" == "main" ]]; then
86
+ echo "env=production" >> $GITHUB_OUTPUT
87
+ else
88
+ echo "env=staging" >> $GITHUB_OUTPUT
89
+ fi
90
+
91
+ deploy:
92
+ needs: determine-env
93
+ runs-on: ubuntu-latest
94
+ # ✅ FIXED: explicit name: sub-key supports needs.* context
95
+ environment:
96
+ name: ${{ needs.determine-env.outputs.target }}
97
+ url: ${{ needs.deploy.outputs.deploy_url }}
98
+ steps:
99
+ - run: echo "deploying to ${{ needs.determine-env.outputs.target }}"
100
+
101
+ - language: yaml
102
+ label: 'Dynamic environment from workflow_dispatch input — correct form'
103
+ code: |
104
+ on:
105
+ workflow_dispatch:
106
+ inputs:
107
+ environment:
108
+ required: true
109
+ type: environment
110
+ jobs:
111
+ deploy:
112
+ runs-on: ubuntu-latest
113
+ # ✅ Use explicit name: when referencing inputs.* or needs.* contexts
114
+ environment:
115
+ name: ${{ inputs.environment }}
116
+ steps:
117
+ - run: echo "deploying to ${{ inputs.environment }}"
118
+ prevention:
119
+ - 'Always use the `environment:\n name: ${{ }}` form (never the shorthand string) when the environment name is dynamic or derived from another job.'
120
+ - 'Remember: `environment: ${{ expression }}` is valid syntax but only for literal strings — it silently ignores `needs.*` context at parse time, producing a hard error.'
121
+ - 'Lint with actionlint (v1.7.0+) which detects this pattern before pushing.'
122
+ docs:
123
+ - url: 'https://github.com/actions/runner/issues/998'
124
+ label: 'actions/runner#998 — Setting job environment dynamically fails with needs context in shorthand form'
125
+ - url: 'https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idenvironment'
126
+ label: 'GitHub Docs — jobs.<job_id>.environment syntax reference'
127
+ - url: 'https://stackoverflow.com/questions/65826284/use-dynamic-input-value-for-environment-in-github-actions-workflow-job'
128
+ label: 'Stack Overflow — Dynamic environment in GitHub Actions workflow job (many upvotes)'
@@ -0,0 +1,107 @@
1
+ id: yaml-syntax-076
2
+ title: 'actionlint <=1.7.7 rejects valid `entrypoint` and `command` keys on service containers — schema lag after April 2026 GitHub changelog'
3
+ category: yaml-syntax
4
+ severity: error
5
+ tags:
6
+ - actionlint
7
+ - service-container
8
+ - entrypoint
9
+ - command
10
+ - schema-lag
11
+ - linting
12
+ - CI-check
13
+ patterns:
14
+ - regex: 'unexpected key "entrypoint" for "services" section'
15
+ flags: 'i'
16
+ - regex: 'unexpected key "command" for "services" section'
17
+ flags: 'i'
18
+ - regex: 'unexpected key "(?:entrypoint|command)" for "services" section\. expected one of "credentials", "env", "image", "options", "ports", "volumes"'
19
+ flags: 'i'
20
+ error_messages:
21
+ - '.github/workflows/test.yaml:9:9: unexpected key "entrypoint" for "services" section. expected one of "credentials", "env", "image", "options", "ports", "volumes" [syntax-check]'
22
+ - '.github/workflows/test.yaml:10:9: unexpected key "command" for "services" section. expected one of "credentials", "env", "image", "options", "ports", "volumes" [syntax-check]'
23
+ root_cause: |
24
+ GitHub Actions added support for `entrypoint` and `command` keys on service container
25
+ definitions on April 2, 2026 (GitHub Actions: Early April 2026 updates changelog). These
26
+ new keys allow overriding the service container's default entrypoint and command directly from
27
+ workflow YAML, matching Docker Compose semantics:
28
+
29
+ ```yaml
30
+ services:
31
+ redis:
32
+ image: redis
33
+ entrypoint: redis-server
34
+ command: --save 60 1 --loglevel warning
35
+ ```
36
+
37
+ actionlint versions <=1.7.7 validate service container keys against a hardcoded schema that
38
+ only permits `credentials`, `env`, `image`, `options`, `ports`, and `volumes`. When a workflow
39
+ uses the new `entrypoint` or `command` keys, actionlint reports them as unknown properties with
40
+ a `[syntax-check]` error.
41
+
42
+ This causes CI pipelines that run actionlint as a lint check to fail even though the workflow
43
+ is perfectly valid on GitHub.com. The fix was merged into actionlint on April 19, 2026 and
44
+ released in v1.7.8.
45
+
46
+ This is a schema-lag pattern: a new GitHub Actions feature was released before the static
47
+ analysis tool's schema was updated to recognize it, causing a false-positive lint failure.
48
+ fix: |
49
+ **Primary fix: Upgrade actionlint to >=1.7.8.**
50
+ The fix was merged April 19, 2026 (rhysd/actionlint#644). Update your CI pipeline to use
51
+ actionlint >=1.7.8:
52
+
53
+ ```yaml
54
+ - name: Run actionlint
55
+ uses: raven-actions/actionlint@v2
56
+ with:
57
+ version: latest # or pin to 1.7.8+
58
+ ```
59
+
60
+ **Temporary workaround (if upgrading is not immediately possible):** Add an inline ignore
61
+ comment to suppress the false-positive while on the older actionlint version:
62
+
63
+ ```yaml
64
+ services:
65
+ redis:
66
+ image: redis
67
+ entrypoint: redis-server # actionlint:ignore
68
+ command: --save 60 1 # actionlint:ignore
69
+ ```
70
+ fix_code:
71
+ - language: yaml
72
+ label: 'Upgrade actionlint in CI to >=1.7.8 to recognize entrypoint/command service keys'
73
+ code: |
74
+ - name: Run actionlint
75
+ uses: raven-actions/actionlint@v2
76
+ with:
77
+ version: 1.7.8 # Minimum version that supports entrypoint/command on service containers
78
+ - language: yaml
79
+ label: 'Valid service container workflow using new entrypoint/command keys (GitHub Actions only)'
80
+ code: |
81
+ jobs:
82
+ test:
83
+ runs-on: ubuntu-latest
84
+ services:
85
+ redis:
86
+ image: redis:7
87
+ # These keys are valid on GitHub Actions (GA April 2, 2026)
88
+ # but require actionlint >=1.7.8 for linting to pass
89
+ entrypoint: redis-server
90
+ command: --save 60 1 --loglevel warning
91
+ ports:
92
+ - 6379:6379
93
+ steps:
94
+ - uses: actions/checkout@v4
95
+ - name: Run tests
96
+ run: npm test
97
+ prevention:
98
+ - 'Pin actionlint to a specific version in CI and include it in your Dependabot or Renovate configuration so schema updates are picked up promptly when new GitHub Actions features are released.'
99
+ - 'When a new GitHub Actions feature ships, check the actionlint changelog (https://github.com/rhysd/actionlint/releases) for schema support before using the feature in linted workflows.'
100
+ - 'Use `# actionlint:ignore` comment as a short-term workaround for valid-but-unknown-to-linter keys while waiting for the schema update.'
101
+ docs:
102
+ - url: 'https://github.com/rhysd/actionlint/issues/644'
103
+ label: 'rhysd/actionlint#644 — Add support for entrypoint and command for service containers (fixed in v1.7.8)'
104
+ - url: 'https://github.blog/changelog/2026-04-02-github-actions-early-april-2026-updates/'
105
+ label: 'GitHub Changelog — April 2026 updates: entrypoint and command overrides for service containers'
106
+ - url: 'https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idservicesservice_identrypoint'
107
+ label: 'GitHub Docs — Workflow syntax: jobs.<job_id>.services.<service_id>.entrypoint'
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@htekdev/actions-debugger",
3
- "version": "1.0.124",
3
+ "version": "1.0.126",
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",