name: 'Compact build'

on:
  pull_request:

env:
  FBT_TOOLCHAIN_PATH: /runner/_work
  FBT_GIT_SUBMODULE_SHALLOW: 1
  GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

jobs:
  compact:
    runs-on: [self-hosted, FlipperZeroShell]
    strategy:
      fail-fast: false
      matrix:
        target: [f7, f18]
    steps:
      - name: 'Wipe workspace'
        run: find ./ -mount -maxdepth 1 -exec rm -rf {} \;

      - name: 'Checkout code'
        uses: actions/checkout@v4
        with:
          fetch-depth: 1
          submodules: false
          ref: ${{ github.event.pull_request.head.sha }}

      - name: 'Get commit details'
        run: |
          if [[ ${{ github.event_name }} == 'pull_request' ]]; then
            TYPE="pull"
          elif [[ "${{ github.ref }}" == "refs/tags/"* ]]; then
            TYPE="tag"
          else
            TYPE="other"
          fi
          python3 scripts/get_env.py "--event_file=${{ github.event_path }}" "--type=$TYPE" || cat "${{ github.event_path }}"

      - name: 'Build the firmware'
        id: build-fw
        run: |
          set -e
          TARGET="$(echo '${{ matrix.target }}' | sed 's/f//')"; \
          ./fbt TARGET_HW=$TARGET DEBUG=0 COMPACT=1 fap_dist updater_package
          echo "sdk-file=$(ls dist/${{ matrix.target }}-*/flipper-z-${{ matrix.target }}-sdk-*.zip)" >> $GITHUB_OUTPUT
          echo "hw-target-code=$TARGET" >> $GITHUB_OUTPUT

      - name: Deploy uFBT with SDK
        uses: flipperdevices/flipperzero-ufbt-action@v0.1
        with:
          task: setup
          sdk-file: ${{ steps.build-fw.outputs.sdk-file }}
          sdk-hw-target: ${{ steps.build-fw.outputs.hw-target-code }}

      - name: Build test app with SDK
        run: |
          mkdir testapp
          cd testapp
          ufbt create APPID=testapp
          ufbt

      - name: Build example & external apps with uFBT
        run: |
          for appdir in 'applications/examples'; do
            for app in $(find "$appdir" -maxdepth 1 -mindepth 1 -type d); do
              pushd $app
              TARGETS_FAM=$(grep "targets" application.fam || echo "${{ matrix.target }}")
              if ! grep -q "${{ matrix.target }}" <<< $TARGETS_FAM ; then
                  echo Skipping unsupported app: $app
                  popd
                  continue
              fi
              echo Building $app
              ufbt
              popd
            done
          done

## Uncomment this for a single job that will run only if all targets are built successfully          
#  report-status:
#    name: Report status
#    needs: [compact]
#    if: always() && !contains(needs.*.result, 'failure')
#    runs-on: [self-hosted, FlipperZeroShell]
#    steps:
#      - run: echo "All good ✨" ;
