name: Build

on: [pull_request, push]

jobs:
  build:
    strategy:
      fail-fast: false
      matrix:
        board:
          # Alphabetical order
          - 'metro_m0'
          - 'hallowing'
          - 'circuitplayground_m0'
          - 'metro_m4'
          - 'pybadge_m4'
          - 'pygamer_m4'
          - 'hallowing_m4'
          - 'pyportal_m4'
          - 'pyportal_m4_titano'
          - 'feather_m4_can'
          - 'metro_m0:usbstack=tinyusb'
          - 'metro_m4:speed=120,usbstack=tinyusb'

    runs-on: ubuntu-latest
    
    steps:
    - name: Setup Python
      uses: actions/setup-python@v4
      with:
        python-version: '3.x'
        
    - name: Checkout code
      uses: actions/checkout@v3
      with:
        submodules: 'true'

    - name: Install Arduino CLI and Tools
      run: |
        # make all our directories we need for files and libraries
        mkdir $HOME/.arduino15
        mkdir $HOME/.arduino15/packages
        mkdir $HOME/Arduino
        mkdir $HOME/Arduino/libraries
        curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh | sh
        echo "$GITHUB_WORKSPACE/bin" >> $GITHUB_PATH
        
    - name: Install BSP and Libraries
      env:
        BSP_URL: https://adafruit.github.io/arduino-board-index/package_adafruit_index.json
        BSP_PATH: .arduino15/packages/adafruit/hardware/samd
      run: |
        arduino-cli config init
        arduino-cli core update-index
        arduino-cli core update-index --additional-urls $BSP_URL        
        arduino-cli core install arduino:samd --additional-urls $BSP_URL
        arduino-cli core install adafruit:samd --additional-urls $BSP_URL
        # Replace release BSP with our code
        BSP_VERSION=`eval ls $HOME/$BSP_PATH`
        rm -r $HOME/$BSP_PATH/*
        ln -s $GITHUB_WORKSPACE $HOME/$BSP_PATH/$BSP_VERSION
        arduino-cli lib install "Adafruit NeoPixel" "Adafruit seesaw Library" "Adafruit SPIFlash" "FlashStorage" "MIDI Library" "SD" "SdFat - Adafruit Fork"

    - name: Build examples
      run: python3 tools/build_all.py ${{ matrix.board }}
