@htekdev/actions-debugger 1.0.22 → 1.0.24
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/artifact-minimum-retention-one-day.yml +153 -0
- package/errors/caching-artifacts/cache-api-propagation-delay-post-save.yml +128 -0
- package/errors/caching-artifacts/cache-backend-internal-error-skipped.yml +75 -0
- package/errors/caching-artifacts/cache-hit-step-id-case-sensitive-mismatch.yml +95 -0
- package/errors/caching-artifacts/cache-save-post-step-skipped-on-failure.yml +114 -0
- package/errors/concurrency-timing/deploy-pages-in-progress-deployment-wedged.yml +70 -0
- package/errors/concurrency-timing/deployment-review-timeout-expired.yml +88 -0
- package/errors/concurrency-timing/job-concurrency-scope-per-run-not-global.yml +81 -0
- package/errors/concurrency-timing/merge-queue-concurrency-cancel-blocks-all.yml +86 -0
- package/errors/concurrency-timing/reusable-workflow-github-workflow-context-cancel.yml +124 -0
- package/errors/concurrency-timing/runner-scale-set-jobs-never-start.yml +123 -0
- package/errors/concurrency-timing/runner-temp-dir-race-concurrent-workers.yml +90 -0
- package/errors/known-unsolved/artifact-download-url-unauthenticated-404.yml +98 -0
- package/errors/known-unsolved/checkout-v6-credentials-docker-run-manual.yml +105 -0
- package/errors/known-unsolved/concurrency-groups-repo-scoped-only.yml +138 -0
- package/errors/known-unsolved/matrix-256-job-limit.yml +142 -0
- package/errors/known-unsolved/merge-group-paths-filter-not-supported.yml +137 -0
- package/errors/known-unsolved/no-job-allow-failure.yml +73 -0
- package/errors/known-unsolved/reusable-secrets-inherit-not-deep-forwarded.yml +113 -0
- package/errors/known-unsolved/schedule-cron-hours-long-queue-drift.yml +101 -0
- package/errors/permissions-auth/checkout-persist-credentials-token-write.yml +90 -0
- package/errors/permissions-auth/create-github-app-token-cross-job-token-revoked.yml +95 -0
- package/errors/permissions-auth/github-token-contents-write-missing-git-push.yml +117 -0
- package/errors/permissions-auth/org-actions-policy-blocks-unapproved-action.yml +106 -0
- package/errors/runner-environment/codeql-action-v2-deprecated.yml +110 -0
- package/errors/runner-environment/macos-26-openssl-3-system-library-breaking.yml +114 -0
- package/errors/runner-environment/macos-26-ruby-34-default-upgrade.yml +114 -0
- package/errors/runner-environment/macos-26-xcode-default-265-pin-required.yml +99 -0
- package/errors/runner-environment/macos-latest-label-switches-to-macos26.yml +127 -0
- package/errors/runner-environment/node20-removed-toolcache-default-node22.yml +104 -0
- package/errors/runner-environment/org-runner-group-dispatch-null.yml +102 -0
- package/errors/runner-environment/powershell-74-76-threadjob-module-rename.yml +124 -0
- package/errors/runner-environment/self-hosted-runner-not-found.yml +134 -0
- package/errors/runner-environment/self-hosted-runner-selinux-service-exec-failure.yml +116 -0
- package/errors/runner-environment/service-container-no-healthcheck.yml +158 -0
- package/errors/runner-environment/setup-node-v5-corepack-pnpm-not-found.yml +101 -0
- package/errors/runner-environment/setup-node-yarn-not-installed-self-hosted.yml +76 -0
- package/errors/runner-environment/setup-python-externally-managed-env-error.yml +95 -0
- package/errors/runner-environment/windows-2019-runner-retired-june2025.yml +118 -0
- package/errors/runner-environment/windows-2022-docker-daemon-not-started.yml +108 -0
- package/errors/silent-failures/cache-hit-output-string-not-boolean.yml +96 -0
- package/errors/silent-failures/checkout-lfs-pointer-not-content.yml +105 -0
- package/errors/silent-failures/reusable-workflow-output-skipped-contains-secret.yml +115 -0
- package/errors/silent-failures/setup-node-silent-download-exit-zero.yml +105 -0
- package/errors/silent-failures/setup-python-truncated-manifest-silent-exit.yml +111 -0
- package/errors/silent-failures/undefined-env-expression-empty-string-silent.yml +115 -0
- package/errors/silent-failures/windows-powershell-github-output-bash-syntax.yml +118 -0
- package/errors/triggers/fork-pr-first-time-contributor-approval-required.yml +142 -0
- package/errors/triggers/on-push-branches-glob-star-no-slash-match.yml +78 -0
- package/errors/triggers/pull-request-target-env-protection-default-branch-eval.yml +117 -0
- package/errors/triggers/required-status-check-renamed-never-passes.yml +87 -0
- package/errors/triggers/schedule-cron-self-hosted-runner-not-triggered.yml +107 -0
- package/errors/triggers/workflow-run-checkout-uses-default-branch.yml +114 -0
- package/errors/yaml-syntax/composite-action-run-shell-missing.yml +90 -0
- package/errors/yaml-syntax/composite-action-secrets-context-unavailable.yml +99 -0
- package/errors/yaml-syntax/github-script-octokit-renamed-to-github.yml +130 -0
- package/errors/yaml-syntax/labeler-v5-config-format-breaking.yml +67 -0
- package/errors/yaml-syntax/reusable-workflow-nesting-depth-exceeded.yml +113 -0
- package/errors/yaml-syntax/runs-on-expression-array-syntax-error.yml +121 -0
- package/errors/yaml-syntax/setup-go-matrix-version-float-coercion.yml +69 -0
- package/package.json +1 -1
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
id: permissions-auth-026
|
|
2
|
+
title: "Org Actions Policy Blocks Workflow — Action Not in Allowlist"
|
|
3
|
+
category: permissions-auth
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- org-policy
|
|
7
|
+
- allowlist
|
|
8
|
+
- action-policy
|
|
9
|
+
- enterprise
|
|
10
|
+
- third-party-actions
|
|
11
|
+
- settings
|
|
12
|
+
- admin
|
|
13
|
+
patterns:
|
|
14
|
+
- regex: "is not allowed to run\\. If you believe this action should be allowed"
|
|
15
|
+
flags: "i"
|
|
16
|
+
- regex: "'[^']+' is not allowed"
|
|
17
|
+
flags: "i"
|
|
18
|
+
- regex: "Action .+ is not allowed by the organization"
|
|
19
|
+
flags: "i"
|
|
20
|
+
- regex: "This action is not allowed"
|
|
21
|
+
flags: "i"
|
|
22
|
+
error_messages:
|
|
23
|
+
- "Error: Action 'actions/setup-node@v4' is not allowed. If you believe this action should be allowed, ask your GitHub org admin to approve it."
|
|
24
|
+
- "'owner/action@v2' is not allowed to run. If you believe this action should be allowed, ask your organization's GitHub Actions admin to allow it."
|
|
25
|
+
- "This action is not allowed because your organization has restricted which actions can be used in workflows."
|
|
26
|
+
root_cause: |
|
|
27
|
+
GitHub organizations and enterprises can restrict which GitHub Actions are permitted
|
|
28
|
+
to run via Settings → Actions → General → "Allow select actions and reusable workflows".
|
|
29
|
+
When this policy is enabled, any workflow referencing an action not on the approved list
|
|
30
|
+
fails immediately at queue time with "is not allowed" — no job steps execute.
|
|
31
|
+
|
|
32
|
+
Three policy modes exist:
|
|
33
|
+
1. **Allow all actions** (default) — no restrictions.
|
|
34
|
+
2. **Allow GitHub-created actions only** — only `actions/*`, `github/*` etc. permitted.
|
|
35
|
+
3. **Allow select actions** — explicit allowlist + optional pattern-matching rules.
|
|
36
|
+
|
|
37
|
+
Common failure scenarios:
|
|
38
|
+
- A developer adds a popular marketplace action (e.g., `slackapi/slack-github-action`)
|
|
39
|
+
that hasn't been pre-approved by the org admin.
|
|
40
|
+
- A new CI requirement introduces a third-party security scanner that isn't allowlisted.
|
|
41
|
+
- An internal action is referenced before the admin adds the pattern to the allowlist.
|
|
42
|
+
- After an org migration, the allowlist from the source org is not reproduced in the
|
|
43
|
+
target org.
|
|
44
|
+
|
|
45
|
+
The error surfaces in the "Set up job" phase, before any workflow steps run, making
|
|
46
|
+
it look like a runner or permissions issue rather than an org policy issue. Developers
|
|
47
|
+
without org admin access cannot fix this themselves.
|
|
48
|
+
fix: |
|
|
49
|
+
An organization admin must update the Actions policy:
|
|
50
|
+
|
|
51
|
+
Settings → Actions → General → "Allow select actions and reusable workflows"
|
|
52
|
+
|
|
53
|
+
Options:
|
|
54
|
+
1. **Allowlist specific actions**: Add the required action pattern (e.g.,
|
|
55
|
+
`slackapi/slack-github-action@*`) to the allowed list.
|
|
56
|
+
2. **Allow GitHub-owned and verified creator actions**: Enables all verified marketplace
|
|
57
|
+
actions without individual approval.
|
|
58
|
+
3. **Allow all actions**: Remove policy restrictions entirely (not recommended for
|
|
59
|
+
security-sensitive orgs).
|
|
60
|
+
|
|
61
|
+
For enterprise-managed repos, the enterprise-level policy may override org-level
|
|
62
|
+
settings — check Settings → Enterprise → Policies → Actions.
|
|
63
|
+
fix_code:
|
|
64
|
+
- language: yaml
|
|
65
|
+
label: "Temporary workaround — pin action SHA to bypass tag-based allowlist patterns"
|
|
66
|
+
code: |
|
|
67
|
+
# If the org allowlist accepts SHA-pinned actions:
|
|
68
|
+
# Replace the version tag with the commit SHA of the same version.
|
|
69
|
+
# (Some org policies allow SHA-pinned actions even if the tag isn't approved.)
|
|
70
|
+
|
|
71
|
+
steps:
|
|
72
|
+
# Instead of: uses: slackapi/slack-github-action@v1.24.0
|
|
73
|
+
- uses: slackapi/slack-github-action@6c661ce58804a1a20f6dc5fbee7f0381b469e001 # v1.24.0
|
|
74
|
+
with:
|
|
75
|
+
channel-id: 'C12345'
|
|
76
|
+
- language: yaml
|
|
77
|
+
label: "Use a GitHub-owned alternative when allowlist blocks third-party action"
|
|
78
|
+
code: |
|
|
79
|
+
# Example: replace a third-party notification action with curl + GITHUB_TOKEN
|
|
80
|
+
- name: Post to Slack via webhook (no third-party action needed)
|
|
81
|
+
run: |
|
|
82
|
+
curl -X POST "${{ secrets.SLACK_WEBHOOK_URL }}" \
|
|
83
|
+
-H 'Content-type: application/json' \
|
|
84
|
+
--data '{"text":"Deploy finished: ${{ github.run_url }}"}'
|
|
85
|
+
- language: yaml
|
|
86
|
+
label: "Check which actions are permitted before adding new dependencies"
|
|
87
|
+
code: |
|
|
88
|
+
# There is no API to check allowlist programmatically — use the UI:
|
|
89
|
+
# Settings → Actions → General → "Allowed actions and reusable workflows"
|
|
90
|
+
# Or check via REST API (org admins only):
|
|
91
|
+
# GET /orgs/{org}/actions/permissions/selected-actions
|
|
92
|
+
prevention:
|
|
93
|
+
- "Document the org's action allowlist policy in your CONTRIBUTING.md or developer onboarding guide so developers know to request approval before adding new actions."
|
|
94
|
+
- "Use Dependabot for GitHub Actions updates — approved actions stay approved when bumping minor/patch versions if the org uses wildcard patterns (e.g., `slackapi/slack-github-action@*`)."
|
|
95
|
+
- "Prefer GitHub-owned actions (`actions/*`, `github/*`) and verified creator actions to minimize allowlist friction."
|
|
96
|
+
- "Create an internal Slack/Teams channel or GitHub Discussion where developers can request new action approvals from org admins."
|
|
97
|
+
- "Use the GitHub REST API (`GET /orgs/{org}/actions/permissions/selected-actions`) to audit and document the current allowlist for new-member onboarding."
|
|
98
|
+
docs:
|
|
99
|
+
- url: "https://docs.github.com/en/organizations/managing-organization-settings/disabling-or-limiting-github-actions-for-your-organization"
|
|
100
|
+
label: "GitHub Docs: Disabling or limiting GitHub Actions for your organization"
|
|
101
|
+
- url: "https://docs.github.com/en/rest/actions/permissions"
|
|
102
|
+
label: "GitHub REST API: Actions Permissions"
|
|
103
|
+
- url: "https://github.blog/changelog/2026-02-05-github-actions-early-february-2026-updates/"
|
|
104
|
+
label: "GitHub Changelog: Actions early February 2026 updates (action allowlisting)"
|
|
105
|
+
- url: "https://docs.github.com/en/enterprise-cloud@latest/admin/policies/enforcing-policies-for-your-enterprise/enforcing-policies-for-github-actions-in-your-enterprise"
|
|
106
|
+
label: "GitHub Docs: Enforcing GitHub Actions policies in your enterprise"
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
id: runner-environment-061
|
|
2
|
+
title: "CodeQL Action v1/v2 Deprecated — Hard Failure with Upgrade Required Message"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- codeql
|
|
7
|
+
- code-scanning
|
|
8
|
+
- deprecated
|
|
9
|
+
- v2
|
|
10
|
+
- v3
|
|
11
|
+
- security
|
|
12
|
+
- breaking-change
|
|
13
|
+
patterns:
|
|
14
|
+
- regex: "CodeQL Action major versions v1 and v2 have been deprecated"
|
|
15
|
+
flags: "i"
|
|
16
|
+
- regex: "Please update all occurrences of the CodeQL Action in your workflow files to v3"
|
|
17
|
+
flags: "i"
|
|
18
|
+
- regex: "github/codeql-action/.*@v[12]\\b"
|
|
19
|
+
flags: "i"
|
|
20
|
+
error_messages:
|
|
21
|
+
- "Error: CodeQL Action major versions v1 and v2 have been deprecated. Please update all occurrences of the CodeQL Action in your workflow files to v3. For more information, see https://github.blog/changelog/2025-01-10-code-scanning-codeql-action-v2-is-now-deprecated/"
|
|
22
|
+
- "CodeQL Action v2 is now deprecated. Upgrade to v3."
|
|
23
|
+
root_cause: |
|
|
24
|
+
GitHub retired CodeQL Action major versions v1 and v2 in January 2025. After the
|
|
25
|
+
retirement date, any workflow referencing `github/codeql-action/*@v1` or
|
|
26
|
+
`github/codeql-action/*@v2` produces a hard failure with the above error message
|
|
27
|
+
and does NOT perform code scanning.
|
|
28
|
+
|
|
29
|
+
The CodeQL action family includes multiple steps that must ALL be updated together:
|
|
30
|
+
- `github/codeql-action/init@v2`
|
|
31
|
+
- `github/codeql-action/autobuild@v2`
|
|
32
|
+
- `github/codeql-action/analyze@v2`
|
|
33
|
+
- `github/codeql-action/upload-sarif@v2`
|
|
34
|
+
- `github/codeql-action/resolve-environment@v2`
|
|
35
|
+
|
|
36
|
+
Missing even one of these (leaving it at `@v2` while updating others to `@v3`)
|
|
37
|
+
causes the workflow to fail. Repos created before 2024 using the default
|
|
38
|
+
GitHub-provided Code Scanning setup workflow are the most common source of
|
|
39
|
+
stale v2 references.
|
|
40
|
+
|
|
41
|
+
This is distinct from the generic `deprecated-action-version-auto-rejected` pattern
|
|
42
|
+
(runner-environment-037) which covers specific minor/patch versions of actions/cache,
|
|
43
|
+
actions/checkout, etc. The CodeQL deprecation applies to entire major versions v1 and v2
|
|
44
|
+
and produces a specific, different error message.
|
|
45
|
+
fix: |
|
|
46
|
+
Replace every `github/codeql-action/*@v2` (and `@v1`) reference in all workflow files
|
|
47
|
+
with the corresponding `@v3` tag. All steps in the CodeQL workflow must be updated
|
|
48
|
+
together — a partial update (e.g., `init@v3` but `analyze@v2`) will still fail.
|
|
49
|
+
|
|
50
|
+
After updating, verify the workflow runs successfully by checking the Actions tab
|
|
51
|
+
and the Security → Code Scanning alerts page.
|
|
52
|
+
fix_code:
|
|
53
|
+
- language: yaml
|
|
54
|
+
label: "Updated CodeQL workflow using v3 (all steps)"
|
|
55
|
+
code: |
|
|
56
|
+
name: "CodeQL Analysis"
|
|
57
|
+
on:
|
|
58
|
+
push:
|
|
59
|
+
branches: ["main"]
|
|
60
|
+
pull_request:
|
|
61
|
+
branches: ["main"]
|
|
62
|
+
schedule:
|
|
63
|
+
- cron: '0 6 * * 1'
|
|
64
|
+
|
|
65
|
+
jobs:
|
|
66
|
+
analyze:
|
|
67
|
+
name: Analyze (${{ matrix.language }})
|
|
68
|
+
runs-on: ubuntu-latest
|
|
69
|
+
permissions:
|
|
70
|
+
actions: read
|
|
71
|
+
contents: read
|
|
72
|
+
security-events: write
|
|
73
|
+
|
|
74
|
+
strategy:
|
|
75
|
+
matrix:
|
|
76
|
+
language: ['javascript', 'python']
|
|
77
|
+
|
|
78
|
+
steps:
|
|
79
|
+
- name: Checkout repository
|
|
80
|
+
uses: actions/checkout@v4
|
|
81
|
+
|
|
82
|
+
- name: Initialize CodeQL
|
|
83
|
+
uses: github/codeql-action/init@v3 # ← was @v2
|
|
84
|
+
with:
|
|
85
|
+
languages: ${{ matrix.language }}
|
|
86
|
+
|
|
87
|
+
- name: Autobuild
|
|
88
|
+
uses: github/codeql-action/autobuild@v3 # ← was @v2
|
|
89
|
+
|
|
90
|
+
- name: Perform CodeQL Analysis
|
|
91
|
+
uses: github/codeql-action/analyze@v3 # ← was @v2
|
|
92
|
+
with:
|
|
93
|
+
category: "/language:${{ matrix.language }}"
|
|
94
|
+
- language: yaml
|
|
95
|
+
label: "Bulk-find stale v2 references (shell one-liner)"
|
|
96
|
+
code: |
|
|
97
|
+
# Run from repo root to find all @v1 or @v2 codeql-action references:
|
|
98
|
+
# grep -rn "codeql-action/.*@v[12]" .github/workflows/
|
|
99
|
+
prevention:
|
|
100
|
+
- "Use Dependabot for GitHub Actions to automatically open PRs when actions release new major versions."
|
|
101
|
+
- "Enable the 'Actions' section in Dependabot config (`package-ecosystem: github-actions`) for all repos with CodeQL workflows."
|
|
102
|
+
- "After any CodeQL major version update, verify Security → Code Scanning shows recent scans with no 'Tool not recognized' errors."
|
|
103
|
+
- "Search all workflow files for `codeql-action` references before major GitHub deprecation windows."
|
|
104
|
+
docs:
|
|
105
|
+
- url: "https://github.blog/changelog/2025-01-10-code-scanning-codeql-action-v2-is-now-deprecated/"
|
|
106
|
+
label: "GitHub Changelog: Code scanning — CodeQL Action v2 is now deprecated (Jan 2025)"
|
|
107
|
+
- url: "https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages"
|
|
108
|
+
label: "GitHub Docs: CodeQL code scanning for compiled languages"
|
|
109
|
+
- url: "https://github.com/github/codeql-action/releases"
|
|
110
|
+
label: "github/codeql-action Releases — v3 changelog"
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
id: runner-environment-070
|
|
2
|
+
title: "macOS 26 Upgrades OpenSSL from 1.1.1 to 3.x — Hardcoded openssl@1.1 Paths Break"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- macos
|
|
7
|
+
- openssl
|
|
8
|
+
- macos-26
|
|
9
|
+
- runner-image
|
|
10
|
+
- breaking-change
|
|
11
|
+
- homebrew
|
|
12
|
+
patterns:
|
|
13
|
+
- regex: "Library not loaded.*openssl@1\\.1.*libssl\\.1\\.1\\.dylib"
|
|
14
|
+
flags: "i"
|
|
15
|
+
- regex: "ld.*library not found.*-lssl|cannot find.*libssl\\.1\\.1"
|
|
16
|
+
flags: "i"
|
|
17
|
+
- regex: "openssl@1\\.1.*not installed|brew.*openssl@1\\.1.*no longer"
|
|
18
|
+
flags: "i"
|
|
19
|
+
- regex: "Could not find OpenSSL|ssl.*version.*mismatch.*1\\.1"
|
|
20
|
+
flags: "i"
|
|
21
|
+
- regex: "OpenSSL 1\\.1\\.1.*required.*OpenSSL 3"
|
|
22
|
+
flags: "i"
|
|
23
|
+
error_messages:
|
|
24
|
+
- "Library not loaded: /usr/local/opt/openssl@1.1/lib/libssl.1.1.dylib"
|
|
25
|
+
- "Library not loaded: /opt/homebrew/opt/openssl@1.1/lib/libssl.1.1.dylib"
|
|
26
|
+
- "ld: library not found for -lssl (referenced from build target)"
|
|
27
|
+
- "Could not find a package configuration file provided by 'OpenSSL'"
|
|
28
|
+
- "Could not link to OpenSSL library. Please install OpenSSL."
|
|
29
|
+
root_cause: |
|
|
30
|
+
When macos-latest migrates to macos-26 (rolling out June 15 through July 15, 2026),
|
|
31
|
+
the system OpenSSL jumps from OpenSSL 1.1.1w (the last 1.x release, now EOL)
|
|
32
|
+
to OpenSSL 3.6.2. This is a major version change with breaking ABI differences.
|
|
33
|
+
|
|
34
|
+
Any workflow that hardcodes openssl@1.1 Homebrew paths or links against the
|
|
35
|
+
1.1.x shared libraries will fail because:
|
|
36
|
+
|
|
37
|
+
- Homebrew's openssl@1.1 formula is deprecated on macOS 26
|
|
38
|
+
- The shared library /opt/homebrew/opt/openssl@1.1/lib/libssl.1.1.dylib
|
|
39
|
+
no longer exists; it is replaced by openssl@3
|
|
40
|
+
- PKG_CONFIG_PATH and LDFLAGS pointing to openssl@1.1 resolve to nothing
|
|
41
|
+
|
|
42
|
+
Common breakage surfaces:
|
|
43
|
+
- Ruby gems with native extensions (openssl gem links against system OpenSSL)
|
|
44
|
+
- Python packages (pyOpenSSL, cryptography) that link against 1.x path
|
|
45
|
+
- CMake projects using find_package(OpenSSL) finding incompatible version
|
|
46
|
+
- Homebrew formulas linking transitively against openssl@1.1
|
|
47
|
+
|
|
48
|
+
Source: runner-images#14167 — macOS 15 vs macOS 26 software diff shows
|
|
49
|
+
OpenSSL jumps from 1.1.1w to 3.6.2.
|
|
50
|
+
fix: |
|
|
51
|
+
Replace all openssl@1.1 references with openssl@3 (installed by default on macOS 26).
|
|
52
|
+
|
|
53
|
+
For Homebrew-based builds, use dynamic path detection:
|
|
54
|
+
OPENSSL_DIR=$(brew --prefix openssl@3)
|
|
55
|
+
export LDFLAGS="-L${OPENSSL_DIR}/lib"
|
|
56
|
+
export PKG_CONFIG_PATH="${OPENSSL_DIR}/lib/pkgconfig"
|
|
57
|
+
|
|
58
|
+
For Ruby gem compilation:
|
|
59
|
+
bundle config build.openssl --with-openssl-dir=$(brew --prefix openssl@3)
|
|
60
|
+
|
|
61
|
+
For CMake, pass OPENSSL_ROOT_DIR:
|
|
62
|
+
cmake -DOPENSSL_ROOT_DIR=$(brew --prefix openssl@3) ..
|
|
63
|
+
fix_code:
|
|
64
|
+
- language: yaml
|
|
65
|
+
label: "Dynamic OpenSSL path — works on both macOS 15 and macOS 26"
|
|
66
|
+
code: |
|
|
67
|
+
jobs:
|
|
68
|
+
build:
|
|
69
|
+
runs-on: macos-latest
|
|
70
|
+
steps:
|
|
71
|
+
- uses: actions/checkout@v4
|
|
72
|
+
|
|
73
|
+
- name: Set OpenSSL environment variables
|
|
74
|
+
run: |
|
|
75
|
+
OPENSSL_PREFIX=$(brew --prefix openssl)
|
|
76
|
+
echo "OPENSSL_DIR=$OPENSSL_PREFIX" >> $GITHUB_ENV
|
|
77
|
+
echo "LDFLAGS=-L$OPENSSL_PREFIX/lib" >> $GITHUB_ENV
|
|
78
|
+
echo "CPPFLAGS=-I$OPENSSL_PREFIX/include" >> $GITHUB_ENV
|
|
79
|
+
echo "PKG_CONFIG_PATH=$OPENSSL_PREFIX/lib/pkgconfig" >> $GITHUB_ENV
|
|
80
|
+
|
|
81
|
+
- name: Build project
|
|
82
|
+
run: cmake -B build -DOPENSSL_ROOT_DIR=$OPENSSL_DIR && cmake --build build
|
|
83
|
+
- language: yaml
|
|
84
|
+
label: "Ruby bundler — configure openssl@3 for native extension builds"
|
|
85
|
+
code: |
|
|
86
|
+
jobs:
|
|
87
|
+
ruby-build:
|
|
88
|
+
runs-on: macos-latest
|
|
89
|
+
steps:
|
|
90
|
+
- uses: actions/checkout@v4
|
|
91
|
+
- uses: ruby/setup-ruby@v1
|
|
92
|
+
with:
|
|
93
|
+
ruby-version: '3.4'
|
|
94
|
+
bundler-cache: true
|
|
95
|
+
|
|
96
|
+
- name: Configure OpenSSL for bundler
|
|
97
|
+
run: |
|
|
98
|
+
OPENSSL_DIR=$(brew --prefix openssl@3)
|
|
99
|
+
bundle config build.openssl --with-openssl-dir=$OPENSSL_DIR
|
|
100
|
+
|
|
101
|
+
- name: Install gems
|
|
102
|
+
run: bundle install
|
|
103
|
+
prevention:
|
|
104
|
+
- "Never hardcode openssl@1.1 paths — always use $(brew --prefix openssl) dynamically."
|
|
105
|
+
- "Test your macOS workflows on macos-26 before macos-latest migrates (June 15 to July 15, 2026)."
|
|
106
|
+
- "Use macos-15 label to pin to the older image while migrating OpenSSL dependencies."
|
|
107
|
+
- "For language setup actions, ensure you use recent versions that handle OpenSSL 3 automatically."
|
|
108
|
+
docs:
|
|
109
|
+
- url: "https://github.com/actions/runner-images/issues/14167"
|
|
110
|
+
label: "GitHub Announcement: macos-latest will use macos-26 in June 2026 (includes OpenSSL diff)"
|
|
111
|
+
- url: "https://www.openssl.org/news/changelog.html"
|
|
112
|
+
label: "OpenSSL 3.x Changelog"
|
|
113
|
+
- url: "https://docs.github.com/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners"
|
|
114
|
+
label: "About GitHub-hosted runners"
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
id: runner-environment-072
|
|
2
|
+
title: "macOS 26 Upgrades Default Ruby from 3.3 to 3.4 — Native Gem ABI Breaks"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- macos
|
|
7
|
+
- ruby
|
|
8
|
+
- macos-26
|
|
9
|
+
- runner-image
|
|
10
|
+
- breaking-change
|
|
11
|
+
- native-extensions
|
|
12
|
+
patterns:
|
|
13
|
+
- regex: 'incompatible library version.*\.bundle|LoadError.*incompatible library'
|
|
14
|
+
flags: "i"
|
|
15
|
+
- regex: 'ruby.*3\.3.*required.*3\.4|Gem.*compiled.*Ruby 3\.3.*running.*3\.4'
|
|
16
|
+
flags: "i"
|
|
17
|
+
- regex: "Bundler.*RUBY_VERSION.*mismatch|native extension.*wrong Ruby version"
|
|
18
|
+
flags: "i"
|
|
19
|
+
- regex: 'Error loading.*\.bundle.*built for Ruby 3\.3'
|
|
20
|
+
flags: "i"
|
|
21
|
+
error_messages:
|
|
22
|
+
- "LoadError: incompatible library version - /path/to/gem.bundle (expected 3.3, got 3.4)"
|
|
23
|
+
- "Bundler::GemNotFound: Could not find gem 'pg (>= 0) ruby' in locally installed gems"
|
|
24
|
+
- "An error occurred while installing nokogiri, and Bundler cannot continue."
|
|
25
|
+
- "Your Ruby version is 3.4.x, but your Gemfile specified 3.3.x"
|
|
26
|
+
root_cause: |
|
|
27
|
+
When macos-latest migrates to macos-26 (June 15 through July 15, 2026), the default
|
|
28
|
+
system Ruby version jumps from 3.3.11 to 3.4.9. This is a minor Ruby version change
|
|
29
|
+
but it breaks any workflow that:
|
|
30
|
+
|
|
31
|
+
1. Has a Gemfile or .ruby-version pinning Ruby 3.3.x
|
|
32
|
+
2. Uses cached gem bundles built against Ruby 3.3's C ABI (native extensions
|
|
33
|
+
like nokogiri, pg, mysql2, ffi compile to .bundle files tied to the Ruby ABI)
|
|
34
|
+
3. Hardcodes RUBY_VERSION in build scripts or Gemfile.lock references
|
|
35
|
+
|
|
36
|
+
Ruby native extensions (.bundle files) are ABI-specific — gems compiled against
|
|
37
|
+
Ruby 3.3 cannot be loaded by Ruby 3.4 and vice versa. If a workflow caches
|
|
38
|
+
bundled gems from a prior run on macos-15 (Ruby 3.3) and restores them on
|
|
39
|
+
macos-26 (Ruby 3.4), native extension gems will fail to load.
|
|
40
|
+
|
|
41
|
+
Source: runner-images#14167 — macOS 15 vs macOS 26 software diff shows Ruby
|
|
42
|
+
jumping from 3.3.11 to 3.4.9.
|
|
43
|
+
fix: |
|
|
44
|
+
Option 1 — Use ruby/setup-ruby to pin an explicit Ruby version (recommended):
|
|
45
|
+
- uses: ruby/setup-ruby@v1
|
|
46
|
+
with:
|
|
47
|
+
ruby-version: '3.3' # or '3.4' to target the new default
|
|
48
|
+
bundler-cache: true
|
|
49
|
+
|
|
50
|
+
Option 2 — Add .ruby-version file to your repo specifying the target Ruby version.
|
|
51
|
+
setup-ruby will read this automatically.
|
|
52
|
+
|
|
53
|
+
Option 3 — Update your Gemfile to remove Ruby version constraint or bump it to 3.4:
|
|
54
|
+
# In Gemfile, remove or update:
|
|
55
|
+
# ruby '3.3' <- remove or change to '3.4'
|
|
56
|
+
|
|
57
|
+
For cache invalidation: if you use actions/cache for bundler, include the Ruby
|
|
58
|
+
version in the cache key:
|
|
59
|
+
key: gems-${{ runner.os }}-ruby-${{ env.RUBY_VERSION }}-${{ hashFiles('**/Gemfile.lock') }}
|
|
60
|
+
fix_code:
|
|
61
|
+
- language: yaml
|
|
62
|
+
label: "Pin Ruby version with setup-ruby (cross-image safe)"
|
|
63
|
+
code: |
|
|
64
|
+
jobs:
|
|
65
|
+
test:
|
|
66
|
+
runs-on: macos-latest
|
|
67
|
+
steps:
|
|
68
|
+
- uses: actions/checkout@v4
|
|
69
|
+
|
|
70
|
+
- uses: ruby/setup-ruby@v1
|
|
71
|
+
with:
|
|
72
|
+
# Pin explicitly — do not rely on runner default Ruby
|
|
73
|
+
ruby-version: '3.4'
|
|
74
|
+
bundler-cache: true
|
|
75
|
+
|
|
76
|
+
- name: Run tests
|
|
77
|
+
run: bundle exec rspec
|
|
78
|
+
|
|
79
|
+
- language: yaml
|
|
80
|
+
label: "Cache key including Ruby version to avoid ABI mismatch"
|
|
81
|
+
code: |
|
|
82
|
+
jobs:
|
|
83
|
+
test:
|
|
84
|
+
runs-on: macos-latest
|
|
85
|
+
steps:
|
|
86
|
+
- uses: actions/checkout@v4
|
|
87
|
+
|
|
88
|
+
- uses: ruby/setup-ruby@v1
|
|
89
|
+
with:
|
|
90
|
+
ruby-version: '3.4'
|
|
91
|
+
|
|
92
|
+
- name: Cache bundler gems
|
|
93
|
+
uses: actions/cache@v4
|
|
94
|
+
with:
|
|
95
|
+
path: vendor/bundle
|
|
96
|
+
# Include Ruby version in cache key to prevent ABI mismatch
|
|
97
|
+
key: gems-${{ runner.os }}-ruby-${{ env.RUBY_VERSION }}-${{ hashFiles('**/Gemfile.lock') }}
|
|
98
|
+
restore-keys: |
|
|
99
|
+
gems-${{ runner.os }}-ruby-${{ env.RUBY_VERSION }}-
|
|
100
|
+
|
|
101
|
+
- name: Install gems
|
|
102
|
+
run: bundle install --path vendor/bundle
|
|
103
|
+
prevention:
|
|
104
|
+
- "Always use ruby/setup-ruby with an explicit ruby-version — never rely on the runner's default Ruby."
|
|
105
|
+
- "Include the Ruby version in bundler cache keys to prevent loading native gems built for a different Ruby ABI."
|
|
106
|
+
- "Add a .ruby-version file to your repository to make the intended Ruby version visible and enforceable."
|
|
107
|
+
- "Test on macos-26 before macos-latest migrates to catch Ruby 3.3 to 3.4 incompatibilities early."
|
|
108
|
+
docs:
|
|
109
|
+
- url: "https://github.com/actions/runner-images/issues/14167"
|
|
110
|
+
label: "GitHub Announcement: macos-latest will use macos-26 in June 2026 (includes Ruby version diff)"
|
|
111
|
+
- url: "https://github.com/ruby/setup-ruby"
|
|
112
|
+
label: "ruby/setup-ruby action"
|
|
113
|
+
- url: "https://www.ruby-lang.org/en/news/2024/12/25/ruby-3-4-0-released/"
|
|
114
|
+
label: "Ruby 3.4.0 Release Notes"
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
id: runner-environment-071
|
|
2
|
+
title: "macOS 26 Default Xcode Switches to 26.5 on June 8 2026 — Unpin to Fix"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: error
|
|
5
|
+
tags:
|
|
6
|
+
- macos
|
|
7
|
+
- xcode
|
|
8
|
+
- macos-26
|
|
9
|
+
- runner-image
|
|
10
|
+
- breaking-change
|
|
11
|
+
- ios
|
|
12
|
+
patterns:
|
|
13
|
+
- regex: 'Xcode.*26\.4\.1.*not found|xcode.*version.*26\.4.*unavailable'
|
|
14
|
+
flags: "i"
|
|
15
|
+
- regex: 'your project.*not compatible.*Xcode 26\.5|requires Xcode.*26\.4'
|
|
16
|
+
flags: "i"
|
|
17
|
+
- regex: 'xcodebuild.*error.*incompatible.*project|DT_TOOLCHAIN.*not found.*26\.5'
|
|
18
|
+
flags: "i"
|
|
19
|
+
- regex: 'error.*The iOS Simulator.*26\.1.*required.*26\.5'
|
|
20
|
+
flags: "i"
|
|
21
|
+
error_messages:
|
|
22
|
+
- "xcodebuild: error: The project requires Xcode 26.4.1, but the currently selected Xcode version is 26.5."
|
|
23
|
+
- "error: DT_TOOLCHAIN_DIR cannot be used to evaluate TOOLCHAIN_DIR. Use TOOLCHAINS setting instead."
|
|
24
|
+
- "Unable to boot the Simulator. The request to boot 'iOS 26.1 Simulator' was denied because the destination is incompatible with this version of Xcode."
|
|
25
|
+
root_cause: |
|
|
26
|
+
Starting June 8, 2026 (rolling out over 2-4 days), GitHub is changing the default
|
|
27
|
+
Xcode on macOS-26 runners from Xcode 26.4.1 to Xcode 26.5. Workflows running on
|
|
28
|
+
macos-26 or macos-latest (after the macos-latest migration completes) that do not
|
|
29
|
+
explicitly pin an Xcode version will automatically get Xcode 26.5.
|
|
30
|
+
|
|
31
|
+
Xcode 26.5 is a new major release and may introduce build incompatibilities:
|
|
32
|
+
- Project files referencing deprecated Xcode 26.4 APIs
|
|
33
|
+
- iOS/macOS Simulator runtimes that only match Xcode 26.4.1
|
|
34
|
+
- Swift toolchain behavior differences between 26.4.1 and 26.5
|
|
35
|
+
- Build setting migrations required by the new Xcode version
|
|
36
|
+
|
|
37
|
+
Source: runner-images#14172 — official GitHub announcement for macOS 26 Xcode
|
|
38
|
+
default change.
|
|
39
|
+
fix: |
|
|
40
|
+
Pin your Xcode version explicitly using either:
|
|
41
|
+
|
|
42
|
+
Option 1 — sudo xcode-select (no extra action required):
|
|
43
|
+
sudo xcode-select -s "/Applications/Xcode_26.4.1.app"
|
|
44
|
+
|
|
45
|
+
Option 2 — maxim-lobanov/setup-xcode action:
|
|
46
|
+
- uses: maxim-lobanov/setup-xcode@v1
|
|
47
|
+
with:
|
|
48
|
+
xcode-version: '26.4.1'
|
|
49
|
+
|
|
50
|
+
To list available Xcode versions on macos-26 runners, check the official
|
|
51
|
+
runner image documentation at:
|
|
52
|
+
https://github.com/actions/runner-images/blob/main/images/macos/macos-26-arm64-Readme.md#xcode
|
|
53
|
+
fix_code:
|
|
54
|
+
- language: yaml
|
|
55
|
+
label: "Pin Xcode version using setup-xcode action"
|
|
56
|
+
code: |
|
|
57
|
+
jobs:
|
|
58
|
+
build-ios:
|
|
59
|
+
runs-on: macos-26
|
|
60
|
+
steps:
|
|
61
|
+
- uses: actions/checkout@v4
|
|
62
|
+
|
|
63
|
+
- name: Select Xcode version
|
|
64
|
+
uses: maxim-lobanov/setup-xcode@v1
|
|
65
|
+
with:
|
|
66
|
+
xcode-version: '26.4.1'
|
|
67
|
+
|
|
68
|
+
- name: Build iOS app
|
|
69
|
+
run: xcodebuild -project MyApp.xcodeproj -scheme MyApp -sdk iphonesimulator build
|
|
70
|
+
|
|
71
|
+
- language: yaml
|
|
72
|
+
label: "Pin Xcode version using xcode-select directly"
|
|
73
|
+
code: |
|
|
74
|
+
jobs:
|
|
75
|
+
build-ios:
|
|
76
|
+
runs-on: macos-26
|
|
77
|
+
steps:
|
|
78
|
+
- uses: actions/checkout@v4
|
|
79
|
+
|
|
80
|
+
- name: Pin Xcode 26.4.1
|
|
81
|
+
run: sudo xcode-select -s "/Applications/Xcode_26.4.1.app"
|
|
82
|
+
|
|
83
|
+
- name: Verify Xcode version
|
|
84
|
+
run: xcodebuild -version
|
|
85
|
+
|
|
86
|
+
- name: Build
|
|
87
|
+
run: xcodebuild -scheme MyApp build
|
|
88
|
+
prevention:
|
|
89
|
+
- "Always pin Xcode version explicitly on macOS runners — never rely on the default."
|
|
90
|
+
- "Use maxim-lobanov/setup-xcode@v1 with a specific xcode-version to make version changes visible in git diff."
|
|
91
|
+
- "Subscribe to runner-images announcements for advance notice of Xcode default version changes."
|
|
92
|
+
- "Audit your workflows for hardcoded Xcode version paths before macos-latest migrates to macos-26."
|
|
93
|
+
docs:
|
|
94
|
+
- url: "https://github.com/actions/runner-images/issues/14172"
|
|
95
|
+
label: "GitHub Announcement: Default Xcode on macOS 26 will be set to 26.5 on 2026-06-08"
|
|
96
|
+
- url: "https://github.com/maxim-lobanov/setup-xcode"
|
|
97
|
+
label: "maxim-lobanov/setup-xcode action"
|
|
98
|
+
- url: "https://github.com/actions/runner-images/blob/main/images/macos/macos-26-arm64-Readme.md#xcode"
|
|
99
|
+
label: "macOS 26 arm64 runner image README — available Xcode versions"
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
id: runner-environment-064
|
|
2
|
+
title: "macos-latest Label Switching to macOS 26 — Toolchain and Brew Package Changes"
|
|
3
|
+
category: runner-environment
|
|
4
|
+
severity: warning
|
|
5
|
+
tags:
|
|
6
|
+
- macos
|
|
7
|
+
- macos-latest
|
|
8
|
+
- macos-26
|
|
9
|
+
- runner-label
|
|
10
|
+
- homebrew
|
|
11
|
+
- toolchain
|
|
12
|
+
- migration
|
|
13
|
+
patterns:
|
|
14
|
+
- regex: "macos.*26.*not supported"
|
|
15
|
+
flags: "i"
|
|
16
|
+
- regex: "No such file or directory.*clang|clang.*not found"
|
|
17
|
+
flags: "i"
|
|
18
|
+
- regex: "dyld.*Library not loaded"
|
|
19
|
+
flags: "i"
|
|
20
|
+
- regex: "Error: Cannot install in Homebrew on macOS.*without Command Line Tools"
|
|
21
|
+
flags: "i"
|
|
22
|
+
- regex: "macos-latest.*macos-26"
|
|
23
|
+
flags: "i"
|
|
24
|
+
error_messages:
|
|
25
|
+
- "clang: error: no such file or directory"
|
|
26
|
+
- "dyld[12345]: Library not loaded: /usr/local/lib/libssl.1.1.dylib"
|
|
27
|
+
- "Error: Your CLT does not support macOS 26."
|
|
28
|
+
- "xcrun: error: SDK 'iphoneos' cannot be located"
|
|
29
|
+
root_cause: |
|
|
30
|
+
Starting June 15, 2026, the `macos-latest` runner label is being migrated
|
|
31
|
+
from macOS 15 (Sequoia) to macOS 26 (runner-images#14167). The rollout
|
|
32
|
+
runs through July 15, 2026. Workflows pinned to `macos-latest` without
|
|
33
|
+
testing on macOS 26 may encounter failures from toolchain and package
|
|
34
|
+
differences between the two OS versions.
|
|
35
|
+
|
|
36
|
+
Key differences in macOS 26 runner images compared to macOS 15:
|
|
37
|
+
|
|
38
|
+
1. **Homebrew LLVM version bump**: LLVM jumped from 18 to 20 on macOS 26.
|
|
39
|
+
Hardcoded paths like `/opt/homebrew/opt/llvm@18/bin/clang` or env vars
|
|
40
|
+
referencing `llvm@18` binaries fail. POCO and other libraries built
|
|
41
|
+
against LLVM 18 ABI may link incorrectly.
|
|
42
|
+
|
|
43
|
+
2. **macOS SDK changes**: macOS 26 uses a newer Xcode and SDK toolchain.
|
|
44
|
+
Libraries and headers that existed in macOS 15 SDK may have moved,
|
|
45
|
+
been renamed, or removed under the macOS 26 (Tahoe) SDK.
|
|
46
|
+
|
|
47
|
+
3. **Homebrew formula versions**: Many Homebrew packages have newer
|
|
48
|
+
versions on macOS 26 images than on macOS 15. Formulas with no macOS 26
|
|
49
|
+
bottle may be built from source, increasing job time significantly.
|
|
50
|
+
|
|
51
|
+
4. **System library locations**: Dynamic library paths (e.g., for OpenSSL,
|
|
52
|
+
libpq, or other system libs installed via Homebrew) may differ between
|
|
53
|
+
macOS 15 and macOS 26 as Homebrew evolves its prefix structure.
|
|
54
|
+
|
|
55
|
+
5. **Xcode simulator SDK policy**: Only the 3 latest Xcode versions retain
|
|
56
|
+
platform tools/SDKs. Workflows using older Xcode/simulator versions
|
|
57
|
+
that worked on macOS 15 may not find the expected SDK on macOS 26.
|
|
58
|
+
|
|
59
|
+
Workflows that do not pin `macos-latest` and have never tested on macOS 26
|
|
60
|
+
may start failing after the migration completes.
|
|
61
|
+
fix: |
|
|
62
|
+
1. **Pin to macOS 15 temporarily**: Replace `macos-latest` with `macos-15`
|
|
63
|
+
to preserve the current behavior while you test and migrate.
|
|
64
|
+
|
|
65
|
+
2. **Test on macOS 26 before migration**: Add a matrix job with
|
|
66
|
+
`macos-26` to identify failures before `macos-latest` switches.
|
|
67
|
+
|
|
68
|
+
3. **Fix hardcoded LLVM/Clang paths**: Update any hardcoded paths like
|
|
69
|
+
`/opt/homebrew/opt/llvm@18` to use `$(brew --prefix llvm)` or install
|
|
70
|
+
the specific version you need via `brew install llvm@18`.
|
|
71
|
+
|
|
72
|
+
4. **Update Homebrew formula pins**: Check for `@version`-pinned Homebrew
|
|
73
|
+
formulas that may no longer have macOS 26 bottles and either upgrade
|
|
74
|
+
or build from source explicitly.
|
|
75
|
+
|
|
76
|
+
5. **Audit system library dependencies**: For native extensions that link
|
|
77
|
+
against system or Homebrew libraries, verify library paths with
|
|
78
|
+
`brew --prefix <lib>` at runtime rather than hardcoding them.
|
|
79
|
+
fix_code:
|
|
80
|
+
- language: yaml
|
|
81
|
+
label: "Pin to macos-15 while testing macOS 26 compatibility"
|
|
82
|
+
code: |
|
|
83
|
+
jobs:
|
|
84
|
+
build:
|
|
85
|
+
# Temporarily pin to macos-15 while migration is in progress
|
|
86
|
+
# macos-latest will point to macos-26 starting June 15, 2026
|
|
87
|
+
runs-on: macos-15
|
|
88
|
+
steps:
|
|
89
|
+
- uses: actions/checkout@v4
|
|
90
|
+
- run: make build
|
|
91
|
+
- language: yaml
|
|
92
|
+
label: "Matrix to test both macOS 15 and 26 before migration"
|
|
93
|
+
code: |
|
|
94
|
+
jobs:
|
|
95
|
+
build:
|
|
96
|
+
strategy:
|
|
97
|
+
matrix:
|
|
98
|
+
os: [macos-15, macos-26]
|
|
99
|
+
fail-fast: false
|
|
100
|
+
runs-on: ${{ matrix.os }}
|
|
101
|
+
steps:
|
|
102
|
+
- uses: actions/checkout@v4
|
|
103
|
+
- run: make build
|
|
104
|
+
- language: yaml
|
|
105
|
+
label: "Use brew --prefix to resolve dynamic LLVM/library paths"
|
|
106
|
+
code: |
|
|
107
|
+
- name: Set up LLVM paths dynamically
|
|
108
|
+
run: |
|
|
109
|
+
# Instead of hardcoded /opt/homebrew/opt/llvm@18/bin/clang:
|
|
110
|
+
LLVM_PREFIX=$(brew --prefix llvm)
|
|
111
|
+
echo "CC=${LLVM_PREFIX}/bin/clang" >> $GITHUB_ENV
|
|
112
|
+
echo "CXX=${LLVM_PREFIX}/bin/clang++" >> $GITHUB_ENV
|
|
113
|
+
echo "${LLVM_PREFIX}/bin" >> $GITHUB_PATH
|
|
114
|
+
prevention:
|
|
115
|
+
- "Never use macos-latest without testing the next macOS version first — GitHub announces label migrations weeks in advance in runner-images issues."
|
|
116
|
+
- "Pin to a specific macOS version (e.g., macos-15) for production workflows; use macos-latest only in exploratory or dependency-update workflows."
|
|
117
|
+
- "Avoid hardcoding Homebrew formula paths — always use `$(brew --prefix <formula>)` to resolve paths dynamically."
|
|
118
|
+
- "Run a matrix job spanning current and next macOS versions as part of your CI to catch breakage before a label migration lands."
|
|
119
|
+
docs:
|
|
120
|
+
- url: "https://github.com/actions/runner-images/issues/14167"
|
|
121
|
+
label: "runner-images #14167: macos-latest will use macos-26 starting June 15, 2026"
|
|
122
|
+
- url: "https://github.blog/changelog/2026-05-14-github-actions-upcoming-image-migrations/"
|
|
123
|
+
label: "GitHub Changelog: Upcoming image migrations (May 2026)"
|
|
124
|
+
- url: "https://github.com/actions/runner-images/issues/14167"
|
|
125
|
+
label: "runner-images announcement: macOS 14 deprecation starting July 6, 2026"
|
|
126
|
+
- url: "https://docs.github.com/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories"
|
|
127
|
+
label: "GitHub Docs: Standard GitHub-hosted runners — available runner labels"
|