name: Nightly SideStore build
on:
  push:
    branches:
      - develop

jobs:
  build:
    name: Build and upload SideStore Nightly
    concurrency:
      group: ${{ github.ref }}
      cancel-in-progress: true
    strategy:
      fail-fast: false
      matrix:
        include:
          - os: 'macos-12'
            version: '14.2'

    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          submodules: recursive

      - name: Install dependencies
        run: brew install ldid

      - name: Cache .nightly-build-num
        uses: actions/cache@v3
        with:
          path: .nightly-build-num
          key: nightly-build-num

      - name: Increase nightly build number and set as version
        run: bash .github/workflows/increase-nightly-build-num.sh

      - name: Get version
        id: version
        run: echo "version=$(grep MARKETING_VERSION Build.xcconfig | sed -e "s/MARKETING_VERSION = //g")" >> $GITHUB_OUTPUT

      - name: Echo version
        run: echo "${{ steps.version.outputs.version }}"

      - name: Setup Xcode
        uses: maxim-lobanov/setup-xcode@v1.4.1
        with:
          xcode-version: ${{ matrix.version }}

      - name: Build SideStore
        run: make build | xcpretty && exit ${PIPESTATUS[0]}

      - name: Fakesign app
        run: make fakesign

      - name: Convert to IPA
        run: make ipa

      - name: Get current date
        id: date
        run: echo "date=$(date -u +'%c')" >> $GITHUB_OUTPUT

      - name: Get current date in AltStore date form
        id: date_altstore
        run: echo "date=$(date -u +'%Y-%m-%d')" >> $GITHUB_OUTPUT

      - name: Upload to nightly release
        uses: IsaacShelton/update-existing-release@v1.3.1
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          release: "Nightly"
          tag: "nightly"
          prerelease: true
          files: SideStore.ipa
          body: |
            This is an ⚠️ **EXPERIMENTAL** ⚠️ nightly build for commit [${{ github.sha }}](https://github.com/${{ github.repository }}/commit/${{ github.sha }}).
            
            Nightly builds are **extremely experimental builds only meant to be used by developers and alpha testers. They often contain bugs and experimental features. Use at your own risk!**
            
            If you want to try out new features early but want a lower chance of bugs, you can look at [SideStore Beta](https://github.com/${{ github.repository }}/releases?q=beta).
            
            ## Build Info
            
            Built at (UTC): `${{ steps.date.outputs.date }}`
            Built at (UTC date): `${{ steps.date_altstore.outputs.date }}`
            Commit SHA: `${{ github.sha }}`
            Version: `${{ steps.version.outputs.version }}`

      - name: Add version to IPA file name
        run: mv SideStore.ipa SideStore-${{ steps.version.outputs.version }}.ipa

      - name: Upload SideStore.ipa Artifact
        uses: actions/upload-artifact@v3.1.0
        with:
          name: SideStore-${{ steps.version.outputs.version }}.ipa
          path: SideStore-${{ steps.version.outputs.version }}.ipa

      - name: Upload *.dSYM Artifact
        uses: actions/upload-artifact@v3.1.0
        with:
          name: SideStore-${{ steps.version.outputs.version }}-dSYM
          path: ./*.dSYM/

      - name: Reset cache for apps.sidestore.io/nightly
        run: sleep 10 && curl https://apps.sidestore.io/reset-cache/nightly/${{ secrets.SIDESOURCE_KEY }}
