name: Release

on:
  push:
    tags:
      - "builds/*"

env:
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  APP_STORE_CONNECT_API_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY }}
  FASTLANE_USERNAME: ${{ secrets.FASTLANE_USERNAME }}
  FASTLANE_PASSWORD: ${{ secrets.FASTLANE_PASSWORD }}
  TESTFLIGHT_PREFACE: ${{ vars.TESTFLIGHT_PREFACE }}
  XCODEPROJ: "Passepartout.xcodeproj/project.pbxproj"

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  run_tests:
    name: Run tests
    runs-on: macos-15
    timeout-minutes: 15
    steps:
      - uses: passepartoutvpn/action-prepare-xcode-build@master
        with:
          access_token: ${{ secrets.ACCESS_TOKEN }}
      - run: |
          bundle exec fastlane test
  build_upload:
    name: Upload to ASC
    runs-on: macos-15
    needs: run_tests
    strategy:
      fail-fast: true
      matrix:
        platform: ["iOS", "macOS", "tvOS"]
    steps:
      - uses: passepartoutvpn/action-prepare-xcode-build@master
        with:
          access_token: ${{ secrets.ACCESS_TOKEN }}
      - name: Upload ${{ matrix.platform }} app
        id: upload_app
        timeout-minutes: 30
        env:
          MATCH_USERNAME: ${{ secrets.MATCH_USERNAME }}
          MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
          MATCH_GIT_URL: ${{ secrets.MATCH_GIT_URL }}
          MATCH_GIT_PRIVATE_KEY: ${{ secrets.MATCH_GIT_PRIVATE_KEY }}
          PILOT_BETA_APP_FEEDBACK: ${{ secrets.PILOT_BETA_APP_FEEDBACK }}
          PILOT_BETA_APP_REVIEW_INFO: ${{ secrets.PILOT_BETA_APP_REVIEW_INFO }}
          PILOT_GROUPS: ${{ vars.PILOT_GROUPS }}
        run: |
          ci/recognize-match-hostname.sh
          bundle exec fastlane --env ${{ matrix.platform }} beta
  distribute_public_beta:
    name: Distribute Public Beta
    runs-on: ubuntu-latest
    needs: build_upload
    environment:
      name: public_beta
    steps:
      - uses: actions/checkout@v4
      - uses: ruby/setup-ruby@v1
        with:
          bundler-cache: true
      - name: Fetch build metadata
        run: |
          echo "PILOT_APP_VERSION=`ci/version-number.sh $XCODEPROJ`" >> $GITHUB_ENV
          echo "PILOT_BUILD_NUMBER=`ci/build-number.sh $XCODEPROJ`" >> $GITHUB_ENV
      - name: Publish on TestFlight
        env:
          PILOT_GROUPS: ${{ vars.PILOT_GROUPS }}
          PILOT_NOTIFY_EXTERNAL_TESTERS: ${{ vars.PILOT_NOTIFY_EXTERNAL_TESTERS }}
        run: |
          PLATFORMS=("iOS" "macOS" "tvOS")
          for PLATFORM in ${PLATFORMS[@]}; do
            bundle exec fastlane --env $PLATFORM public_beta
          done