name: CI

on: [push, pull_request]

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

    steps:
      - name: Install dependencies (apk)
        run: apk add --no-cache gcc-riscv-none-elf g++-riscv-none-elf gcc-arm-none-eabi g++-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 --break-system-packages bdflib

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

      - name: Git ownership exception
        run: git config --global --add safe.directory /__w/IronOS/IronOS && git config --global safe.directory "$GITHUB_WORKSPACE"

      - name: Git meta info
        run: echo "GITHUB_CI_PR_SHA=${{github.event.pull_request.head.sha}}" >> "${GITHUB_ENV}"

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

      - name: Copy license files
        run: cp LICENSE scripts/LICENSE_RELEASE.md  source/Hexfile/

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

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

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

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

    steps:
      - name: Install dependencies (apk)
        run: apk add --no-cache gcc-riscv-none-elf g++-riscv-none-elf gcc-arm-none-eabi g++-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 --break-system-packages bdflib

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

      - name: Git ownership exception
        run: git config --global --add safe.directory /__w/IronOS/IronOS && git config --global safe.directory "$GITHUB_WORKSPACE"

      - name: Git meta info
        run: echo "GITHUB_CI_PR_SHA=${{github.event.pull_request.head.sha}}" >> "${GITHUB_ENV}"

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

      - name: Copy license files
        run: cp LICENSE scripts/LICENSE_RELEASE.md  source/Hexfile/

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

      - name: Generate json index file
        run: ./source/metadata.py ${{ matrix.model }}_multi-lang.json

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

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

    steps:
      - name: Install dependencies (apk)
        run: apk add --no-cache python3 py3-pip make git bash findutils gcc musl-dev

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

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

      - name: Run python tests
        run: ./Translations/make_translation_test.py

      - name: Run BriefLZ tests
        run: make  -C source/  Objects/host/brieflz/libbrieflz.so && ./Translations/brieflz_test.py

  check_c-cpp:
    runs-on: ubuntu-20.04
    container:
      image: alpine:3.19

    steps:
      - name: Install dependencies (apk)
        run: apk add --no-cache make git diffutils findutils clang-extra-tools bash

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

      - name: Check format style with clang-format
        run: make  clean  check-style

  check_python:
    runs-on: ubuntu-20.04
    container:
      image: alpine:3.19

    steps:
      - name: Install dependencies (apk)
        run: apk add --no-cache python3 py3-pip make git black

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

      - name: Install dependencies (python)
        run: python3 -m pip install --break-system-packages bdflib flake8

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

      - name: Check python with flake8
        run: flake8 Translations

  check_shell:
    name: check_shell
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - 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.

  check_readme:
    runs-on: ubuntu-20.04
    container:
      image: alpine:3.19

    steps:
      - name: Install dependencies (apk)
        run: apk add --no-cache git

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

      - name: Check autogenerated Documentation/README.md
        run: /bin/sh ./scripts/deploy.sh docs_readme
