name: 🤖 iOS IPA Build

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

on:
  workflow_dispatch:
  pull_request:
    branches: [develop, master]
  push:
    branches: [develop, master]

jobs:
  build:
    runs-on: macos-15
    name: 🏗️ Build iOS IPA
    permissions:
      contents: read

    steps:
      - name: 📥 Check out repository
        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
        with:
          ref: ${{ github.event.pull_request.head.sha || github.sha }}
          show-progress: false
          submodules: recursive
          fetch-depth: 0

      - name: 🍞 Setup Bun
        uses: oven-sh/setup-bun@735343b667d3e6f658f44d0eca948eb6282f2b76 # v2.0.2
        with:
          bun-version: '1.2.15'

      - name: 💾 Cache Bun dependencies
        uses: actions/cache@5a3ec84eff668545956fd18022155c47e93e2684 # v4
        with:
          path: ~/.bun/install/cache
          key: ${{ runner.os }}-bun-cache-${{ hashFiles('bun.lock') }}
          restore-keys: |
            ${{ runner.os }}-bun-cache-

      - name: 📦 Install & Prepare
        run: |
          bun install --frozen-lockfile
          bun run submodule-reload

      - name: 🛠️ Generate project files
        run: bun run prebuild

      - name: 🏗 Setup EAS
        uses: expo/expo-github-action@main
        with:
          eas-version: 16.7.1
          token: ${{ secrets.EXPO_TOKEN }}

      - name: 🏗️ Build iOS app
        run: |
          eas build -p ios --local --non-interactive

      - name: 📅 Set date tag
        run: echo "DATE_TAG=$(date +%d-%m-%Y_%H-%M-%S)" >> $GITHUB_ENV

      - name: 📤 Upload IPA artifact
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: streamyfin-ipa-${{ env.DATE_TAG }}
          path: |
            build-*.ipa
          retention-days: 7
