name: 'CI'

on:
  push:
    paths-ignore:
      - 'wiki/**'
      - 'wiki_static/**'

jobs:
  build:
    runs-on: [self-hosted]
    steps:
      - name: Cleanup workspace
        uses: AutoModality/action-clean@v1

      - name: Checkout code
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
          submodules: true
      - uses: satackey/action-docker-layer-caching@v0.0.8
        continue-on-error: true
        with:
          key: docker-cache-${{ hashFiles('docker/**') }}-{hash}
          restore-keys: docker-cache-${{ hashFiles('docker/**') }}-
      - name: Build docker image
        uses: ./.github/actions/docker

      - name: Check syntax
        uses: ./.github/actions/docker
        continue-on-error: false
        with:
          run: /syntax_check.sh

      - name: Build F4 bootloader in docker
        uses: ./.github/actions/docker
        with:
          run: make -C bootloader TARGET=f4

      - name: Publish F4 bootloader artifacts
        uses: actions/upload-artifact@v2
        with:
          name: bootloader_f4
          path: |
            bootloader/.obj/f4/bootloader.elf
            bootloader/.obj/f4/bootloader.bin
            bootloader/.obj/f4/bootloader.hex
          if-no-files-found: error
          retention-days: 7

      - name: Build F4 firmware in docker
        uses: ./.github/actions/docker
        with:
          run: make -C firmware TARGET=f4 APP_RELEASE=1

      - name: Publish F4 firmware artifacts
        uses: actions/upload-artifact@v2
        with:
          name: firmware_f4
          path: |
            firmware/.obj/f4/firmware.elf
            firmware/.obj/f4/firmware.bin
            firmware/.obj/f4/firmware.hex
          if-no-files-found: error
          retention-days: 7

  upload:
    name: Upload artifacts to external storage
    needs: build
    runs-on: [self-hosted]
    steps:
      - name: Create directory for artifacts
        run: mkdir artifacts
      - name: Get bootloader
        uses: actions/download-artifact@v2
        with:
          name: bootloader_f4
          path: artifacts/bootloader
      - name: Get firmware
        uses: actions/download-artifact@v2
        with:
          name: firmware_f4
          path: artifacts/firmware
      - name: Upload bootloader
        uses: burnett01/rsync-deployments@4.1
        with:
          switches: -avzp --delete
          path: artifacts/bootloader
          remote_path: "${{ secrets.RSYNC_DEPLOY_BASE_PATH }}${GITHUB_REF##*/}/"
          remote_host: ${{ secrets.RSYNC_DEPLOY_HOST }}
          remote_port: ${{ secrets.RSYNC_DEPLOY_PORT }}
          remote_user: ${{ secrets.RSYNC_DEPLOY_USER }}
          remote_key: ${{ secrets.RSYNC_DEPLOY_KEY }}
      - name: Upload firmware
        uses: burnett01/rsync-deployments@4.1
        with:
          switches: -avzp --delete 
          path: artifacts/firmware
          remote_path: "${{ secrets.RSYNC_DEPLOY_BASE_PATH }}${GITHUB_REF##*/}/"
          remote_host: ${{ secrets.RSYNC_DEPLOY_HOST }}
          remote_port: ${{ secrets.RSYNC_DEPLOY_PORT }}
          remote_user: ${{ secrets.RSYNC_DEPLOY_USER }}
          remote_key: ${{ secrets.RSYNC_DEPLOY_KEY }}

  fullfirmware:
    name: Create latest full firmware
    needs: upload
    if: github.ref == 'refs/heads/master'
    runs-on: [self-hosted]
    steps:
      - name: Get bootloader
        uses: actions/download-artifact@v2
        with:
          name: bootloader_f4
          path: bootloader
      - name: Get firmware
        uses: actions/download-artifact@v2
        with:
          name: firmware_f4
          path: firmware 
      - name: cp 
        run: cp ./bootloader/bootloader.bin full_firmware_latest.bin
      - name: truncate 
        run: truncate -s 32768 full_firmware_latest.bin
      - name: cat 
        run: cat ./firmware/firmware.bin >> full_firmware_latest.bin
      - name: ls 
        run: ls -R
      - name: Upload fullfirmware
        uses: burnett01/rsync-deployments@4.1
        with:
          switches: -avzp --delete
          path: full_firmware_latest.bin
          remote_path: "${{ secrets.RSYNC_DEPLOY_BASE_PATH }}/"
          remote_host: ${{ secrets.RSYNC_DEPLOY_HOST }}
          remote_port: ${{ secrets.RSYNC_DEPLOY_PORT }}
          remote_user: ${{ secrets.RSYNC_DEPLOY_USER }}
          remote_key: ${{ secrets.RSYNC_DEPLOY_KEY }}

  genpic:
    name: Generate pic
    needs: fullfirmware
    if: github.ref == 'refs/heads/master'
    runs-on: [self-hosted]
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
          ref: master 
          submodules: true      
      - name: Set test env
        run: echo "NUMBER_OF_COMMITS=$(git rev-list --count HEAD)" >> $GITHUB_ENV
      - name: Test output NUMBER_OF_COMMITS
        run: echo $NUMBER_OF_COMMITS
      - name: Test output date
        run: |
          GET_DATE=$(date +"%b %d")
          PREP_DATE=$(echo "${GET_DATE^^}")
          echo "PREP_DATE=$PREP_DATE" >> $GITHUB_ENV
      - name: Test output PREP_DATE
        run: echo $PREP_DATE          
      - name: Gen pic
        run: convert ./.github/assets/latest-firmware-template.png -font ./.github/assets/Born2bSportyV2.ttf -weight 700 -pointsize 140 -annotate +900+330 "$NUMBER_OF_COMMITS $PREP_DATE" latest-firmware-banner.png
      - name: Upload pic
        uses: burnett01/rsync-deployments@4.1
        with:
          switches: -avzp --delete
          path: latest-firmware-banner.png
          remote_path: "${{ secrets.RSYNC_DEPLOY_BASE_PATH }}/"
          remote_host: ${{ secrets.RSYNC_DEPLOY_HOST }}
          remote_port: ${{ secrets.RSYNC_DEPLOY_PORT }}
          remote_user: ${{ secrets.RSYNC_DEPLOY_USER }}
          remote_key: ${{ secrets.RSYNC_DEPLOY_KEY }}
