From 34ad5dab98457883ebc5d9edeff5bec6788cd049 Mon Sep 17 00:00:00 2001 From: Tim Morgan Date: Mon, 31 Aug 2026 18:21:04 -0700 Subject: [PATCH] Cache SwiftPM build products in CI Every CI run recompiled the package's dependencies from scratch. Cache `.build` alongside the SwiftPM download caches so a run whose dependency graph and toolchain are unchanged reuses the compiled objects. The key is exact-match with no restore-keys: objects built against a different dependency graph or toolchain must never be reused, and a partial restore is how a stale-artifact bug gets in. Matrix jobs put both the OS and the Swift version in the key, so macOS objects can never land on a Linux leg. Each compiling job gets its own key prefix. The lint and swift-format jobs parse source without compiling it and are left alone. Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01SRgQmnzeh3vsVKudXWs3RV --- .github/workflows/ci.yml | 16 ++++++++++++++++ .github/workflows/periphery.yml | 8 ++++++++ 2 files changed, 24 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ccb2b1e..a82ef7c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,6 +22,14 @@ jobs: - uses: SwiftyLab/setup-swift@latest with: swift-version: "6.3" + - name: Cache SwiftPM build products + uses: actions/cache@v6 + with: + path: | + .build + ~/.cache/org.swift.swiftpm + ~/Library/Caches/org.swift.swiftpm + key: swiftpm-test-macos-26-swift6.3-${{ hashFiles('Package.resolved') }} - name: Build run: swift build -v lint: @@ -57,6 +65,14 @@ jobs: - uses: SwiftyLab/setup-swift@latest with: swift-version: "6.3" + - name: Cache SwiftPM build products + uses: actions/cache@v6 + with: + path: | + .build + ~/.cache/org.swift.swiftpm + ~/Library/Caches/org.swift.swiftpm + key: swiftpm-docs-macos-26-swift6.3-${{ hashFiles('Package.resolved') }} - name: Build documentation run: | swift package --allow-writing-to-directory "$RUNNER_TEMP/docs" \ diff --git a/.github/workflows/periphery.yml b/.github/workflows/periphery.yml index 5e6531f..64e9c4f 100644 --- a/.github/workflows/periphery.yml +++ b/.github/workflows/periphery.yml @@ -15,6 +15,14 @@ jobs: - uses: SwiftyLab/setup-swift@latest with: swift-version: "6.3" + - name: Cache SwiftPM build products + uses: actions/cache@v6 + with: + path: | + .build + ~/.cache/org.swift.swiftpm + ~/Library/Caches/org.swift.swiftpm + key: swiftpm-periphery-macos-26-swift6.3-${{ hashFiles('Package.resolved') }} - name: Install Periphery run: brew install periphery - name: Run Periphery