@htekdev/actions-debugger 1.0.56 → 1.0.58
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/caching-artifacts-038.yml +95 -0
- package/errors/caching-artifacts/caching-artifacts-039.yml +110 -0
- package/errors/caching-artifacts/caching-artifacts-040.yml +112 -0
- package/errors/concurrency-timing/concurrency-timing-033.yml +104 -0
- package/errors/concurrency-timing/concurrency-timing-034.yml +123 -0
- package/errors/known-unsolved/known-unsolved-038.yml +124 -0
- package/errors/known-unsolved/known-unsolved-039.yml +102 -0
- package/errors/permissions-auth/permissions-auth-041.yml +110 -0
- package/errors/permissions-auth/permissions-auth-042.yml +125 -0
- package/errors/runner-environment/runner-environment-112.yml +98 -0
- package/errors/runner-environment/runner-environment-113.yml +118 -0
- package/errors/runner-environment/runner-environment-114.yml +130 -0
- package/errors/runner-environment/runner-environment-115.yml +120 -0
- package/errors/runner-environment/runner-environment-116.yml +106 -0
- package/errors/runner-environment/runner-environment-117.yml +109 -0
- package/errors/runner-environment/runner-environment-118.yml +102 -0
- package/errors/silent-failures/silent-failures-057.yml +120 -0
- package/errors/silent-failures/silent-failures-058.yml +126 -0
- package/errors/silent-failures/silent-failures-059.yml +104 -0
- package/errors/triggers/triggers-041.yml +105 -0
- package/errors/triggers/triggers-042.yml +110 -0
- package/errors/triggers/triggers-043.yml +125 -0
- package/errors/yaml-syntax/yaml-syntax-040.yml +135 -0
- package/errors/yaml-syntax/yaml-syntax-041.yml +147 -0
- package/package.json +1 -1
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
id: runner-environment-114
|
|
2
|
+
title: "macOS-26 / Xcode 26 defaults to Swift 6 strict concurrency — existing Swift builds fail with actor isolation errors"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- macos-26
|
|
7
|
+
- xcode-26
|
|
8
|
+
- swift-6
|
|
9
|
+
- concurrency
|
|
10
|
+
- actor-isolation
|
|
11
|
+
- runner-image-update
|
|
12
|
+
- breaking-change
|
|
13
|
+
patterns:
|
|
14
|
+
- regex: "error: sending '.*' to actor-isolated"
|
|
15
|
+
flags: 'i'
|
|
16
|
+
- regex: 'actor-isolated.*cannot.*referenced from.*non-isolated'
|
|
17
|
+
flags: 'i'
|
|
18
|
+
- regex: "error: '.*' cannot be used to satisfy the '@Sendable' requirement"
|
|
19
|
+
flags: 'i'
|
|
20
|
+
- regex: 'error:.*Sendable.*cannot conform.*in Swift 6'
|
|
21
|
+
flags: 'i'
|
|
22
|
+
- regex: 'main actor-isolated.*cannot be referenced from.*nonisolated'
|
|
23
|
+
flags: 'i'
|
|
24
|
+
error_messages:
|
|
25
|
+
- "error: sending 'self' to actor-isolated initializer 'init()' risks causing data races"
|
|
26
|
+
- "error: actor-isolated property 'delegate' can not be referenced from a non-isolated context"
|
|
27
|
+
- "error: main actor-isolated class method 'viewDidLoad()' cannot be referenced from a nonisolated context"
|
|
28
|
+
- "error: 'Sendable'-conforming class 'MyViewController' cannot inherit from another class other than 'NSObject'"
|
|
29
|
+
- "error: expression is 'async' but is not marked with 'await'"
|
|
30
|
+
root_cause: |
|
|
31
|
+
Xcode 26 (shipped with the macos-26 runner) defaults to Swift 6 language mode. Previous
|
|
32
|
+
Xcode versions (14, 15, 16) compiled in Swift 5 compatibility mode by default, which did not
|
|
33
|
+
enforce strict data-race safety checking.
|
|
34
|
+
|
|
35
|
+
Swift 6 enforces complete concurrency checking at compile time:
|
|
36
|
+
- All values shared across actor boundaries must conform to `Sendable`
|
|
37
|
+
- Calls to `@MainActor`-isolated methods from non-isolated contexts must be `await`-ed
|
|
38
|
+
- Closures passed to async contexts must be `@Sendable`
|
|
39
|
+
- Class hierarchies that cross actor boundaries require explicit `Sendable` conformance
|
|
40
|
+
|
|
41
|
+
Code that compiled and ran correctly under Swift 5 may produce dozens of compiler errors in
|
|
42
|
+
Swift 6, even if it had no actual concurrency bugs. The errors are not warnings — they are
|
|
43
|
+
hard build failures.
|
|
44
|
+
|
|
45
|
+
The macos-26 runner ships Xcode 26 as the default Xcode. Any workflow running `xcodebuild`
|
|
46
|
+
or `swift build` without an explicit Swift language version flag will pick up Swift 6.
|
|
47
|
+
fix: |
|
|
48
|
+
Short-term: Pin to Swift 5 compatibility mode in your build command or project settings.
|
|
49
|
+
|
|
50
|
+
Option A — xcodebuild flag:
|
|
51
|
+
xcodebuild build -scheme MyScheme SWIFT_VERSION=5
|
|
52
|
+
|
|
53
|
+
Option B — Xcode build settings (xcconfig or project settings):
|
|
54
|
+
SWIFT_VERSION = 5
|
|
55
|
+
|
|
56
|
+
Option C — Package.swift swift-tools-version (for Swift Package Manager projects):
|
|
57
|
+
Change the first line to: // swift-tools-version: 5.10
|
|
58
|
+
This sets the package manifest version and implicitly enables Swift 5 mode for dependencies.
|
|
59
|
+
|
|
60
|
+
Option D — Per-target in Package.swift:
|
|
61
|
+
.target(name: "MyTarget", swiftSettings: [.unsafeFlags(["-swift-version", "5"])])
|
|
62
|
+
|
|
63
|
+
Long-term: Migrate your codebase to Swift 6 concurrency model by resolving actor isolation
|
|
64
|
+
errors. Apple provides a migration guide at developer.apple.com/documentation/swift/migrating-to-swift-6.
|
|
65
|
+
fix_code:
|
|
66
|
+
- language: yaml
|
|
67
|
+
label: "Pin SWIFT_VERSION=5 in xcodebuild to restore Swift 5 compatibility on macos-26"
|
|
68
|
+
code: |
|
|
69
|
+
jobs:
|
|
70
|
+
build:
|
|
71
|
+
runs-on: macos-26
|
|
72
|
+
steps:
|
|
73
|
+
- uses: actions/checkout@v4
|
|
74
|
+
|
|
75
|
+
- name: Build (Swift 5 compatibility mode)
|
|
76
|
+
run: |
|
|
77
|
+
xcodebuild build \
|
|
78
|
+
-scheme MyApp \
|
|
79
|
+
-destination 'platform=macOS' \
|
|
80
|
+
SWIFT_VERSION=5
|
|
81
|
+
|
|
82
|
+
- name: Test (Swift 5 compatibility mode)
|
|
83
|
+
run: |
|
|
84
|
+
xcodebuild test \
|
|
85
|
+
-scheme MyApp \
|
|
86
|
+
-destination 'platform=macOS' \
|
|
87
|
+
SWIFT_VERSION=5
|
|
88
|
+
- language: yaml
|
|
89
|
+
label: "Pin swift-tools-version in Package.swift for SPM projects"
|
|
90
|
+
code: |
|
|
91
|
+
# In Package.swift — change the first line to request Swift 5 tools:
|
|
92
|
+
# // swift-tools-version: 5.10
|
|
93
|
+
#
|
|
94
|
+
# Then in the workflow:
|
|
95
|
+
jobs:
|
|
96
|
+
build:
|
|
97
|
+
runs-on: macos-26
|
|
98
|
+
steps:
|
|
99
|
+
- uses: actions/checkout@v4
|
|
100
|
+
|
|
101
|
+
- name: Build Swift package
|
|
102
|
+
run: swift build -c release
|
|
103
|
+
- language: yaml
|
|
104
|
+
label: "Temporarily pin to macos-15 while migrating to Swift 6"
|
|
105
|
+
code: |
|
|
106
|
+
jobs:
|
|
107
|
+
build:
|
|
108
|
+
# TODO: Migrate to Swift 6 and update to macos-26
|
|
109
|
+
# Track progress at: <link to your Swift 6 migration issue>
|
|
110
|
+
runs-on: macos-15
|
|
111
|
+
steps:
|
|
112
|
+
- uses: actions/checkout@v4
|
|
113
|
+
|
|
114
|
+
- name: Build
|
|
115
|
+
run: xcodebuild build -scheme MyApp -destination 'platform=macOS'
|
|
116
|
+
prevention:
|
|
117
|
+
- "Test workflows on macos-26 before relying on macos-latest switching to it"
|
|
118
|
+
- "Specify SWIFT_VERSION explicitly in Xcode project settings rather than relying on Xcode defaults"
|
|
119
|
+
- "Enable strict concurrency warnings (SWIFT_STRICT_CONCURRENCY=complete) in Swift 5 mode to preview Swift 6 errors before migrating"
|
|
120
|
+
- "Watch github.com/actions/runner-images release notes for macos-latest label changes"
|
|
121
|
+
- "Pin swift-tools-version in Package.swift to document the intended Swift compatibility level"
|
|
122
|
+
docs:
|
|
123
|
+
- url: "https://developer.apple.com/documentation/swift/migrating-to-swift-6"
|
|
124
|
+
label: "Apple Developer — Migrating to Swift 6"
|
|
125
|
+
- url: "https://www.swift.org/migration/documentation/swift-6-concurrency-migration-guide/"
|
|
126
|
+
label: "Swift.org — Swift 6 Concurrency Migration Guide"
|
|
127
|
+
- url: "https://github.com/actions/runner-images/blob/main/images/macos/macos-26-Readme.md"
|
|
128
|
+
label: "runner-images — macOS 26 image README (Xcode default version)"
|
|
129
|
+
- url: "https://developer.apple.com/documentation/xcode-release-notes"
|
|
130
|
+
label: "Xcode Release Notes — Xcode 26 language defaults"
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
id: runner-environment-115
|
|
2
|
+
title: "ubuntu-22.04/24.04 OpenSSL 3 disables legacy TLS renegotiation — SSL handshake failures connecting to legacy servers"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- ubuntu-22.04
|
|
7
|
+
- ubuntu-24.04
|
|
8
|
+
- openssl-3
|
|
9
|
+
- tls
|
|
10
|
+
- ssl
|
|
11
|
+
- renegotiation
|
|
12
|
+
- runner-image-update
|
|
13
|
+
- networking
|
|
14
|
+
patterns:
|
|
15
|
+
- regex: 'unsafe legacy renegotiation disabled'
|
|
16
|
+
flags: 'i'
|
|
17
|
+
- regex: 'SSL_ERROR_RX_UNEXPECTED_HELLO_REQUEST'
|
|
18
|
+
flags: 'i'
|
|
19
|
+
- regex: 'error:0A000179:SSL routines.*unsafe legacy renegotiation'
|
|
20
|
+
flags: 'i'
|
|
21
|
+
- regex: 'UNSAFE_LEGACY_RENEGOTIATION_DISABLED'
|
|
22
|
+
flags: 'i'
|
|
23
|
+
- regex: 'ssl.*renegotiation.*not allowed'
|
|
24
|
+
flags: 'i'
|
|
25
|
+
error_messages:
|
|
26
|
+
- "error:0A000179:SSL routines::unsafe legacy renegotiation disabled"
|
|
27
|
+
- "SSL_ERROR_RX_UNEXPECTED_HELLO_REQUEST"
|
|
28
|
+
- "ssl.SSLError: [SSL: UNSAFE_LEGACY_RENEGOTIATION_DISABLED] unsafe legacy renegotiation disabled (_ssl.c:997)"
|
|
29
|
+
- "OpenSSL Error: error:0A000179:SSL routines:ssl3_read_bytes:unsafe legacy renegotiation disabled"
|
|
30
|
+
- "curl: (35) OpenSSL SSL_connect: error:0A000179:SSL routines::unsafe legacy renegotiation disabled"
|
|
31
|
+
- "java.io.IOException: Error writing to server: javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake"
|
|
32
|
+
root_cause: |
|
|
33
|
+
Ubuntu 22.04 and 24.04 ship OpenSSL 3.0+. OpenSSL 3.0 enforces RFC 5746 (TLS Renegotiation
|
|
34
|
+
Indication Extension) by default and rejects connections to TLS servers that do not advertise
|
|
35
|
+
support for secure renegotiation in the initial ClientHello/ServerHello handshake.
|
|
36
|
+
|
|
37
|
+
Servers compiled against older OpenSSL (< 0.9.8m) or certain embedded TLS stacks do not send
|
|
38
|
+
the `renegotiation_info` extension and are therefore rejected by OpenSSL 3.0 clients with
|
|
39
|
+
`UNSAFE_LEGACY_RENEGOTIATION_DISABLED`.
|
|
40
|
+
|
|
41
|
+
This commonly surfaces when:
|
|
42
|
+
- Workflows connect to internal/staging HTTPS servers running old TLS stacks
|
|
43
|
+
- docker-compose services use self-signed certs from outdated libraries
|
|
44
|
+
- gRPC clients compiled against old OpenSSL connect to legacy gRPC servers
|
|
45
|
+
- curl/wget calls target third-party APIs that have not updated their TLS handshake
|
|
46
|
+
- Java HTTPS tests connect to embedded Jetty/Netty servers with old SSL config
|
|
47
|
+
|
|
48
|
+
The error did not occur on ubuntu-20.04 (OpenSSL 1.1.1, which allowed legacy renegotiation
|
|
49
|
+
by default). Workflows migrating from ubuntu-20.04 to 22.04/24.04 encounter it for the first
|
|
50
|
+
time.
|
|
51
|
+
fix: |
|
|
52
|
+
Option 1 (recommended for CI): Append `UnsafeLegacyRenegotiation = true` to the OpenSSL
|
|
53
|
+
config file at the start of the job. This is acceptable in CI/testing contexts where you
|
|
54
|
+
control the environment; never use this in production.
|
|
55
|
+
|
|
56
|
+
Option 2: Set OPENSSL_CONF to /dev/null to bypass the OpenSSL configuration file entirely.
|
|
57
|
+
Use only for quick diagnostics or tests against known internal servers.
|
|
58
|
+
|
|
59
|
+
Option 3 (recommended long-term): Upgrade the legacy server's TLS library so it advertises
|
|
60
|
+
RFC 5746 support. For embedded test servers, upgrade the underlying HTTP/TLS library version.
|
|
61
|
+
|
|
62
|
+
Option 4: Use `curl --no-sessionid` or `curl --legacy-renegotiation` (curl 7.83+) for
|
|
63
|
+
specific curl-based steps without affecting the whole environment.
|
|
64
|
+
fix_code:
|
|
65
|
+
- language: yaml
|
|
66
|
+
label: "Enable UnsafeLegacyRenegotiation in OpenSSL config for CI (workaround)"
|
|
67
|
+
code: |
|
|
68
|
+
jobs:
|
|
69
|
+
integration-test:
|
|
70
|
+
runs-on: ubuntu-24.04
|
|
71
|
+
steps:
|
|
72
|
+
- uses: actions/checkout@v4
|
|
73
|
+
|
|
74
|
+
- name: Allow legacy TLS renegotiation (CI workaround for legacy test servers)
|
|
75
|
+
run: |
|
|
76
|
+
echo "Options = UnsafeLegacyRenegotiation" | \
|
|
77
|
+
sudo tee -a /etc/ssl/openssl.cnf
|
|
78
|
+
|
|
79
|
+
- name: Run integration tests
|
|
80
|
+
run: npm test
|
|
81
|
+
- language: yaml
|
|
82
|
+
label: "Override OPENSSL_CONF per-step (minimal blast radius)"
|
|
83
|
+
code: |
|
|
84
|
+
jobs:
|
|
85
|
+
integration-test:
|
|
86
|
+
runs-on: ubuntu-24.04
|
|
87
|
+
steps:
|
|
88
|
+
- uses: actions/checkout@v4
|
|
89
|
+
|
|
90
|
+
- name: Test against legacy HTTPS endpoint
|
|
91
|
+
env:
|
|
92
|
+
OPENSSL_CONF: /dev/null
|
|
93
|
+
run: |
|
|
94
|
+
curl -v https://legacy-test-server.internal/health
|
|
95
|
+
- language: yaml
|
|
96
|
+
label: "Set OPENSSL_CONF at job level (affects all steps)"
|
|
97
|
+
code: |
|
|
98
|
+
jobs:
|
|
99
|
+
integration-test:
|
|
100
|
+
runs-on: ubuntu-24.04
|
|
101
|
+
env:
|
|
102
|
+
OPENSSL_CONF: /dev/null
|
|
103
|
+
steps:
|
|
104
|
+
- uses: actions/checkout@v4
|
|
105
|
+
- run: npm test
|
|
106
|
+
prevention:
|
|
107
|
+
- "Upgrade internal/staging test servers to modern TLS libraries that support RFC 5746"
|
|
108
|
+
- "Use `openssl s_client -connect host:443` in CI to detect legacy renegotiation issues before they block builds"
|
|
109
|
+
- "Avoid pinning to ubuntu-20.04 as a permanent workaround — it reached EOL and will be removed from runner images"
|
|
110
|
+
- "When upgrading from ubuntu-20.04 to 22.04/24.04, run a connectivity smoke-test against all HTTPS endpoints the workflow touches"
|
|
111
|
+
- "Use testcontainers or modern embedded test server libraries that ship up-to-date TLS stacks"
|
|
112
|
+
docs:
|
|
113
|
+
- url: "https://www.openssl.org/docs/man3.0/man3/SSL_CTX_set_options.html"
|
|
114
|
+
label: "OpenSSL 3.0 — SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION option"
|
|
115
|
+
- url: "https://github.com/actions/runner-images/issues/6399"
|
|
116
|
+
label: "runner-images #6399 — OpenSSL 3 renegotiation issues on ubuntu-22.04"
|
|
117
|
+
- url: "https://github.com/openssl/openssl/issues/17593"
|
|
118
|
+
label: "OpenSSL #17593 — Legacy renegotiation rejection in 3.0"
|
|
119
|
+
- url: "https://www.rfc-editor.org/rfc/rfc5746"
|
|
120
|
+
label: "RFC 5746 — TLS Renegotiation Indication Extension"
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
id: runner-environment-116
|
|
2
|
+
title: "actions/setup-python with cache: pip fails when no standard requirements file exists in the repository"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- setup-python
|
|
7
|
+
- pip
|
|
8
|
+
- caching
|
|
9
|
+
- requirements
|
|
10
|
+
- dependency-file
|
|
11
|
+
- cache-dependency-path
|
|
12
|
+
patterns:
|
|
13
|
+
- regex: 'No file found with the provided path.*requirements'
|
|
14
|
+
flags: 'i'
|
|
15
|
+
- regex: 'No dependencies file path found for pip'
|
|
16
|
+
flags: 'i'
|
|
17
|
+
- regex: 'Couldn''t find a dependency file for pip'
|
|
18
|
+
flags: 'i'
|
|
19
|
+
- regex: 'Error: No file found with the provided path'
|
|
20
|
+
flags: 'i'
|
|
21
|
+
error_messages:
|
|
22
|
+
- "Error: No file found with the provided path: requirements.txt"
|
|
23
|
+
- "No dependencies file path found for pip"
|
|
24
|
+
- "Couldn't find a dependency file for pip"
|
|
25
|
+
- "Error: No file found with the provided path: **/requirements.txt"
|
|
26
|
+
root_cause: |
|
|
27
|
+
When `actions/setup-python` is configured with `cache: 'pip'`, it searches the
|
|
28
|
+
repository for a standard Python dependency file to use as the cache hash key.
|
|
29
|
+
The action looks for these files by default (in order):
|
|
30
|
+
|
|
31
|
+
- `requirements.txt`
|
|
32
|
+
- `requirements/*.txt`
|
|
33
|
+
- `Pipfile.lock`
|
|
34
|
+
- `poetry.lock`
|
|
35
|
+
- `pyproject.toml` (only if it contains a `[project]` or `[tool.poetry]` section)
|
|
36
|
+
- `setup.cfg` (only if it contains `[options]` with `install_requires`)
|
|
37
|
+
|
|
38
|
+
If none of these files are present, the action fails with an error during the
|
|
39
|
+
cache configuration phase. This commonly affects repositories that:
|
|
40
|
+
|
|
41
|
+
- Use a custom requirements filename (e.g., `dev-requirements.txt`, `requirements-dev.txt`)
|
|
42
|
+
- Store requirements in a non-standard path (e.g., `ci/requirements.txt`, `tests/requirements.txt`)
|
|
43
|
+
- Use only `setup.py` for dependency declaration (not recognized by default)
|
|
44
|
+
- Generate requirements dynamically at build time
|
|
45
|
+
- Are library repos with no explicit requirements file (dependencies in `pyproject.toml`
|
|
46
|
+
but without a recognized table)
|
|
47
|
+
|
|
48
|
+
The error appears either immediately at setup time or during the post-step cache save
|
|
49
|
+
phase, depending on the setup-python version.
|
|
50
|
+
fix: |
|
|
51
|
+
Provide the `cache-dependency-path` input to explicitly point to your dependency
|
|
52
|
+
file(s). This input accepts glob patterns and newline-separated paths.
|
|
53
|
+
|
|
54
|
+
If your repository has no dependency files at all (e.g., it generates them
|
|
55
|
+
dynamically), remove `cache: 'pip'` and implement pip caching manually using
|
|
56
|
+
`actions/cache@v4`, using a hash of whatever inputs determine your dependency set
|
|
57
|
+
(e.g., a Makefile, Dockerfile, or script).
|
|
58
|
+
fix_code:
|
|
59
|
+
- language: yaml
|
|
60
|
+
label: "Specify non-standard requirements file path"
|
|
61
|
+
code: |
|
|
62
|
+
- uses: actions/setup-python@v5
|
|
63
|
+
with:
|
|
64
|
+
python-version: '3.12'
|
|
65
|
+
cache: 'pip'
|
|
66
|
+
cache-dependency-path: ci/requirements.txt # Non-standard path
|
|
67
|
+
|
|
68
|
+
- language: yaml
|
|
69
|
+
label: "Multiple dependency files with glob pattern"
|
|
70
|
+
code: |
|
|
71
|
+
- uses: actions/setup-python@v5
|
|
72
|
+
with:
|
|
73
|
+
python-version: '3.12'
|
|
74
|
+
cache: 'pip'
|
|
75
|
+
cache-dependency-path: |
|
|
76
|
+
requirements.txt
|
|
77
|
+
requirements-dev.txt
|
|
78
|
+
tests/requirements.txt
|
|
79
|
+
|
|
80
|
+
- language: yaml
|
|
81
|
+
label: "Manual pip caching when no dependency file exists"
|
|
82
|
+
code: |
|
|
83
|
+
- uses: actions/setup-python@v5
|
|
84
|
+
with:
|
|
85
|
+
python-version: '3.12'
|
|
86
|
+
# Omit cache: pip — handle caching manually
|
|
87
|
+
|
|
88
|
+
- name: Cache pip packages
|
|
89
|
+
uses: actions/cache@v4
|
|
90
|
+
with:
|
|
91
|
+
path: ~/.cache/pip
|
|
92
|
+
key: pip-${{ runner.os }}-${{ hashFiles('setup.py', 'Makefile') }}
|
|
93
|
+
restore-keys: |
|
|
94
|
+
pip-${{ runner.os }}-
|
|
95
|
+
prevention:
|
|
96
|
+
- "Always set cache-dependency-path when your requirements file is not named requirements.txt or in the root directory"
|
|
97
|
+
- "Standard filenames recognized automatically: requirements.txt, Pipfile.lock, poetry.lock, pyproject.toml (with [project] table), setup.cfg (with install_requires)"
|
|
98
|
+
- "If using poetry, set cache: 'poetry' instead of cache: 'pip' — it detects poetry.lock automatically"
|
|
99
|
+
- "Consider adding a requirements.txt generated from pyproject.toml or poetry.lock to your repo for compatibility with setup-python caching"
|
|
100
|
+
docs:
|
|
101
|
+
- url: "https://github.com/actions/setup-python#caching-packages-dependencies"
|
|
102
|
+
label: "actions/setup-python — Caching packages documentation"
|
|
103
|
+
- url: "https://github.com/actions/setup-python/blob/main/docs/advanced-usage.md#caching-packages"
|
|
104
|
+
label: "actions/setup-python — Advanced caching usage"
|
|
105
|
+
- url: "https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows"
|
|
106
|
+
label: "GitHub Docs — Caching dependencies to speed up workflows"
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
id: runner-environment-117
|
|
2
|
+
title: "aws-actions/configure-aws-credentials@v4 requires explicit aws-region — silent failure after version bump from v1/v2"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- aws
|
|
7
|
+
- configure-aws-credentials
|
|
8
|
+
- aws-region
|
|
9
|
+
- oidc
|
|
10
|
+
- version-upgrade
|
|
11
|
+
- breaking-change
|
|
12
|
+
patterns:
|
|
13
|
+
- regex: 'Must provide region information'
|
|
14
|
+
flags: 'i'
|
|
15
|
+
- regex: 'Input required and not supplied:\s*aws-region'
|
|
16
|
+
flags: 'i'
|
|
17
|
+
- regex: 'Region is not set|No region provided|aws.region.*not.*set'
|
|
18
|
+
flags: 'i'
|
|
19
|
+
error_messages:
|
|
20
|
+
- "Must provide region information"
|
|
21
|
+
- "Input required and not supplied: aws-region"
|
|
22
|
+
- "Region is not set"
|
|
23
|
+
- "No region provided"
|
|
24
|
+
root_cause: |
|
|
25
|
+
aws-actions/configure-aws-credentials@v4 (and v2+) made aws-region a required
|
|
26
|
+
input for all authentication methods. In @v1, aws-region was optional and could
|
|
27
|
+
be derived from the AWS_DEFAULT_REGION environment variable already present on
|
|
28
|
+
the runner or set in a prior step.
|
|
29
|
+
|
|
30
|
+
When Dependabot, Renovate, or a manual version bump updates configure-aws-credentials
|
|
31
|
+
from @v1 to @v4, workflows that relied on region auto-detection or inherited
|
|
32
|
+
environment variables begin failing with "Must provide region information" or
|
|
33
|
+
"Input required and not supplied: aws-region".
|
|
34
|
+
|
|
35
|
+
Additional breaking changes between v1 and v4 that affect real workflows:
|
|
36
|
+
|
|
37
|
+
1. aws-region is now required (was optional in v1 when AWS_DEFAULT_REGION was set)
|
|
38
|
+
2. mask-aws-account-id is now always true and cannot be disabled — workflows
|
|
39
|
+
logging the account ID for debugging will see '***' in all log output
|
|
40
|
+
3. OIDC token audience: v4 defaults to 'sts.amazonaws.com'; older IAM OIDC
|
|
41
|
+
trust policies configured for a different audience must be updated
|
|
42
|
+
4. Node.js runtime: updated from Node 16 to Node 20, which may cause issues
|
|
43
|
+
on very old self-hosted runners (Node 20 requires glibc 2.17+)
|
|
44
|
+
5. role-session-name auto-generation format changed — if downstream IAM policies
|
|
45
|
+
or CloudTrail queries match on session name patterns, they may stop matching
|
|
46
|
+
fix: |
|
|
47
|
+
Add an explicit aws-region input to every configure-aws-credentials step.
|
|
48
|
+
|
|
49
|
+
For OIDC-based auth, also verify your IAM trust policy's Condition block is
|
|
50
|
+
compatible with the @v4 defaults (audience: sts.amazonaws.com, subject claim
|
|
51
|
+
format: repo:OWNER/REPO:ref:refs/heads/BRANCH).
|
|
52
|
+
|
|
53
|
+
Store the region in a repository or organization variable (vars.AWS_REGION)
|
|
54
|
+
to avoid hardcoding the same region string across multiple workflow files.
|
|
55
|
+
fix_code:
|
|
56
|
+
- language: yaml
|
|
57
|
+
label: "configure-aws-credentials@v4 with required aws-region (OIDC)"
|
|
58
|
+
code: |
|
|
59
|
+
jobs:
|
|
60
|
+
deploy:
|
|
61
|
+
runs-on: ubuntu-latest
|
|
62
|
+
permissions:
|
|
63
|
+
id-token: write # Required for OIDC
|
|
64
|
+
contents: read
|
|
65
|
+
steps:
|
|
66
|
+
- uses: actions/checkout@v4
|
|
67
|
+
|
|
68
|
+
- name: Configure AWS credentials
|
|
69
|
+
uses: aws-actions/configure-aws-credentials@v4
|
|
70
|
+
with:
|
|
71
|
+
aws-region: us-east-1 # Required in v4 (was optional in v1)
|
|
72
|
+
role-to-assume: ${{ vars.AWS_ROLE_ARN }}
|
|
73
|
+
role-session-name: GitHubActionsSession
|
|
74
|
+
|
|
75
|
+
- name: Deploy
|
|
76
|
+
run: aws s3 sync dist/ s3://${{ vars.S3_BUCKET }}/
|
|
77
|
+
- language: yaml
|
|
78
|
+
label: "configure-aws-credentials@v4 with static key auth"
|
|
79
|
+
code: |
|
|
80
|
+
jobs:
|
|
81
|
+
deploy:
|
|
82
|
+
runs-on: ubuntu-latest
|
|
83
|
+
steps:
|
|
84
|
+
- uses: actions/checkout@v4
|
|
85
|
+
|
|
86
|
+
- name: Configure AWS credentials (static keys)
|
|
87
|
+
uses: aws-actions/configure-aws-credentials@v4
|
|
88
|
+
with:
|
|
89
|
+
aws-region: ${{ vars.AWS_REGION }} # Use variable, not hardcoded
|
|
90
|
+
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
|
|
91
|
+
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
|
|
92
|
+
|
|
93
|
+
- name: Deploy
|
|
94
|
+
run: aws s3 sync dist/ s3://${{ vars.S3_BUCKET }}/
|
|
95
|
+
prevention:
|
|
96
|
+
- "Always specify aws-region explicitly in every configure-aws-credentials step — never rely on AWS_DEFAULT_REGION"
|
|
97
|
+
- "Store the AWS region in a repository variable (vars.AWS_REGION) to keep it consistent and easy to change"
|
|
98
|
+
- "When Dependabot bumps configure-aws-credentials to a new major version, review the release notes and test in a non-production environment first"
|
|
99
|
+
- "After bumping to v4, validate your IAM OIDC trust policy: the audience should be 'sts.amazonaws.com' and the subject claim format should match repo:OWNER/REPO:ref:refs/..."
|
|
100
|
+
- "Use actionlint locally to catch missing required inputs before committing workflow files"
|
|
101
|
+
docs:
|
|
102
|
+
- url: "https://github.com/aws-actions/configure-aws-credentials"
|
|
103
|
+
label: "aws-actions/configure-aws-credentials — README and migration guide"
|
|
104
|
+
- url: "https://github.com/aws-actions/configure-aws-credentials/releases"
|
|
105
|
+
label: "aws-actions/configure-aws-credentials — Release notes (v4 breaking changes)"
|
|
106
|
+
- url: "https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_oidc.html"
|
|
107
|
+
label: "AWS Docs — Creating OpenID Connect identity providers"
|
|
108
|
+
- url: "https://docs.github.com/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services"
|
|
109
|
+
label: "GitHub Docs — Configuring OIDC in Amazon Web Services"
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
id: runner-environment-118
|
|
2
|
+
title: "Node.js 20 actions deprecated — forced to Node.js 24 runtime starting June 16, 2026"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: warning
|
|
5
|
+
tags:
|
|
6
|
+
- node-20
|
|
7
|
+
- node-24
|
|
8
|
+
- deprecation
|
|
9
|
+
- actions-runtime
|
|
10
|
+
- checkout
|
|
11
|
+
- setup-node
|
|
12
|
+
- self-hosted-runner
|
|
13
|
+
patterns:
|
|
14
|
+
- regex: 'Node\.js 20 actions are deprecated'
|
|
15
|
+
flags: 'i'
|
|
16
|
+
- regex: 'forced to run with Node\.js 24 by default'
|
|
17
|
+
flags: 'i'
|
|
18
|
+
- regex: 'using:\s*node20'
|
|
19
|
+
flags: 'i'
|
|
20
|
+
- regex: 'ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION'
|
|
21
|
+
flags: 'i'
|
|
22
|
+
error_messages:
|
|
23
|
+
- "Node.js 20 actions are deprecated. Actions will be forced to run with Node.js 24 by default starting June 16th, 2026."
|
|
24
|
+
- "Node.js 20 will be removed from the runner on September 16th, 2026."
|
|
25
|
+
- "Please check if updated versions of these actions are available that support Node.js 24."
|
|
26
|
+
root_cause: |
|
|
27
|
+
GitHub deprecated Node.js 20 as the runtime for GitHub Actions in September 2025
|
|
28
|
+
(https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/).
|
|
29
|
+
Starting June 16, 2026, actions that declare `using: node20` are force-upgraded to
|
|
30
|
+
Node.js 24 on hosted runners. Node.js 20 will be fully removed from hosted runners
|
|
31
|
+
on September 16, 2026.
|
|
32
|
+
|
|
33
|
+
This affects two distinct scenarios:
|
|
34
|
+
|
|
35
|
+
1. First-party GitHub-maintained actions (actions/checkout@v4, actions/setup-node@v4,
|
|
36
|
+
actions/upload-artifact@v4, etc.) — GitHub is updating these actions to ship Node.js 24
|
|
37
|
+
variants. Pinning to older major versions (e.g., @v4 without updating) will trigger
|
|
38
|
+
the deprecation warning until updated versions are pinned.
|
|
39
|
+
|
|
40
|
+
2. Community and custom actions that declare `using: node20` in their action.yml —
|
|
41
|
+
these will be silently force-upgraded to Node.js 24, which may break actions that
|
|
42
|
+
rely on Node.js 20 APIs, native modules compiled for Node 20, or behavior differences
|
|
43
|
+
between Node 20 and Node 24 (e.g., stricter URL parsing, OpenSSL changes).
|
|
44
|
+
|
|
45
|
+
3. Self-hosted runners with Node.js 18/20 installed — if the runner does not have
|
|
46
|
+
Node.js 24 available and FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 is set to true, the
|
|
47
|
+
action will fail to find a suitable runtime.
|
|
48
|
+
|
|
49
|
+
The deprecation warning appears as an annotation on every workflow run that uses an
|
|
50
|
+
affected action. While currently advisory, it becomes a hard failure on September 16, 2026.
|
|
51
|
+
fix: |
|
|
52
|
+
Update all first-party GitHub actions to their latest versions that ship Node.js 24
|
|
53
|
+
support. For actions/checkout, setup-node, upload-artifact, download-artifact, and
|
|
54
|
+
other official actions, check the latest release tag.
|
|
55
|
+
|
|
56
|
+
For self-hosted runners, install Node.js 24 on the runner host before June 16, 2026.
|
|
57
|
+
|
|
58
|
+
For custom or community actions you maintain, update action.yml to declare
|
|
59
|
+
`using: node24` and update package.json to target Node.js 24.
|
|
60
|
+
|
|
61
|
+
To opt in early and test Node.js 24 behavior before the forced cutover, set the
|
|
62
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24 environment variable to `true` in your workflow
|
|
63
|
+
or at the runner level.
|
|
64
|
+
fix_code:
|
|
65
|
+
- language: yaml
|
|
66
|
+
label: "Update first-party actions to Node.js 24 compatible versions"
|
|
67
|
+
code: |
|
|
68
|
+
jobs:
|
|
69
|
+
build:
|
|
70
|
+
runs-on: ubuntu-latest
|
|
71
|
+
steps:
|
|
72
|
+
# Update to latest versions that support Node.js 24
|
|
73
|
+
- uses: actions/checkout@v4.2.2 # or latest v5 when available
|
|
74
|
+
- uses: actions/setup-node@v4.1.0 # or latest
|
|
75
|
+
- uses: actions/upload-artifact@v4.4.0 # or latest
|
|
76
|
+
- uses: actions/download-artifact@v4.2.0
|
|
77
|
+
- language: yaml
|
|
78
|
+
label: "Opt in early to Node.js 24 for testing"
|
|
79
|
+
code: |
|
|
80
|
+
env:
|
|
81
|
+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: 'true'
|
|
82
|
+
|
|
83
|
+
jobs:
|
|
84
|
+
build:
|
|
85
|
+
runs-on: ubuntu-latest
|
|
86
|
+
steps:
|
|
87
|
+
- uses: actions/checkout@v4
|
|
88
|
+
- name: Run build
|
|
89
|
+
run: npm ci && npm run build
|
|
90
|
+
prevention:
|
|
91
|
+
- "Pin actions to specific minor versions (e.g., @v4.2.2) and use Dependabot or Renovate to auto-update them"
|
|
92
|
+
- "Add FORCE_JAVASCRIPT_ACTIONS_TO_NODE24=true to workflow env to test Node.js 24 compatibility before the forced cutover"
|
|
93
|
+
- "For self-hosted runners, ensure Node.js 24 is installed and available on PATH before June 16, 2026"
|
|
94
|
+
- "Audit custom actions in your organization for `using: node20` declarations and update them to `using: node24`"
|
|
95
|
+
- "Subscribe to the GitHub Changelog (https://github.blog/changelog/) to catch runtime deprecations early"
|
|
96
|
+
docs:
|
|
97
|
+
- url: "https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/"
|
|
98
|
+
label: "GitHub Changelog — Deprecation of Node.js 20 on GitHub Actions runners (Sept 2025)"
|
|
99
|
+
- url: "https://docs.github.com/en/actions/sharing-automations/creating-actions/metadata-syntax-for-github-actions#runsusing"
|
|
100
|
+
label: "GitHub Docs — Action metadata syntax: runs.using"
|
|
101
|
+
- url: "https://nodejs.org/en/about/previous-releases"
|
|
102
|
+
label: "Node.js release schedule — LTS lifecycle"
|