# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
name: Build

on:
  pull_request:

jobs:
  Linux:
    runs-on: ubuntu-latest
    env:
      DOCKER_BUILDKIT: 1
      IMAGE_TAG: docker.pkg.github.com/${{ github.repository }}/nuttx-ci-linux

    strategy:
      matrix:
        boards: [arm-01, arm-02, arm-03, arm-04, arm-05, arm-06, arm-07, arm-08, arm-09, arm-10, arm-11, arm-12, arm-13, other, risc-v, sim01, sim02, xtensa]

    steps:
      - name: Checkout nuttx repo
        uses: actions/checkout@v2
        with:
          repository: apache/incubator-nuttx
          ref: master
          path: sources/nuttx
          fetch-depth: 1
      - name: Checkout nuttx repo tags
        run: git -C sources/nuttx fetch --tags

      - name: Checkout apps repo
        uses: actions/checkout@v2
        with:
          repository: apache/incubator-nuttx-apps
          ref: master
          path: sources/apps
          fetch-depth: 1

      - name: Checkout testing repo
        uses: actions/checkout@v2
        with:
          repository: apache/incubator-nuttx-testing
          path: sources/testing
          fetch-depth: 1

      - name: Docker Login
        uses: azure/docker-login@v1
        with:
          login-server: docker.pkg.github.com
          username: ${GITHUB_ACTOR}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Docker Pull
        run: docker pull docker.pkg.github.com/apache/incubator-nuttx-testing/nuttx-ci-linux
      - name: Run builds
        uses: ./sources/testing/.github/actions/ci-container
        env:
          BLOBDIR: /tools/blobs
        with:
          run: |
            echo "::add-matcher::sources/nuttx/.github/gcc.json"
            export CCACHE_DIR=`pwd`/ccache
            mkdir $CCACHE_DIR
            cd sources/testing
            export ARTIFACTDIR=`pwd`/../../buildartifacts
            ./cibuild.sh -A -c testlist/${{matrix.boards}}.dat
            ccache -s

  macOS:
    runs-on: macos-10.15
    strategy:
      matrix:
        boards: [macos, sim01, sim02]
    steps:
      - name: Checkout nuttx repo
        uses: actions/checkout@v2
        with:
          repository: apache/incubator-nuttx
          ref: master
          path: sources/nuttx
          fetch-depth: 1
      - name: Checkout nuttx repo tags
        run: git -C sources/nuttx fetch --tags

      - name: Checkout apps repo
        uses: actions/checkout@v2
        with:
          repository: apache/incubator-nuttx-apps
          ref: master
          path: sources/apps
          fetch-depth: 1

      - name: Checkout testing repo
        uses: actions/checkout@v2
        with:
          repository: apache/incubator-nuttx-testing
          path: sources/testing
          fetch-depth: 1
      - name: Run Builds
        run: |
          echo "::add-matcher::sources/nuttx/.github/gcc.json"
          export CCACHE_DIR=`pwd`/ccache
          mkdir $CCACHE_DIR
          cd sources/testing
          export ARTIFACTDIR=`pwd`/../../buildartifacts
          ./cibuild.sh -i -A -c -x testlist/${{matrix.boards}}.dat
          ccache -s
