name: "TestFlight ⚙️"

on:
  repository_dispatch:
    types: [testflight]
  
jobs:
  test_build:
    runs-on: macos-14

    steps:
    - name: Checkout
      uses: actions/checkout@v4
      with:
        token: ${{ secrets.GITHUB_TOKEN }}
        fetch-depth: 0

    - name: git Checkout
      if: ${{ github.event.client_payload.hasCheckoutCommit }}
      run: |
        git checkout ${{ github.event.client_payload.commitSHA }}

    - name: Install SwiftGen
      run: brew install swiftgen

    - name: Update Carthage
      run: carthage update --use-xcframeworks --cache-builds
    
    - name: Install the Apple certificate and provisioning profile
      env:
        BUILD_CERTIFICATE_BASE64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
        BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.BUILD_PROVISION_PROFILE_BASE64 }}
        KEYCHAIN_PASSWORD: "CI_PASSWORD"
        P12_PASSWORD: ${{ secrets.P12_PASSWORD }}
      run: |
        # create variables
        CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
        PP_PATH=$RUNNER_TEMP/build_pp.mobileprovision
        KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db

        # import certificate and provisioning profile from secrets
        echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode -o $CERTIFICATE_PATH
        echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode -o $PP_PATH

        # create temporary keychain
        security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
        security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
        security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH

        # import certificate to keychain
        security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
        security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
        security list-keychain -d user -s $KEYCHAIN_PATH

        # apply provisioning profile
        mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
        sudo mkdir -p /Library/MobileDevice/Provisioning\ Profiles
        cp $PP_PATH ~/Library/MobileDevice/Provisioning\ Profiles
        sudo cp $PP_PATH /Library/MobileDevice/Provisioning\ Profiles
    
    - name: Build and Upload to TestFlight
      run: sudo fastlane testFlightLane \
        keyID:${{ secrets.APP_STORE_KEY_ID }} \
        issuerID:${{ secrets.APP_STORE_ISSUER_ID }} \
        keyContents:${{ secrets.APP_STORE_KEY_CONTENTS }} \
        scheme:${{ github.event.client_payload.scheme }} \
        codeSign64:${{ secrets.CODE_SIGN_64 }} \
        profileName64:${{ secrets.PROFILE_NAME_64 }} \
        xcodeVersion:${{ github.event.client_payload.xcodeVersion }} \
        build:${{ github.event.client_payload.build }} \
        version:${{ github.event.client_payload.version }}