name: common permissions: contents: read on: workflow_call: inputs: # The target scheme to be tested. target: type: string required: true # The platforms to build on. Defaults to all. # To target specific platforms, pass a comma or space separated string of # platforms. # # Examples: # - build/test only for macOS: `macOS` # - build/test only for macOS and tvOS: `macOS, tvOS` platforms: type: string required: false default: "iOS, tvOS, macOS, watchOS, catalyst, visionOS" # By default, all platforms will be tested (see matrix in `spm` job). # To build instead of test, pass a comma or space separated string of # platforms. # # Platform options: [iOS, tvOS, macOS, watchOS, catalyst, visionOS] # # Note: Build-only platforms must be represented in the `platforms` input # (which defaults to all platforms) in order to take effect. # # Examples: # - build only for macOS: `macOS` # - build only for macOS and tvOS: `macOS, tvOS` # - build only for all platforms: `all` buildonly_platforms: type: string required: false default: "" # A command to execute before testing. # # This is useful for additional set up, like starting an emulator or # downloading test data. # # Example: `FirebaseFunctions/Backend/start.sh synchronous` setup_command: type: string required: false default: "" outputs: cache_key: description: "The cache key for the Swift package resolution." value: ${{ jobs.spm-package-resolved.outputs.cache_key }} jobs: spm-package-resolved: env: FIREBASECI_USE_LATEST_GOOGLEAPPMEASUREMENT: 1 runs-on: macos-15 outputs: cache_key: ${{ steps.generate_cache_key.outputs.cache_key }} steps: - uses: actions/checkout@v4 - name: Xcode run: sudo xcode-select -s /Applications/Xcode_16.4.app/Contents/Developer - 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 }} spm: # Run on the main repo's scheduled jobs or pull requests and manual workflow invocations. if: (github.repository == 'firebase/firebase-ios-sdk' && github.event_name == 'schedule') || contains(fromJSON('["pull_request", "workflow_dispatch"]'), github.event_name) needs: [spm-package-resolved] strategy: matrix: os: [macos-15] xcode: [Xcode_16.4] platform: [iOS, tvOS, macOS, watchOS, catalyst, visionOS] include: - os: macos-14 xcode: Xcode_16.2 platform: iOS - os: macos-26 xcode: Xcode_26.0 platform: iOS 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: Run setup command, if needed. if: inputs.setup_command != '' run: ${{ inputs.setup_command }} - name: Initialize xcodebuild run: scripts/setup_spm_tests.sh - uses: nick-fields/retry@ce71cc2ab81d554ebbe88c79ab5975992d79ba08 # v3 if: contains(join(inputs.platforms), matrix.platform) || matrix.os == 'macos-14' with: timeout_minutes: 15 max_attempts: 3 retry_wait_seconds: 120 command: | ./scripts/build.sh \ ${{ inputs.target }} \ ${{ matrix.platform }} \ ${{ (contains(inputs.buildonly_platforms, matrix.platform) || contains(inputs.buildonly_platforms, 'all')) && 'spmbuildonly' || 'spm' }}