@htekdev/actions-debugger 1.0.113 → 1.0.115
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/caching-artifacts/cache-corrupt-on-cancel-during-restore-save-always.yml +136 -0
- package/errors/caching-artifacts/restore-keys-asterisk-literal-not-glob.yml +107 -0
- package/errors/concurrency-timing/concurrency-timing-053.yml +83 -0
- package/errors/concurrency-timing/pull-request-review-shared-concurrency-cancels-ci.yml +131 -0
- package/errors/known-unsolved/github-script-esm-not-supported.yml +111 -0
- package/errors/known-unsolved/job-outputs-string-only-no-array-object.yml +142 -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/oidc-immutable-sub-claim-new-repo-trust-policy-mismatch.yml +122 -0
- package/errors/permissions-auth/permissions-auth-064.yml +122 -0
- package/errors/permissions-auth/permissions-auth-065.yml +97 -0
- package/errors/permissions-auth/permissions-auth-066.yml +129 -0
- package/errors/permissions-auth/upload-code-coverage-missing-code-quality-write-permission.yml +94 -0
- package/errors/runner-environment/arc-kubernetes-checkout-circular-json-container-hook.yml +101 -0
- package/errors/runner-environment/cache-restore-windows-runner-silent-crash.yml +130 -0
- package/errors/runner-environment/git-248-fetch-tags-shallow-clone-regression.yml +100 -0
- package/errors/runner-environment/javascript-actions-alpine-arm64-not-supported.yml +121 -0
- package/errors/runner-environment/runner-environment-188.yml +96 -0
- package/errors/runner-environment/runner-environment-191.yml +147 -0
- package/errors/runner-environment/runner-environment-192.yml +144 -0
- package/errors/runner-environment/runner-environment-193.yml +136 -0
- package/errors/runner-environment/runner-environment-194.yml +86 -0
- package/errors/runner-environment/runner-environment-199.yml +93 -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/checkout-v6-clean-false-deletes-workspace-on-repo-change.yml +119 -0
- package/errors/silent-failures/queue-max-silently-ignored-with-cancel-in-progress.yml +109 -0
- package/errors/silent-failures/silent-failures-102.yml +141 -0
- package/errors/silent-failures/silent-failures-104.yml +119 -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/errors/yaml-syntax/yaml-syntax-068.yml +137 -0
- package/errors/yaml-syntax/yaml-syntax-069.yml +118 -0
- package/package.json +1 -1
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
id: yaml-syntax-069
|
|
2
|
+
title: 'Job-level `env:` Variables Silently Resolve to Empty String in `services.*.image` and `container.image`'
|
|
3
|
+
category: yaml-syntax
|
|
4
|
+
severity: silent-failure
|
|
5
|
+
tags:
|
|
6
|
+
- services
|
|
7
|
+
- container
|
|
8
|
+
- env-context
|
|
9
|
+
- image
|
|
10
|
+
- context-availability
|
|
11
|
+
- job-level-env
|
|
12
|
+
- silent-failure
|
|
13
|
+
patterns:
|
|
14
|
+
- regex: 'image:\s*\S*\$\{\{\s*env\.'
|
|
15
|
+
flags: 'im'
|
|
16
|
+
- regex: 'Error response from daemon: manifest for \S+: not found'
|
|
17
|
+
flags: 'i'
|
|
18
|
+
- regex: 'invalid reference format'
|
|
19
|
+
flags: 'i'
|
|
20
|
+
error_messages:
|
|
21
|
+
- "Error response from daemon: manifest for redis: not found: manifest unknown"
|
|
22
|
+
- "Error response from daemon: manifest for postgres: not found"
|
|
23
|
+
- "invalid reference format"
|
|
24
|
+
- "Error: Container action is using an invalid image"
|
|
25
|
+
- "Unable to pull image 'redis:': invalid reference format"
|
|
26
|
+
root_cause: |
|
|
27
|
+
GitHub Actions evaluates `services.*.image` and `container.image` expressions BEFORE
|
|
28
|
+
the job's environment scope is initialized. At evaluation time, the `env` context only
|
|
29
|
+
contains WORKFLOW-level `env:` variables (defined in the top-level `env:` block). Any
|
|
30
|
+
`env:` variable declared inside `jobs.<job_id>.env:` is NOT yet in scope and silently
|
|
31
|
+
evaluates to empty string `""`.
|
|
32
|
+
|
|
33
|
+
Example of the broken pattern:
|
|
34
|
+
|
|
35
|
+
```yaml
|
|
36
|
+
jobs:
|
|
37
|
+
test:
|
|
38
|
+
env:
|
|
39
|
+
REDIS_VERSION: '7.2' # ← job-level env: NOT available in services below
|
|
40
|
+
services:
|
|
41
|
+
redis:
|
|
42
|
+
image: 'redis:${{ env.REDIS_VERSION }}' # ← evaluates to "redis:" (empty tag)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
The expression `redis:${{ env.REDIS_VERSION }}` resolves to `redis:` which Docker treats
|
|
46
|
+
as an invalid or missing tag, causing the service to fail to start — often with
|
|
47
|
+
"manifest not found" or "invalid reference format" errors.
|
|
48
|
+
|
|
49
|
+
**Context availability in `services.*.image` and `container.image`**:
|
|
50
|
+
|
|
51
|
+
| Context | Available? |
|
|
52
|
+
|---------------|------------|
|
|
53
|
+
| `github` | ✅ Yes |
|
|
54
|
+
| `inputs` | ✅ Yes |
|
|
55
|
+
| `vars` | ✅ Yes |
|
|
56
|
+
| `secrets` | ✅ Yes |
|
|
57
|
+
| `matrix` | ✅ Yes |
|
|
58
|
+
| `env` (workflow-level) | ✅ Yes |
|
|
59
|
+
| `env` (job-level) | ❌ No — silently empty |
|
|
60
|
+
| `steps.*` | ❌ No — no steps have run yet |
|
|
61
|
+
| `needs.*` | ❌ No |
|
|
62
|
+
|
|
63
|
+
This affects any image version that a developer attempts to centralize in their job's
|
|
64
|
+
local `env:` block — a common pattern for organizing service dependencies.
|
|
65
|
+
fix: |
|
|
66
|
+
Move the image-version environment variable from the job-level `env:` block to the
|
|
67
|
+
WORKFLOW-level `env:` block (outside `jobs:`). Alternatively, use `vars` context
|
|
68
|
+
(repository/org variables) for externalized configuration, or pin the version inline.
|
|
69
|
+
fix_code:
|
|
70
|
+
- language: yaml
|
|
71
|
+
label: "Broken — job-level env silently empty in services.image"
|
|
72
|
+
code: |
|
|
73
|
+
jobs:
|
|
74
|
+
test:
|
|
75
|
+
env:
|
|
76
|
+
REDIS_VERSION: '7.2' # ← job-level: NOT visible in services below
|
|
77
|
+
services:
|
|
78
|
+
redis:
|
|
79
|
+
image: 'redis:${{ env.REDIS_VERSION }}' # resolves to "redis:" — fails
|
|
80
|
+
- language: yaml
|
|
81
|
+
label: "Fixed — move version to workflow-level env"
|
|
82
|
+
code: |
|
|
83
|
+
env:
|
|
84
|
+
REDIS_VERSION: '7.2' # ← workflow-level: visible in services.image
|
|
85
|
+
|
|
86
|
+
jobs:
|
|
87
|
+
test:
|
|
88
|
+
services:
|
|
89
|
+
redis:
|
|
90
|
+
image: 'redis:${{ env.REDIS_VERSION }}' # resolves to "redis:7.2" ✓
|
|
91
|
+
- language: yaml
|
|
92
|
+
label: "Alternative — use vars context (repository variable)"
|
|
93
|
+
code: |
|
|
94
|
+
# Set REDIS_VERSION in repository Settings → Secrets and variables → Variables
|
|
95
|
+
jobs:
|
|
96
|
+
test:
|
|
97
|
+
services:
|
|
98
|
+
redis:
|
|
99
|
+
image: 'redis:${{ vars.REDIS_VERSION }}' # always available ✓
|
|
100
|
+
- language: yaml
|
|
101
|
+
label: "Alternative — pin version inline (simplest)"
|
|
102
|
+
code: |
|
|
103
|
+
jobs:
|
|
104
|
+
test:
|
|
105
|
+
services:
|
|
106
|
+
redis:
|
|
107
|
+
image: 'redis:7.2' # no expression needed if version doesn't change often
|
|
108
|
+
prevention:
|
|
109
|
+
- "Always define image-version env vars at the WORKFLOW level (top-level `env:`) when they are referenced in `services:` or `container:`"
|
|
110
|
+
- "Lint workflows with the GitHub VS Code extension or actionlint — it flags unsupported context references in service/container image fields"
|
|
111
|
+
- "When a service fails to pull, check the exact image name in the runner log — an empty or malformed tag (e.g., `redis:`) indicates this context-availability issue"
|
|
112
|
+
docs:
|
|
113
|
+
- url: "https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/contexts#context-availability"
|
|
114
|
+
label: "GitHub Actions context availability — which contexts are valid in each workflow field"
|
|
115
|
+
- url: "https://docs.github.com/en/actions/writing-workflows/workflow-syntax-for-github-actions#jobsjob_idservicesservice_idimage"
|
|
116
|
+
label: "jobs.<job_id>.services.<service_id>.image — workflow syntax reference"
|
|
117
|
+
- url: "https://github.com/orgs/community/discussions"
|
|
118
|
+
label: "GitHub Community Discussions — GitHub Actions service container configuration"
|
package/package.json
CHANGED