name: Build Gluon
on:
  push:
    branches:
      - master
      - next*
      - v20*
  pull_request:
    types: [opened, synchronize, reopened]

permissions:
  contents: read

jobs:
  changed:
    permissions:
      contents: read  # for dorny/paths-filter to fetch a list of changed files
      pull-requests: read  # for dorny/paths-filter to read pull requests
    runs-on: ubuntu-latest
    outputs:
      targets: ${{ steps.filter.outputs.changes }}
    steps:
      - uses: actions/checkout@v4

      # Filter targets based on changed files
      - uses: dorny/paths-filter@v2
        id: filter
        with:
          filters: .github/filters.yml

  build_firmware:
    needs: changed
    if: ${{ needs.changed.outputs.targets != '[]' && needs.changed.outputs.targets != '' }}
    strategy:
      fail-fast: false
      matrix:
        # Read back changed targets to create build matrix
        target: ${{ fromJSON(needs.changed.outputs.targets) }}
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install Dependencies
        run: sudo contrib/actions/install-dependencies.sh

      - name: Build
        run: contrib/actions/run-build.sh ${{ matrix.target }}

      - name: Archive build logs
        if: ${{ !cancelled() }}
        uses: actions/upload-artifact@v3
        with:
          name: ${{ matrix.target }}_logs
          path: openwrt/logs

      - name: Archive build output
        uses: actions/upload-artifact@v3
        with:
          name: ${{ matrix.target }}_output
          path: output