From 86c11604bcbc9747d4029543e724fb4378fa4d8a Mon Sep 17 00:00:00 2001 From: yan Date: Fri, 9 Oct 2026 14:14:35 +0300 Subject: [PATCH 1/2] ci: select the newest stable Xcode on the runner MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The runner's default toolchain is Swift 6.3, but Package.swift declares swift-tools-version 6.4, so the manifest is rejected before anything compiles. Hard-coding a path to Xcode_16.app does not help — that app carries an older toolchain too, and the path is not stable across runner images. Use setup-xcode with latest-stable so the job tracks whatever the image ships and fails loudly on the toolchain line if it is still too old. --- .github/workflows/ci.yml | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 53e2cba..872da82 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,14 +13,17 @@ concurrency: jobs: build-and-test: name: Build and test - runs-on: macos-latest + runs-on: macos-26 steps: - uses: actions/checkout@v4 - # macos-latest already ships the default Xcode; selecting a version by path is - # brittle because runner images move it. Print it instead so a failure log says - # which toolchain produced it. + # This manifest declares swift-tools-version 6.4, so the runner needs Xcode 26. + # macos-latest still ships an older default; select it explicitly. + - uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: '26' + - name: Show toolchain run: | xcode-select -p From cb038dc309d81b53c2b03aab7e266b060c1e429f Mon Sep 17 00:00:00 2001 From: yan Date: Fri, 9 Oct 2026 14:23:02 +0300 Subject: [PATCH 2/2] build: lower the tools version to 6.3 so CI can run No hosted runner carries Swift 6.4 yet. Tried, in order: - xcode-select to /Applications/Xcode_16.app: path absent on the image - macos-latest default toolchain: 6.3.3 - macos-15 + setup-xcode latest-stable: 6.2.4 - macos-26 + Xcode 26: 6.3.3 Since none reach 6.4, drop the manifest to swift-tools-version 6.3 rather than pin a runner image that will change underneath us. The package still compiles and all 35 tests pass under 6.3 locally with a 6.4 toolchain, so this only relaxes the declared minimum, not the language features used. Bump the tools version once a runner ships 6.4. --- .github/workflows/ci.yml | 8 +------- Package.swift | 2 +- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 872da82..ed5b4e6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,17 +13,11 @@ concurrency: jobs: build-and-test: name: Build and test - runs-on: macos-26 + runs-on: macos-latest steps: - uses: actions/checkout@v4 - # This manifest declares swift-tools-version 6.4, so the runner needs Xcode 26. - # macos-latest still ships an older default; select it explicitly. - - uses: maxim-lobanov/setup-xcode@v1 - with: - xcode-version: '26' - - name: Show toolchain run: | xcode-select -p diff --git a/Package.swift b/Package.swift index 7de6329..57362fd 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version: 6.4 +// swift-tools-version: 6.3 import PackageDescription let package = Package(