name: PlatformIO CI

on:
  push:
    paths:
      - 'firmware'
      - 'proto'
      - 'thirdparty/nanopb'
      - 'platformio.ini'
      - '.github/workflows/pio.yml'
  pull_request:
    paths:
      - 'firmware'
      - 'proto'
      - 'thirdparty/nanopb'
      - 'platformio.ini'
      - '.github/workflows/pio.yml'

jobs:
  pio-build:
    runs-on: ubuntu-20.04

    steps:
    - name: Checkout code
      uses: actions/checkout@v2

    - name: Cache pip
      uses: actions/cache@v2
      with:
        path: ~/.cache/pip
        key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
        restore-keys: |
          ${{ runner.os }}-pip-

    - name: Cache PlatformIO
      uses: actions/cache@v2
      with:
        path: ~/.platformio
        key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}

    - name: Set up Python
      uses: actions/setup-python@v2

    - name: Install PlatformIO
      id: pio_install
      run: |
        python -m pip install --upgrade pip
        pip install --upgrade platformio

    - name: Build Firmware (view)
      # Run regardless of other build step failures, as long as setup steps completed
      if: always() && steps.pio_install.outcome == 'success'
      run: |
        pio run \
          -e view

    - name: Build Firmware (nanofoc)
      # Run regardless of other build step failures, as long as setup steps completed
      if: always() && steps.pio_install.outcome == 'success'
      run: |
        pio run \
          -e nanofoc
