name: BTClock CI

on: 
  push:
    tags:
      - '*'

jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: write

    steps:
      - uses: actions/checkout@v4
        with:
          submodules: recursive
      - uses: actions/setup-node@v4
        with:
          node-version: lts/*
          cache: yarn
          cache-dependency-path: '**/yarn.lock'
      - uses: actions/cache@v3
        with:
          path: |
            ~/.cache/pip
            ~/.platformio/.cache
            ~/data/node_modules
          key: ${{ runner.os }}-pio
      - uses: actions/setup-python@v4
        with:
          python-version: '3.9'
      - name: Get current date
        id: dateAndTime
        # run: echo "::set-output name=dateAndTime::$(date +'%Y-%m-%d-%H:%M')"
        run: echo "dateAndTime=$(date +'%Y-%m-%d-%H:%M')" >> $GITHUB_OUTPUT
      - name: Install PlatformIO Core
        run: pip install --upgrade platformio
      - name: Run unit tests
        run: mkdir -p junit-reports && pio test -e native_test_only --junit-output-path --junit-output-path junit-reports/
      - name: Publish Test Report
        uses: mikepenz/action-junit-report@v4
        if: success() || failure() # always run even if the previous step fails
        with:
          report_paths: '**/junit-reports/*.xml'
      - name: Build BTClock firmware
        run: pio run -e lolin_s3_mini_qr 

      - name: Build BTClock filesystem
        run: pio run -e lolin_s3_mini_qr --target buildfs

      - name: Install esptools.py
        run: pip install --upgrade esptool

      - name: Create merged firmware binary
        run: mkdir -p output && esptool.py --chip esp32s3 merge_bin -o output/full-firmware.bin --flash_mode dio 0x0000 .pio/build/lolin_s3_mini_qr/bootloader.bin 0x8000 .pio/build/lolin_s3_mini_qr/partitions.bin 0xe000 ~/.platformio/packages/framework-arduinoespressif32/tools/partitions/boot_app0.bin 0x10000 .pio/build/lolin_s3_mini_qr/firmware.bin 0x369000 .pio/build/lolin_s3_mini_qr/littlefs.bin

      - name: Create checksum for merged binary
        run: shasum -a 256 output/full-firmware.bin | awk '{print $1}' > output/full-firmware.sha256

      - name: Write commit hash to file
        run: echo $GITHUB_SHA > output/commit.txt

      - name: Write build date to file
        run: echo "$(date -u +'%Y-%m-%dT%H:%M:%SZ')" > output/date.txt

      - name: Copy all artifacts to output folder
        run: cp .pio/build/lolin_s3_mini_qr/*.bin ~/.platformio/packages/framework-arduinoespressif32/tools/partitions/boot_app0.bin output

      - name: Upload artifacts
        uses: actions/upload-artifact@v3
        with:
          path: |
            .pio/build/lolin_s3_mini_qr/*.bin
            output/full-firmware.bin
            output/full-firmware.sha256
      - name: Create release
        uses: ncipollo/release-action@v1
        with:
          artifacts: "output/full-firmware.bin,output/full-firmware.sha256,.pio/build/lolin_s3_mini_qr/*.bin"
          allowUpdates: true
          removeArtifacts: true
          makeLatest: true
      - name: Pushes full-firmware.bin to web flasher
        id: push_directory
        uses: cpina/github-action-push-to-another-repository@main
        env:
          SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
        with:
          source-directory: output/
          target-directory: firmware_v3/
          destination-github-username: 'btclock'
          destination-repository-name: 'web-flasher'
          target-branch: btclock
          user-name: ${{github.actor}}
          user-email: ${{github.actor}}@users.noreply.github.com