Section 14/181 menit
14. CI/CD Integration — Caching & GitHub Actions
14. CI/CD Integration — Caching & GitHub Actions
GitHub Actions dengan SPM Caching
swift
# .github/workflows/test.yml
name: Test
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
test:
runs-on: macos-14
steps:
- uses: actions/checkout@v4
# Cache SPM resolved packages
- name: Cache SPM packages
uses: actions/cache@v3
with:
path: |
~/.swiftpm
.build/repositories
key: ${{ runner.os }}-spm-${{ hashFiles('Package.resolved') }}
restore-keys: |
${{ runner.os }}-spm-
# Cache build artifacts (hati-hati — bisa stale)
- name: Cache build
uses: actions/cache@v3
with:
path: .build
key: ${{ runner.os }}-build-${{ hashFiles('Package.resolved') }}-${{ hashFiles('**/*.swift') }}
restore-keys: |
${{ runner.os }}-build-${{ hashFiles('Package.resolved') }}-
${{ runner.os }}-build-
- name: Resolve dependencies
run: swift package resolve
- name: Build
run: swift build --configuration debug
- name: Test
run: swift test --parallel --enable-code-coverage
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v3
with:
files: ./coverage.lcov
Optimasi Build Time
swift
# Explicit module builds (Swift 5.9+) — parallelisasi lebih agresif
swift build -Xswiftc -experimental-explicit-module-build
# Thin LTO untuk release builds yang lebih kecil (tapi lebih lambat compile)
swift build -c release -Xswiftc -lto=thin
# Disable whole-module optimization untuk debug yang lebih cepat
swift build -Xswiftc -disable-whole-module-optimization
# Lihat waktu compile per file
swift build -Xswiftc -driver-time-compilation
# Lihat type checking yang lambat
swift build -Xswiftc -warn-long-expression-type-checking=100 # warn jika > 100ms
swift build -Xswiftc -warn-long-function-bodies=100