@htekdev/actions-debugger 1.0.23 → 1.0.25

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 (61) hide show
  1. package/errors/caching-artifacts/artifact-minimum-retention-one-day.yml +153 -0
  2. package/errors/caching-artifacts/cache-api-propagation-delay-post-save.yml +128 -0
  3. package/errors/caching-artifacts/cache-backend-internal-error-skipped.yml +75 -0
  4. package/errors/caching-artifacts/cache-hit-step-id-case-sensitive-mismatch.yml +95 -0
  5. package/errors/caching-artifacts/cache-save-post-step-skipped-on-failure.yml +114 -0
  6. package/errors/concurrency-timing/deploy-pages-in-progress-deployment-wedged.yml +70 -0
  7. package/errors/concurrency-timing/deployment-review-timeout-expired.yml +88 -0
  8. package/errors/concurrency-timing/job-concurrency-scope-per-run-not-global.yml +81 -0
  9. package/errors/concurrency-timing/merge-queue-concurrency-cancel-blocks-all.yml +86 -0
  10. package/errors/concurrency-timing/reusable-workflow-github-workflow-context-cancel.yml +124 -0
  11. package/errors/concurrency-timing/runner-scale-set-jobs-never-start.yml +123 -0
  12. package/errors/concurrency-timing/runner-temp-dir-race-concurrent-workers.yml +90 -0
  13. package/errors/known-unsolved/artifact-download-url-unauthenticated-404.yml +98 -0
  14. package/errors/known-unsolved/checkout-v6-credentials-docker-run-manual.yml +105 -0
  15. package/errors/known-unsolved/concurrency-groups-repo-scoped-only.yml +138 -0
  16. package/errors/known-unsolved/environment-deployment-false-custom-protection.yml +93 -0
  17. package/errors/known-unsolved/matrix-256-job-limit.yml +142 -0
  18. package/errors/known-unsolved/merge-group-paths-filter-not-supported.yml +137 -0
  19. package/errors/known-unsolved/no-job-allow-failure.yml +73 -0
  20. package/errors/known-unsolved/schedule-cron-hours-long-queue-drift.yml +101 -0
  21. package/errors/permissions-auth/checkout-persist-credentials-token-write.yml +90 -0
  22. package/errors/permissions-auth/checkout-v6-cross-repo-token-override.yml +103 -0
  23. package/errors/permissions-auth/create-github-app-token-cross-job-token-revoked.yml +95 -0
  24. package/errors/permissions-auth/github-token-contents-write-missing-git-push.yml +117 -0
  25. package/errors/permissions-auth/org-actions-policy-blocks-unapproved-action.yml +106 -0
  26. package/errors/runner-environment/codeql-action-v2-deprecated.yml +110 -0
  27. package/errors/runner-environment/macos-26-openssl-3-system-library-breaking.yml +114 -0
  28. package/errors/runner-environment/macos-26-ruby-34-default-upgrade.yml +114 -0
  29. package/errors/runner-environment/macos-26-xcode-default-265-pin-required.yml +99 -0
  30. package/errors/runner-environment/macos-latest-label-switches-to-macos26.yml +127 -0
  31. package/errors/runner-environment/maven-gradle-403-cache-backend-outage.yml +116 -0
  32. package/errors/runner-environment/node20-removed-toolcache-default-node22.yml +104 -0
  33. package/errors/runner-environment/powershell-74-76-threadjob-module-rename.yml +124 -0
  34. package/errors/runner-environment/self-hosted-runner-not-found.yml +134 -0
  35. package/errors/runner-environment/self-hosted-runner-selinux-service-exec-failure.yml +116 -0
  36. package/errors/runner-environment/service-container-no-healthcheck.yml +158 -0
  37. package/errors/runner-environment/setup-node-v5-corepack-pnpm-not-found.yml +101 -0
  38. package/errors/runner-environment/setup-node-yarn-not-installed-self-hosted.yml +76 -0
  39. package/errors/runner-environment/setup-python-externally-managed-env-error.yml +95 -0
  40. package/errors/runner-environment/windows-2019-runner-retired-june2025.yml +118 -0
  41. package/errors/runner-environment/windows-2022-docker-daemon-not-started.yml +108 -0
  42. package/errors/silent-failures/cache-hit-output-string-not-boolean.yml +96 -0
  43. package/errors/silent-failures/checkout-lfs-pointer-not-content.yml +105 -0
  44. package/errors/silent-failures/reusable-workflow-output-skipped-contains-secret.yml +115 -0
  45. package/errors/silent-failures/setup-node-silent-download-exit-zero.yml +105 -0
  46. package/errors/silent-failures/setup-python-truncated-manifest-silent-exit.yml +111 -0
  47. package/errors/silent-failures/undefined-env-expression-empty-string-silent.yml +115 -0
  48. package/errors/silent-failures/windows-powershell-github-output-bash-syntax.yml +118 -0
  49. package/errors/triggers/fork-pr-first-time-contributor-approval-required.yml +142 -0
  50. package/errors/triggers/on-push-branches-glob-star-no-slash-match.yml +78 -0
  51. package/errors/triggers/pull-request-target-env-protection-default-branch-eval.yml +117 -0
  52. package/errors/triggers/required-status-check-renamed-never-passes.yml +87 -0
  53. package/errors/triggers/schedule-cron-self-hosted-runner-not-triggered.yml +107 -0
  54. package/errors/yaml-syntax/case-function-runner-version-too-old.yml +100 -0
  55. package/errors/yaml-syntax/composite-action-run-shell-missing.yml +90 -0
  56. package/errors/yaml-syntax/composite-action-secrets-context-unavailable.yml +99 -0
  57. package/errors/yaml-syntax/github-script-octokit-renamed-to-github.yml +130 -0
  58. package/errors/yaml-syntax/labeler-v5-config-format-breaking.yml +67 -0
  59. package/errors/yaml-syntax/runs-on-expression-array-syntax-error.yml +121 -0
  60. package/errors/yaml-syntax/setup-go-matrix-version-float-coercion.yml +69 -0
  61. package/package.json +1 -1
@@ -0,0 +1,117 @@
1
+ id: permissions-auth-025
2
+ title: "GITHUB_TOKEN Missing contents:write — git push Returns 403 Write Access Not Granted"
3
+ category: permissions-auth
4
+ severity: error
5
+ tags:
6
+ - github-token
7
+ - contents-write
8
+ - git-push
9
+ - 403
10
+ - permissions-block
11
+ - auto-commit
12
+ - write-access
13
+ patterns:
14
+ - regex: "remote: Write access to repository not granted"
15
+ flags: "i"
16
+ - regex: "error: failed to push some refs"
17
+ flags: "i"
18
+ - regex: "refusing to allow.*GitHub Actions.*to create or update workflow"
19
+ flags: "i"
20
+ - regex: "HttpError: Resource not accessible by integration"
21
+ flags: "i"
22
+ error_messages:
23
+ - "remote: Write access to repository not granted."
24
+ - "error: failed to push some refs to 'https://github.com/owner/repo.git'"
25
+ - "fatal: unable to access 'https://github.com/owner/repo.git/': The requested URL returned error: 403"
26
+ - "Resource not accessible by integration"
27
+ root_cause: |
28
+ The GITHUB_TOKEN is scoped by the `permissions:` block on the workflow or job. When any
29
+ `permissions:` block is present, all unspecified permissions are set to `none` (not to their
30
+ defaults). If `contents: write` is not explicitly granted, any `git push`, `git commit`, or
31
+ REST API call that writes to the repository will be rejected with HTTP 403 "Write access to
32
+ repository not granted."
33
+
34
+ Three common situations:
35
+
36
+ 1. **Minimal permissions block** — the workflow declares `permissions: read-all` or lists
37
+ specific permissions (e.g., `pull-requests: write`) but omits `contents: write`. Any
38
+ subsequent git push fails with 403.
39
+
40
+ 2. **Inherited restrictive org policy** — the organization sets the default token permission
41
+ to "read repository contents" (Settings → Actions → General → Workflow permissions). Without
42
+ an explicit `contents: write` in the workflow, the token cannot push.
43
+
44
+ 3. **Fine-grained token in workflow context** — a PAT or GitHub App token is used for checkout
45
+ but the GITHUB_TOKEN (still the effective token for `git push`) lacks write access.
46
+
47
+ This is distinct from `permissions-auth-017` (empty `permissions: {}` block removing
48
+ `contents: read` and breaking checkout). This pattern specifically affects git write operations
49
+ and REST API calls that create or update repository content.
50
+ fix: |
51
+ Add `contents: write` to the permissions block on the job or workflow where the push occurs.
52
+ Grant the narrowest scope needed — prefer job-level `permissions:` over workflow-level to
53
+ limit the blast radius.
54
+
55
+ If the org policy sets the default to "read-only", every workflow that writes to the repo
56
+ must explicitly declare `contents: write`.
57
+ fix_code:
58
+ - language: yaml
59
+ label: "Add contents:write at the job level (preferred — narrowest scope)"
60
+ code: |
61
+ jobs:
62
+ auto-commit:
63
+ runs-on: ubuntu-latest
64
+ permissions:
65
+ contents: write # ← required for git push / creating commits via API
66
+ steps:
67
+ - uses: actions/checkout@v4
68
+ - name: Bump version and push
69
+ run: |
70
+ git config user.name "github-actions[bot]"
71
+ git config user.email "github-actions[bot]@users.noreply.github.com"
72
+ npm version patch --no-git-tag-version
73
+ git add package.json
74
+ git commit -m "chore: bump version [skip ci]"
75
+ git push
76
+ - language: yaml
77
+ label: "Org default is read-only — always set explicit contents:write for push workflows"
78
+ code: |
79
+ # When Settings → Actions → General → Workflow permissions = "Read repository contents and packages"
80
+ # EVERY workflow that pushes must declare contents: write:
81
+
82
+ permissions:
83
+ contents: write # required for git push, release creation, branch creation
84
+ pull-requests: write # only if the workflow also comments on PRs
85
+
86
+ jobs:
87
+ release:
88
+ runs-on: ubuntu-latest
89
+ steps:
90
+ - uses: actions/checkout@v4
91
+ - name: Create release
92
+ run: gh release create "${{ github.ref_name }}" --generate-notes
93
+ env:
94
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
95
+ - language: yaml
96
+ label: "Debug: print effective token permissions before failing"
97
+ code: |
98
+ - name: Check token permissions
99
+ run: |
100
+ gh api /repos/${{ github.repository }} --jq '.permissions'
101
+ gh auth status
102
+ env:
103
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
104
+ prevention:
105
+ - "Always add `contents: write` to any job that does `git push`, `git tag`, creates releases, or writes files via the GitHub API."
106
+ - "Set the organization default to 'Read and write' only when necessary; otherwise document that all push workflows must declare `contents: write`."
107
+ - "Use job-level `permissions:` blocks instead of workflow-level to minimize token scope."
108
+ - "Add a permissions comment near the `permissions:` block listing what each grant is needed for, so future maintainers don't accidentally remove it."
109
+ docs:
110
+ - url: "https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/controlling-permissions-for-github_token"
111
+ label: "GitHub Docs: Controlling permissions for GITHUB_TOKEN"
112
+ - url: "https://stackoverflow.com/questions/79437803/git-commit-in-github-actions-workflow-failing-write-access-to-repository-not"
113
+ label: "SO#79437803 — git commit failing: Write access to repository not granted, 403"
114
+ - url: "https://stackoverflow.com/questions/79471500/github-actions-authentication-failed-for-pushing-to-repository"
115
+ label: "SO#79471500 — Authentication failed for pushing to repository"
116
+ - url: "https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/enabling-features-for-your-repository/managing-github-actions-settings-for-a-repository#setting-the-permissions-of-the-github_token-for-your-repository"
117
+ label: "GitHub Docs: Setting GITHUB_TOKEN default permissions"
@@ -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"