Skip to content

Commit cb2362a

Browse files
Cache SwiftPM builds in CI
1 parent 8747269 commit cb2362a

1 file changed

Lines changed: 96 additions & 0 deletions

File tree

.github/workflows/test.yml

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ jobs:
1616
toolchain:
1717
download-url: https://download.swift.org/development/ubuntu2404/swift-DEVELOPMENT-SNAPSHOT-2025-12-01-a/swift-DEVELOPMENT-SNAPSHOT-2025-12-01-a-ubuntu24.04.tar.gz
1818
swift-syntax-version: "603.0.0"
19+
spm-cache-key: ubuntu-24.04-swift-DEVELOPMENT-SNAPSHOT-2025-12-01-a-603.0.0
1920
wasi-backend: Node
2021
target: "wasm32-unknown-wasip1"
2122
env: |
@@ -24,12 +25,14 @@ jobs:
2425
toolchain:
2526
download-url: https://download.swift.org/swift-6.3-branch/ubuntu2404/swift-6.3-DEVELOPMENT-SNAPSHOT-2026-03-05-a/swift-6.3-DEVELOPMENT-SNAPSHOT-2026-03-05-a-ubuntu24.04.tar.gz
2627
swift-syntax-version: "603.0.0"
28+
spm-cache-key: ubuntu-24.04-swift-6.3-DEVELOPMENT-SNAPSHOT-2026-03-05-a-603.0.0
2729
wasi-backend: Node
2830
target: "wasm32-unknown-wasip1"
2931
- os: ubuntu-22.04
3032
toolchain:
3133
download-url: https://download.swift.org/development/ubuntu2204/swift-DEVELOPMENT-SNAPSHOT-2025-12-01-a/swift-DEVELOPMENT-SNAPSHOT-2025-12-01-a-ubuntu22.04.tar.gz
3234
swift-syntax-version: "603.0.0"
35+
spm-cache-key: ubuntu-22.04-swift-DEVELOPMENT-SNAPSHOT-2025-12-01-a-603.0.0
3336
wasi-backend: Node
3437
target: "wasm32-unknown-wasip1-threads"
3538

@@ -56,6 +59,17 @@ jobs:
5659
run: |
5760
echo "SWIFT_SDK_ID=${{ steps.setup-swiftwasm.outputs.swift-sdk-id }}" >> $GITHUB_ENV
5861
echo "SWIFT_BIN_PATH=$(dirname $(which swiftc))" >> $GITHUB_ENV
62+
- name: Restore SwiftPM build cache
63+
id: swiftpm-cache
64+
uses: actions/cache/restore@v4
65+
with:
66+
path: |
67+
.build
68+
Plugins/PackageToJS/.build
69+
Plugins/BridgeJS/.build
70+
key: swiftpm-${{ matrix.entry.spm-cache-key }}-${{ hashFiles('Package.swift', 'Package.resolved', 'Plugins/PackageToJS/Package.swift', 'Plugins/BridgeJS/Package.swift') }}
71+
restore-keys: |
72+
swiftpm-${{ matrix.entry.spm-cache-key }}-
5973
- uses: swiftwasm/setup-swift-syntax-prebuilts@v1
6074
id: swiftsyntax-prebuilts
6175
with:
@@ -77,6 +91,15 @@ jobs:
7791
BRIDGEJS_OVERRIDE_SWIFT_SYNTAX_VERSION: ${{ matrix.entry.swift-syntax-version }}
7892
- name: Validate BridgeJS TypeScript declarations
7993
run: npm run check:bridgejs-dts
94+
- name: Save SwiftPM build cache
95+
if: success() && steps.swiftpm-cache.outputs.cache-hit != 'true'
96+
uses: actions/cache/save@v4
97+
with:
98+
path: |
99+
.build
100+
Plugins/PackageToJS/.build
101+
Plugins/BridgeJS/.build
102+
key: swiftpm-${{ matrix.entry.spm-cache-key }}-${{ hashFiles('Package.swift', 'Package.resolved', 'Plugins/PackageToJS/Package.swift', 'Plugins/BridgeJS/Package.swift') }}
80103

81104
test-bridgejs-against-swift-versions:
82105
name: Test BridgeJS against Swift versions
@@ -85,6 +108,7 @@ jobs:
85108
entry:
86109
- image: "swift:6.3"
87110
swift-syntax-version: "603.0.0"
111+
spm-cache-key: swift-6.3-603.0.0
88112
runs-on: ubuntu-latest
89113
container:
90114
image: ${{ matrix.entry.image }}
@@ -100,12 +124,26 @@ jobs:
100124
id: swiftsyntax-prebuilts
101125
with:
102126
swift-syntax-version: ${{ matrix.entry.swift-syntax-version }}
127+
- name: Restore SwiftPM build cache
128+
id: swiftpm-cache
129+
uses: actions/cache/restore@v4
130+
with:
131+
path: Plugins/BridgeJS/.build
132+
key: swiftpm-bridgejs-${{ matrix.entry.spm-cache-key }}-${{ hashFiles('Plugins/BridgeJS/Package.swift') }}
133+
restore-keys: |
134+
swiftpm-bridgejs-${{ matrix.entry.spm-cache-key }}-
103135
- name: Validate BridgeJS TypeScript declarations
104136
run: npm run check:bridgejs-dts
105137
- name: Run BridgeJS tests
106138
run: swift test ${{ steps.swiftsyntax-prebuilts.outputs.swift-flags }} --package-path ./Plugins/BridgeJS
107139
env:
108140
BRIDGEJS_OVERRIDE_SWIFT_SYNTAX_VERSION: ${{ matrix.entry.swift-syntax-version }}
141+
- name: Save SwiftPM build cache
142+
if: success() && steps.swiftpm-cache.outputs.cache-hit != 'true'
143+
uses: actions/cache/save@v4
144+
with:
145+
path: Plugins/BridgeJS/.build
146+
key: swiftpm-bridgejs-${{ matrix.entry.spm-cache-key }}-${{ hashFiles('Plugins/BridgeJS/Package.swift') }}
109147

110148
native-build:
111149
# Check native build to make it easy to develop applications by Xcode
@@ -161,6 +199,16 @@ jobs:
161199
id: swiftsyntax-prebuilts
162200
with:
163201
swift-syntax-version: "600.0.1"
202+
- name: Restore SwiftPM build cache
203+
id: swiftpm-cache
204+
uses: actions/cache/restore@v4
205+
with:
206+
path: |
207+
.build
208+
Plugins/BridgeJS/.build
209+
key: swiftpm-bridgejs-generate-ubuntu-22.04-swift-DEVELOPMENT-SNAPSHOT-2025-09-14-a-600.0.1-${{ hashFiles('Package.swift', 'Package.resolved', 'Plugins/BridgeJS/Package.swift') }}
210+
restore-keys: |
211+
swiftpm-bridgejs-generate-ubuntu-22.04-swift-DEVELOPMENT-SNAPSHOT-2025-09-14-a-600.0.1-
164212
- run: make bootstrap
165213
- run: ./Utilities/bridge-js-generate.sh
166214
env:
@@ -172,6 +220,14 @@ jobs:
172220
echo "::error::BridgeJS generated files are out of date. Please run \`./Utilities/bridge-js-generate.sh\` and commit the changes."
173221
exit 1
174222
}
223+
- name: Save SwiftPM build cache
224+
if: success() && steps.swiftpm-cache.outputs.cache-hit != 'true'
225+
uses: actions/cache/save@v4
226+
with:
227+
path: |
228+
.build
229+
Plugins/BridgeJS/.build
230+
key: swiftpm-bridgejs-generate-ubuntu-22.04-swift-DEVELOPMENT-SNAPSHOT-2025-09-14-a-600.0.1-${{ hashFiles('Package.swift', 'Package.resolved', 'Plugins/BridgeJS/Package.swift') }}
175231

176232
build-examples:
177233
runs-on: ubuntu-22.04
@@ -190,6 +246,27 @@ jobs:
190246
id: swiftsyntax-prebuilts
191247
with:
192248
swift-syntax-version: "603.0.0"
249+
- name: Restore SwiftPM build cache
250+
id: swiftpm-cache
251+
uses: actions/cache/restore@v4
252+
with:
253+
path: |
254+
.build
255+
Examples/ActorOnWebWorker/.build
256+
Examples/Basic/.build
257+
Examples/Embedded/.build
258+
Examples/ExportSwift/.build
259+
Examples/ImportTS/.build
260+
Examples/MultiModule/.build
261+
Examples/Multithreading/.build
262+
Examples/NodeJS/.build
263+
Examples/OffscrenCanvas/.build
264+
Examples/PlayBridgeJS/.build
265+
Examples/Testing/.build
266+
Plugins/BridgeJS/.build
267+
key: swiftpm-examples-ubuntu-22.04-swift-DEVELOPMENT-SNAPSHOT-2026-03-09-a-603.0.0-${{ hashFiles('Package.swift', 'Package.resolved', 'Examples/*/Package.swift', 'Examples/*/Package.resolved', 'Plugins/BridgeJS/Package.swift') }}
268+
restore-keys: |
269+
swiftpm-examples-ubuntu-22.04-swift-DEVELOPMENT-SNAPSHOT-2026-03-09-a-603.0.0-
193270
- run: |
194271
swift --version
195272
./Utilities/build-examples.sh
@@ -203,6 +280,25 @@ jobs:
203280
uses: actions/upload-pages-artifact@v5
204281
with:
205282
path: ./_site
283+
- name: Save SwiftPM build cache
284+
if: success() && steps.swiftpm-cache.outputs.cache-hit != 'true'
285+
uses: actions/cache/save@v4
286+
with:
287+
path: |
288+
.build
289+
Examples/ActorOnWebWorker/.build
290+
Examples/Basic/.build
291+
Examples/Embedded/.build
292+
Examples/ExportSwift/.build
293+
Examples/ImportTS/.build
294+
Examples/MultiModule/.build
295+
Examples/Multithreading/.build
296+
Examples/NodeJS/.build
297+
Examples/OffscrenCanvas/.build
298+
Examples/PlayBridgeJS/.build
299+
Examples/Testing/.build
300+
Plugins/BridgeJS/.build
301+
key: swiftpm-examples-ubuntu-22.04-swift-DEVELOPMENT-SNAPSHOT-2026-03-09-a-603.0.0-${{ hashFiles('Package.swift', 'Package.resolved', 'Examples/*/Package.swift', 'Examples/*/Package.resolved', 'Plugins/BridgeJS/Package.swift') }}
206302
deploy-examples:
207303
runs-on: ubuntu-latest
208304
if: github.event_name == 'push' && github.ref == 'refs/heads/main'

0 commit comments

Comments
 (0)