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