name: "Build 🔨"

on:
  push:
    branches: [ main ]
  pull_request:
    types:
      - opened
      - reopened
      - synchronize
      - ready_for_review
    branches: [ main ]

jobs:
  build:
    name: "Build 🔨"
    if: github.event.pull_request.draft == false
    strategy:
      matrix:
        scheme:
          - "Swiftfin"
          - "Swiftfin tvOS"

    runs-on: macos-14

    steps:    
      - name: Checkout
        uses: actions/checkout@v4

      - name: Install SwiftGen
        run: brew install swiftgen

      - name: Set Xcode Version
        run: sudo xcode-select -s "/Applications/Xcode_15.3.app"

      - name: Cache Carthage
        uses: actions/cache@v4
        id: carthage-cache
        with:
          path: Carthage
          key: ${{ runner.os }}-carthage-${{ hashFiles('**/Cartfile.resolved') }}
          restore-keys: ${{ runner.os }}-carthage-

      - name: Update Carthage
        run: carthage update --use-xcframeworks --cache-builds

      # FIXME: caches would keep failed compiles?

      # - name: Cache Swift packages
      #   uses: actions/cache@v4
      #   with:
      #     path: PackageCache
      #     key: ${{ runner.os }}-${{ matrix.scheme }}-spm-${{ hashFiles('**/Package.resolved') }}
      #     restore-keys: ${{ runner.os }}-${{ matrix.scheme }}-spm-

      - name: Build
        uses: nick-fields/retry@v2
        with:
          max_attempts: 3
          retry_on: error
          timeout_minutes: 60
          command: |
            xcodebuild build -project "Swiftfin.xcodeproj" \
            -scheme "${{ matrix.scheme }}" \
            -clonedSourcePackagesDirPath PackageCache \
            CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO