# This config uses industrial_ci (https://github.com/ros-industrial/industrial_ci.git).
# For troubleshooting, see readme (https://github.com/ros-industrial/industrial_ci/blob/master/README.rst)

name: BuildAndTest

on:
  workflow_dispatch:
  pull_request:
  push:
    branches:
      - master

jobs:
  industrial_ci:
    strategy:
      matrix:
        env:
          - ROS_DISTRO: noetic
            ROS_REPO: main
            CATKIN_LINT: true
          - ROS_DISTRO: melodic
            ROS_REPO: main
            CATKIN_LINT: true
          - ROS_DISTRO: kinetic
            ROS_REPO: main
    env:
      CCACHE_DIR: "${{ github.workspace }}/.ccache"
      BASEDIR: ${{ github.workspace }}/.work
      CACHE_PREFIX: "${{ matrix.env.ROS_DISTRO }}-${{ matrix.env.ROS_REPO }}"

    name: "${{ matrix.env.ROS_DISTRO }}-${{ matrix.env.ROS_REPO }}${{ matrix.env.CATKIN_LINT && ' + catkin_lint' || ''}}"
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      # The target directory cache doesn't include the source directory because
      # that comes from the checkout.  See "prepare target_ws for cache" task below
      - name: cache target_ws
        if: ${{ ! matrix.env.CCOV }}
        uses: pat-s/always-upload-cache@v2.1.5
        with:
          path: ${{ env.BASEDIR }}/target_ws
          key: target_ws-${{ env.CACHE_PREFIX }}-${{ hashFiles('**/CMakeLists.txt', '**/package.xml') }}-${{ github.run_id }}
          restore-keys: |
            target_ws-${{ env.CACHE_PREFIX }}-${{ hashFiles('**/CMakeLists.txt', '**/package.xml') }}
      - name: cache ccache
        uses: pat-s/always-upload-cache@v2.1.5
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ccache-${{ env.CACHE_PREFIX }}-${{ github.sha }}-${{ github.run_id }}
          restore-keys: |
            ccache-${{ env.CACHE_PREFIX }}-${{ github.sha }}
            ccache-${{ env.CACHE_PREFIX }}
      - name: industrial_ci
        uses: 'ros-industrial/industrial_ci@master'
        env: ${{ matrix.env }}
      - name: upload test artifacts (on failure)
        uses: actions/upload-artifact@v2
        if: failure()
        with:
          name: test-results
          path: ${{ env.BASEDIR }}/target_ws/**/test_results/**/*.xml
      - name: prepare target_ws for cache
        if: ${{ always() && ! matrix.env.CCOV }}
        run: |
          du -sh ${{ env.BASEDIR }}/target_ws
          sudo find ${{ env.BASEDIR }}/target_ws -wholename '*/test_results/*' -delete
          sudo rm -rf ${{ env.BASEDIR }}/target_ws/src
          du -sh ${{ env.BASEDIR }}/target_ws
