name: Build host tools

on:
  pull_request:
    paths:
      - 'tools/**'
      - '.github/workflows/tools.yml'

permissions:
  contents: read

jobs:
  build:
    name: tools-${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: False
      matrix:
        os: 
          - ubuntu-latest
          - macos-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
          path: openwrt

      - name: Setup MacOS
        if: ${{ matrix.os == 'macos-latest' }}
        run: |
          echo "WORKPATH=/Volumes/OpenWrt/openwrt/" >> "$GITHUB_ENV"
          hdiutil create -size 20g -type SPARSE -fs "Case-sensitive HFS+" -volname OpenWrt OpenWrt.sparseimage
          hdiutil attach OpenWrt.sparseimage
          mv "$GITHUB_WORKSPACE/openwrt" /Volumes/OpenWrt/
          cd "$WORKPATH"

          brew install \
            autoconf \
            automake \
            coreutils \
            diffutils \
            findutils \
            gawk \
            gettext \
            git-extras \
            gmp \
            gnu-getopt \
            gnu-sed \
            gnu-tar \
            grep \
            libidn2 \
            libunistring \
            m4 \
            make \
            mpfr \
            ncurses \
            openssl@1.1 \
            pcre \
            pkg-config \
            quilt \
            readline \
            wget \
            zstd

            echo "/bin" >> "$GITHUB_PATH"
            echo "/sbin/Library/Apple/usr/bin" >> "$GITHUB_PATH"
            echo "/usr/bin" >> "$GITHUB_PATH"
            echo "/usr/local/bin" >> "$GITHUB_PATH"
            echo "/usr/local/opt/coreutils/bin" >> "$GITHUB_PATH"
            echo "/usr/local/opt/findutils/libexec/gnubin" >> "$GITHUB_PATH"
            echo "/usr/local/opt/gettext/bin" >> "$GITHUB_PATH"
            echo "/usr/local/opt/gnu-getopt/bin" >> "$GITHUB_PATH"
            echo "/usr/local/opt/make/libexec/gnubin" >> "$GITHUB_PATH"
            echo "/usr/local/opt/make/libexec/gnubin" >> "$GITHUB_PATH"
            echo "/usr/sbin" >> "$GITHUB_PATH"
            pwd

      - name: Setup Ubuntu
        if: ${{ matrix.os == 'ubuntu-latest' }}
        env:
          DEBIAN_FRONTEND: noninteractive
        run: |
          sudo apt-get update
          sudo apt-get -y install \
            build-essential \
            ccache \
            clang-12 \
            ecj \
            fastjar \
            file \
            g++ \
            gawk \
            gettext \
            git \
            java-propose-classpath \
            libelf-dev \
            libncurses-dev \
            libssl-dev \
            mkisofs \
            python3 \
            python3-dev \
            python3-distutils \
            python3-setuptools \
            qemu-utils \
            rsync \
            subversion \
            swig \
            unzip \
            wget \
            xsltproc \
            zlib1g-dev
          echo "WORKPATH=$GITHUB_WORKSPACE/openwrt/" >> "$GITHUB_ENV"
          cd "$WORKPATH"
          pwd

      - name: Make prereq
        run: |
          cd "$WORKPATH"
          pwd
          make defconfig

      - name: Build tools
        run: |
          cd "$WORKPATH"
          make tools/install -j$(nproc) BUILD_LOG=1 || ret=$? .github/workflows/scripts/show_build_failures.sh

      - name: Move logs to GITHUB_WORKSPACE
        if: always()
        run: |
          cp -r "$WORKPATH/logs" "$GITHUB_WORKSPACE"
          cp -r "$WORKPATH/.config" "$GITHUB_WORKSPACE/config"


      - name: Upload logs
        if: always()
        uses: actions/upload-artifact@v2
        with:
          name: ${{ matrix.os }}-logs
          path: "logs"

      - name: Upload config
        if: always()
        uses: actions/upload-artifact@v2
        with:
          name: ${{ matrix.os }}-config
          path: "config"
