on: [push, pull_request]
jobs:
  compile:
    strategy:
      fail-fast: false
      matrix:
        example:
          - "BASIC"
          - "DiyProIndoorV4_2"
          - "DiyProIndoorV3_3"
          - "TestCO2"
          - "TestPM"
          - "TestSht"
          - "OneOpenAir"
        fqbn:
          - "esp8266:esp8266:d1_mini"
          - "esp32:esp32:esp32c3"
        include:
          - fqbn: "esp8266:esp8266:d1_mini"
            core: "esp8266:esp8266@3.1.2"
            core_url: "https://arduino.esp8266.com/stable/package_esp8266com_index.json"
          - fqbn: "esp32:esp32:esp32c3"
            board_options: "JTAGAdapter=default,CDCOnBoot=cdc,PartitionScheme=min_spiffs,CPUFreq=160,FlashMode=qio,FlashFreq=80,FlashSize=4M,UploadSpeed=921600,DebugLevel=verbose,EraseFlash=none"
            core: "esp32:esp32@2.0.11"
        exclude:
          - example: "BASIC"
            fqbn: "esp32:esp32:esp32c3"
          - example: "DiyProIndoorV4_2"
            fqbn: "esp32:esp32:esp32c3"
          - example: "DiyProIndoorV3_3"
            fqbn: "esp32:esp32:esp32c3"
          - example: "OneOpenAir"
            fqbn: "esp8266:esp8266:d1_mini"
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run:
          curl -fsSL https://raw.githubusercontent.com/arduino/arduino-cli/master/install.sh |
          sh -s 0.35.3
      - run: bin/arduino-cli --verbose core install '${{ matrix.core }}'
          --additional-urls '${{ matrix.core_url }}'
      - run: bin/arduino-cli --verbose lib install
          WiFiManager@2.0.16-rc.2
          Arduino_JSON@0.2.0
          U8g2@2.34.22
      # In some cases, actions/checkout@v4 will check out a detached HEAD; for
      # example, this happens on pull request events, where an hypothetical
      # PR merge commit is checked out. This tends to confuse
      # `arduino-cli lib install --git-url`, making it fail with errors such as:
      #   Error installing Git Library: Library install failed: object not found
      # Create and check out a dummy branch to work around this issue.
      - run: git checkout -b check
      - run: bin/arduino-cli --verbose lib install --git-url .
        env:
          ARDUINO_LIBRARY_ENABLE_UNSAFE_INSTALL: "true"
      - run: bin/arduino-cli --verbose compile 'examples/${{ matrix.example }}'
          --fqbn '${{ matrix.fqbn }}' --board-options '${{ matrix.board_options }}'
      # TODO: at this point it would be a good idea to run some smoke tests on
      # the resulting image (e.g. that it boots successfully and sends metrics)
      # but that would either require a high fidelity device emulator, or a
      # "hardware lab" runner that is directly connected to a relevant device.
