name: CI

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-20.04
    container:
      image: alpine:3.15
    strategy:
      matrix:
        model: ["TS100", "TS80", "TS80P", "Pinecil", "MHP30"]
      fail-fast: true

    steps:
      - name: Install dependencies (apk)
        run: apk add --no-cache gcc-riscv-none-elf gcc-arm-none-eabi newlib-riscv-none-elf newlib-arm-none-eabi findutils python3 py3-pip make git bash

      - name: Install dependencies (python)
        run: python3 -m pip install bdflib

      - uses: actions/checkout@v3
        with:
          submodules: true

      - name: build ${{ matrix.model }}
        run: cd source && ./build.sh -m ${{ matrix.model }}

      - name: copy license text
        run: |
          cp LICENSE source/Hexfile/LICENSE
          cp LICENSE_RELEASE.md source/Hexfile/LICENSE_RELEASE.md

      - name: Archive ${{ matrix.model }} artifacts
        uses: actions/upload-artifact@v2
        with:
          name: ${{ matrix.model }}
          path: |
            source/Hexfile/${{ matrix.model }}_*.hex
            source/Hexfile/${{ matrix.model }}_*.dfu
            source/Hexfile/LICENSE
            source/Hexfile/LICENSE_RELEASE.md
          if-no-files-found: error

      - name: Generate json index file
        run: cd source && python3 metadata.py ${{ matrix.model }}.json

      - name: Archive ${{ matrix.model }} index file
        uses: actions/upload-artifact@v2
        with:
          name: metadata
          path: source/Hexfile/${{ matrix.model }}.json

  build_multi-lang:
    runs-on: ubuntu-20.04
    container:
      image: alpine:3.15
    strategy:
      matrix:
        model: ["Pinecil"]
      fail-fast: true

    steps:
      - name: Install dependencies (apk)
        run: apk add --no-cache gcc-riscv-none-elf gcc-arm-none-eabi newlib-riscv-none-elf newlib-arm-none-eabi findutils python3 py3-pip make git bash musl-dev
      - name: Install dependencies (python)
        run: python3 -m pip install bdflib

      - uses: actions/checkout@v3
        with:
          submodules: true

      - name: build ${{ matrix.model }}
        run: cd source && make -j$(nproc) model="${{ matrix.model }}" firmware-multi_compressed_European firmware-multi_compressed_Bulgarian+Russian+Serbian+Ukrainian firmware-multi_Chinese+Japanese

      - name: copy license text
        run: |
          cp LICENSE source/Hexfile/LICENSE
          cp LICENSE_RELEASE.md source/Hexfile/LICENSE_RELEASE.md

      - name: Archive ${{ matrix.model }} artifacts
        uses: actions/upload-artifact@v2
        with:
          name: ${{ matrix.model }}_multi-lang
          path: |
            source/Hexfile/${{ matrix.model }}_*.hex
            source/Hexfile/${{ matrix.model }}_*.dfu
            source/Hexfile/LICENSE
            source/Hexfile/LICENSE_RELEASE.md
          if-no-files-found: error

      - name: Generate json index file
        run: cd source && python3 metadata.py Pinecil_multi-lang.json

      - name: Archive ${{ matrix.model }} index file
        uses: actions/upload-artifact@v2
        with:
          name: metadata
          path: source/Hexfile/Pinecil_multi-lang.json

  tests:
    runs-on: ubuntu-20.04
    container:
      image: alpine:3.15

    steps:
      - name: deps
        run: apk add --no-cache python3 py3-pip make git bash findutils gcc musl-dev

      - uses: actions/checkout@v3
        with:
          submodules: true

      - name: install black
        run: python3 -m pip install bdflib

      - name: Run python tests
        run: cd Translations && chmod +x make_translation_test.py && ./make_translation_test.py

      - name: Run BriefLZ tests
        run: |
          cd source
          make Objects/host/brieflz/libbrieflz.so
          cd ../Translations
          chmod +x brieflz_test.py
          ./brieflz_test.py

  check_formatting:
    runs-on: ubuntu-20.04
    container:
      image: alpine:3.15

    steps:
      - name: deps
        run: apk add --no-cache python3 py3-pip make git

      - uses: actions/checkout@v3
        with:
          submodules: true

      - name: install black
        run: python3 -m pip install bdflib black flake8

      - name: Check formatting with clang-format
        run: cd source && make clean && make check-style

      - name: Check python formatting with black
        run: black --check Translations

      - name: Check python with flake8
        run: flake8 Translations

  shellcheck:
    name: runner / shellcheck
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: shellcheck
        uses: reviewdog/action-shellcheck@v1
        with:
          github_token: ${{ secrets.github_token }}
          reporter: github-pr-review # Change reporter.
          exclude: "./.git/*" # Optional.
          check_all_files_with_shebangs: "false" # Optional.
