on:
  workflow_dispatch:
  push:
    paths:
      - '.github/workflows/*.yaml'
      - '.github/actions/*/action.yaml'
      - 'ergogen/footprints/*.js'
      - 'ergogen/config.yaml'
      - 'kibot/*'
      - 'freerouting/*'
      - 'package.json'
      - '*.nix'

name: Build
jobs:
  board:
    runs-on: ubuntu-latest
    name: Generate
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          submodules: true
      - name: Docker Cache
        uses: ScribeMD/docker-cache@0.3.7
        with:
          key: docker-${{ runner.os }}
      - name: Use Node.js 20
        uses: actions/setup-node@v4
        with:
          node-version: 20.x
          cache: 'npm'
      - name: Install dependencies
        run: npm install
      - name: Generate unrouted PCBs with Ergogen (definition in package.json)
        run: npm run build
      - name: Run KiBot to generate images, gerbers for the plates
        uses: ./.github/actions/kibot
        with:
          boards: frontplate backplate controller_overlay
          config: default
      - name: Run KiBot to generate images, gerbers for the unrouted board
        uses: ./.github/actions/kibot
        with:
          boards: corney_island corney_island_wireless 
          config: default
      - name: Export DSN file for Freerouting
        uses: ./.github/actions/export-dsn
        with:
          boards: corney_island corney_island_wireless
      - name: Autoroute PCB
        uses: ./.github/actions/autoroute
        with:
          boards: corney_island corney_island_wireless
      - name: Import SES
        uses: ./.github/actions/import-ses
        with:
          boards: corney_island corney_island_wireless
      - name: Run KiBot to generate images, gerbers for the autorouted board
        uses: ./.github/actions/kibot
        with:
          boards: corney_island_autorouted corney_island_wireless_autorouted
          config: boards
      - name: Persist output
        uses: actions/upload-artifact@v4
        with:
          name: corney_island
          path: ergogen/output
