diff --git a/errors/runner-environment/macos-15-arm64-swiftlint-not-installed-intel-readme.yml b/errors/runner-environment/macos-15-arm64-swiftlint-not-installed-intel-readme.yml new file mode 100644 index 0000000..ff0ae02 --- /dev/null +++ b/errors/runner-environment/macos-15-arm64-swiftlint-not-installed-intel-readme.yml @@ -0,0 +1,106 @@ +id: runner-environment-509 +title: 'macos-15 (Arm64) Missing SwiftLint Despite Readme Listing It as Installed' +category: runner-environment +severity: error +tags: + - macos-15 + - arm64 + - swiftlint + - swift + - homebrew + - tool-not-found + - runner-readme +patterns: + - regex: 'swiftlint.*command not found|command not found.*swiftlint' + flags: 'i' + - regex: 'No such file or directory.*swiftlint|swiftlint.*No such file or directory' + flags: 'i' + - regex: 'which swiftlint.*$|swiftlint: not found' + flags: 'im' +error_messages: + - "/Users/runner/work/_temp/....sh: line 2: swiftlint: command not found" + - "ls: /opt/homebrew/bin/swiftlint: No such file or directory" + - "ls: /usr/local/bin/swiftlint: No such file or directory" +root_cause: | + The macOS-15 runner image comes in two architecture variants: `macos-15` (Arm64, the default + when you specify `runs-on: macos-15`) and `macos-15-intel` (Intel/x86_64). These two variants + do NOT have identical toolsets. + + SwiftLint is preinstalled on `macos-15-intel` but is NOT preinstalled on `macos-15` (Arm64). + The official Readme linked from search engines and the runner-images repository + (`images/macos/macos-15-Readme.md`) documents the Intel variant's software list. This creates + a documentation mismatch: the Readme confirms SwiftLint is "installed", but workflows + targeting the default `macos-15` label (which resolves to Arm64) will fail with + "command not found". + + This affects any workflow that: + - Runs `swiftlint` directly (e.g., `run: swiftlint .`) + - Uses a SwiftLint GitHub Action that expects the binary to be pre-available + - Migrated from `macos-14` or `macos-latest` (previously Intel) to `macos-15` (now Arm64) + + Source: runner-images#14239 (June 15, 2026, open) +fix: | + Install SwiftLint explicitly in your workflow using Homebrew before running it. This is the + recommended approach for Arm64 runners and ensures a pinnable, reproducible version: + + Option 1 (install via brew): Add a step to install SwiftLint with `brew install swiftlint`. + Option 2 (use mint): Use Mint package manager to install a pinned version. + Option 3 (Intel runner): Use `macos-15-intel` if your workflow specifically requires the + Intel variant and you need the preinstalled SwiftLint without additional setup. + + Note: Installing via Homebrew on Arm64 runners adds ~30–90 seconds to workflow time. +fix_code: + - language: yaml + label: "Install SwiftLint via Homebrew on macos-15 (Arm64)" + code: | + jobs: + lint: + runs-on: macos-15 # Arm64 — SwiftLint not preinstalled + steps: + - uses: actions/checkout@v4 + - name: Install SwiftLint + run: brew install swiftlint + - name: Run SwiftLint + run: swiftlint . + - language: yaml + label: "Pin SwiftLint version with brew install --formula" + code: | + jobs: + lint: + runs-on: macos-15 + steps: + - uses: actions/checkout@v4 + - name: Install pinned SwiftLint + run: | + brew install swiftlint + swiftlint version + - name: Lint + run: swiftlint lint --reporter github-actions-logging + - language: yaml + label: "Use norio-nomura/action-swiftlint action (installs SwiftLint automatically)" + code: | + jobs: + lint: + runs-on: macos-15 + steps: + - uses: actions/checkout@v4 + - name: SwiftLint + uses: norio-nomura/action-swiftlint@3.2.1 +prevention: + - "Never assume tool availability based on the runner-images Readme without confirming which + architecture variant the Readme describes. The macos-15-Readme.md covers Intel (macos-15-intel), + not the default Arm64 runner." + - "Explicitly install tools you depend on rather than relying on preinstalled versions — this + also gives you control over the version and avoids silent upgrades breaking your workflow." + - "When migrating from macOS Intel runners (macos-14, macos-latest prior to macos-26) to + macos-15 or macos-26, audit your toolchain assumptions: Arm64 and Intel images do not have + identical preinstalled software." + - "Add a toolchain validation step early in your workflow (`which swiftlint && swiftlint version`) + to fail fast with a clear message rather than failing deep in your lint/build steps." +docs: + - url: "https://github.com/actions/runner-images/issues/14239" + label: "runner-images#14239: macos-15 runner claims swiftlint is installed but it is not found (June 2026)" + - url: "https://github.com/actions/runner-images/blob/main/images/macos/macos-15-Readme.md" + label: "macos-15 (Intel) runner image installed software Readme" + - url: "https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners#standard-github-hosted-runners-for-public-repositories" + label: "GitHub Docs: GitHub-hosted runner hardware and OS specifications" diff --git a/errors/runner-environment/ubuntu-2204-deprecation-brownout.yml b/errors/runner-environment/ubuntu-2204-deprecation-brownout.yml index ceeab10..ea13810 100644 --- a/errors/runner-environment/ubuntu-2204-deprecation-brownout.yml +++ b/errors/runner-environment/ubuntu-2204-deprecation-brownout.yml @@ -17,23 +17,30 @@ patterns: - regex: 'No hosted runner matching.*ubuntu-22\.04' flags: 'i' error_messages: - - "DEPRECATION NOTICE: The ubuntu-22.04 image will be deprecated on . Please update your workflows to use ubuntu-24.04 instead." - - "The ubuntu-22.04 runner image will not be supported after . Migrate to ubuntu-24.04." + - "DEPRECATION NOTICE: The ubuntu-22.04 image will be deprecated on September 17, 2026. Please update your workflows to use ubuntu-24.04 instead." + - "The ubuntu-22.04 runner image will not be supported after April 17, 2027. Migrate to ubuntu-24.04." - "No hosted runner matching the label 'ubuntu-22.04' was found" root_cause: | GitHub follows a phased retirement process for end-of-life runner images. For ubuntu-22.04 - (Jammy Jellyfish, EOL April 2027 for standard support), GitHub began deprecation in early 2025 - with annotation notices injected into workflow summaries, followed by scheduled "brownout" - windows where the runner image was temporarily unavailable. During a brownout window, jobs - queued with `runs-on: ubuntu-22.04` either wait indefinitely or immediately fail with a - "No hosted runner found" error, depending on the brownout type. + (Jammy Jellyfish), GitHub officially announced the deprecation timeline on June 16, 2026 + (runner-images#14254): - After the full retirement date, the runner label is removed entirely. Workflows still targeting - `ubuntu-22.04` fail on every run with no runner available. The retirement does NOT affect - self-hosted runners labelled ubuntu-22.04 — only GitHub-hosted runners. + - **Deprecation begins**: September 17, 2026 — images remain available but queue times + increase during peak hours. + - **Full retirement**: April 17, 2027 — runner labels removed entirely; workflows fail. + - **Brownout windows** (jobs will fail during these windows to raise awareness): + - March 23, 2027: 14:00 UTC – 00:00 UTC + - March 30, 2027: 14:00 UTC – 00:00 UTC + - April 6, 2027: 14:00 UTC – 00:00 UTC + - April 13, 2027: 14:00 UTC – 00:00 UTC - The pattern mirrors ubuntu-20.04 retirement (completed mid-2024). ubuntu-22.04 brownouts - began April 2025 per GitHub Changelog entry "Actions: ubuntu-22.04 runner image deprecated". + During a brownout window, jobs queued with `runs-on: ubuntu-22.04` or `runs-on: ubuntu-22.04-arm` + immediately fail. After full retirement, the runner label is removed entirely and every run fails. + + The retirement does NOT affect self-hosted runners labelled ubuntu-22.04 — only GitHub-hosted + runners. ubuntu-22.04-arm is also affected. The pattern mirrors ubuntu-20.04 retirement + (completed mid-2024). Earlier deprecation notices began April 2025 per GitHub Changelog entry + "Actions: ubuntu-22.04 runner image deprecated". fix: | Update your `runs-on:` targets to `ubuntu-24.04` (or `ubuntu-latest`, which now maps to ubuntu-24.04). Before migrating, audit for ubuntu-22.04-specific toolchain assumptions: @@ -76,8 +83,10 @@ prevention: - "Run a periodic workflow that validates your CI still passes on ubuntu-latest to catch image drift before retirement forces a migration." - "Check runner-images release notes before each minor ubuntu release to review tool changes that will affect your workflows." docs: + - url: "https://github.com/actions/runner-images/issues/14254" + label: "runner-images#14254: Ubuntu 22 deprecation timeline — Sept 17, 2026 deprecation, April 17, 2027 retirement" - url: "https://github.blog/changelog/2025-01-09-actions-ubuntu-22-deprecation/" - label: "GitHub Changelog: ubuntu-22.04 deprecation announcement" + label: "GitHub Changelog: ubuntu-22.04 initial deprecation announcement (2025)" - url: "https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2404-Readme.md" label: "ubuntu-24.04 runner image installed software" - url: "https://docs.github.com/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources"