spm #5008
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: spm | |
on: | |
pull_request: | |
paths: | |
- '.github/workflows/spm.yml' | |
- 'Package.swift' | |
- '.swiftpm/*' | |
- 'scripts/build.sh' | |
- 'SwiftPMTests/*' | |
- 'SwiftPM-PlatformExclude' | |
- 'Gemfile*' | |
schedule: | |
# Run every day at 12am (PST) - cron uses UTC times | |
- cron: '0 8 * * *' | |
# This workflow builds and tests the Swift Package Manager. Only iOS runs on PRs | |
# because each platform takes 15-20 minutes after adding Firestore. | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} | |
cancel-in-progress: true | |
env: | |
FIREBASE_CI: true | |
jobs: | |
spm-package-resolved: | |
env: | |
FIREBASECI_USE_LATEST_GOOGLEAPPMEASUREMENT: 1 | |
runs-on: macos-14 | |
outputs: | |
cache_key: ${{ steps.generate_cache_key.outputs.cache_key }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Generate Swift Package.resolved | |
id: swift_package_resolve | |
run: | | |
swift package resolve | |
- name: Generate cache key | |
id: generate_cache_key | |
run: | | |
cache_key="${{ runner.os }}-spm-${{ hashFiles('**/Package.resolved') }}" | |
echo "cache_key=${cache_key}" >> "$GITHUB_OUTPUT" | |
- uses: actions/cache/save@v4 | |
id: cache | |
with: | |
path: .build | |
key: ${{ steps.generate_cache_key.outputs.cache_key }} | |
swift-build-run: | |
# Don't run on private repo unless it is a PR. | |
if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request' | |
needs: [spm-package-resolved] | |
strategy: | |
matrix: | |
include: | |
- os: macos-15 | |
xcode: Xcode_16 | |
test: spm | |
- os: macos-14 | |
xcode: Xcode_15.3 | |
test: spm | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/cache/restore@v4 | |
with: | |
path: .build | |
key: ${{needs.spm-package-resolved.outputs.cache_key}} | |
- name: Clone mock responses for Vertex AI unit tests | |
run: scripts/update_vertexai_responses.sh | |
- name: Xcode | |
run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer | |
- name: Initialize xcodebuild | |
run: scripts/setup_spm_tests.sh | |
- name: Functions Integration Test Server | |
run: FirebaseFunctions/Backend/start.sh synchronous | |
- uses: nick-fields/retry@v3 | |
with: | |
timeout_minutes: 120 | |
max_attempts: 3 | |
retry_on: error | |
retry_wait_seconds: 120 | |
command: scripts/build.sh Firebase-Package iOS ${{ matrix.test }} | |
# Test iOS Device build since some Firestore dependencies build different files. | |
iOS-Device: | |
# Don't run on private repo unless it is a PR. | |
if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request' | |
needs: [spm-package-resolved] | |
strategy: | |
matrix: | |
include: | |
- os: macos-14 | |
xcode: Xcode_15.3 | |
- os: macos-15 | |
xcode: Xcode_16 | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/cache/restore@v4 | |
with: | |
path: .build | |
key: ${{needs.spm-package-resolved.outputs.cache_key}} | |
- name: Clone mock responses for Vertex AI unit tests | |
run: scripts/update_vertexai_responses.sh | |
- name: Xcode | |
run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer | |
- name: Initialize xcodebuild | |
run: scripts/setup_spm_tests.sh | |
- name: iOS Device and Test Build | |
run: scripts/third_party/travis/retry.sh ./scripts/build.sh Firebase-Package iOS-device spmbuildonly | |
platforms: | |
# Don't run on private repo unless it is a PR. | |
if: (github.repository == 'Firebase/firebase-ios-sdk' && github.event_name == 'schedule') || github.event_name == 'pull_request' | |
needs: [spm-package-resolved] | |
strategy: | |
matrix: | |
# Full set of Firebase-Package tests only run on iOS. Run subset on other platforms. | |
# visionOS isn't buildable from here (even with Firestore source) because the test | |
# targets need Analytics. | |
target: [tvOS, macOS, catalyst] | |
include: | |
- os: macos-15 | |
xcode: Xcode_16 | |
- os: macos-14 | |
xcode: Xcode_15.3 | |
runs-on: ${{ matrix.os }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/cache/restore@v4 | |
with: | |
path: .build | |
key: ${{needs.spm-package-resolved.outputs.cache_key}} | |
- name: Xcode | |
run: sudo xcode-select -s /Applications/${{ matrix.xcode }}.app/Contents/Developer | |
- name: Initialize xcodebuild | |
run: scripts/setup_spm_tests.sh | |
- name: Objc Import Tests | |
run: scripts/third_party/travis/retry.sh ./scripts/build.sh objc-import-test ${{ matrix.target }} spm | |
- name: Swift Tests | |
run: scripts/third_party/travis/retry.sh ./scripts/build.sh swift-test ${{ matrix.target }} spm | |
- name: Version Tests | |
run: scripts/third_party/travis/retry.sh ./scripts/build.sh version-test ${{ matrix.target }} spm | |
- name: Analytics Build Tests | |
run: scripts/third_party/travis/retry.sh ./scripts/build.sh analytics-import-test ${{ matrix.target }} spm |