name: 'test'

on:
  push:
  pull_request:
  schedule:
    - cron: '0 0 * * 5'
  workflow_dispatch:

jobs:

  build:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        backend:
        - llvm
        - gcc
    container: ghdl/vunit:${{ matrix.backend }}
    steps:
    - uses: actions/checkout@v2
    - run: make GNATMAKE='gnatmake -j'$(nproc)

  py:
    needs: [build]
    runs-on: ubuntu-latest
    container: ghdl/vunit:llvm
    steps:
    - uses: actions/checkout@v2
    - run: |
        apt update
        apt install -y python3-pexpect
        make -j$(nproc) test_micropython test_micropython_long

  test:
    needs: [build]
    strategy:
      fail-fast: false
      max-parallel: 3
      matrix:
        task: [
          "tests_console",
          "{1..99}",
          "{100..199}",
          "{200..299}",
          "{300..399}",
          "{400..499}",
          "{500..599}",
          "{600..699}",
          "{700..799}",
          "{800..899}",
          "{900..999}",
        ]
    runs-on: ubuntu-latest
    container: ghdl/vunit:llvm
    steps:
    - uses: actions/checkout@v2
    - run: bash -c "make -j$(nproc) ${{ matrix.task }}"

  VUnit:
    needs: [build]
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - uses: docker://ghdl/vunit:llvm
      with:
        args: python3 ./run.py -p10

  symbiflow:
    strategy:
      fail-fast: false
      max-parallel: 2
      matrix:
        task: [ ECP5-EVN, ORANGE-CRAB ]
    runs-on: ubuntu-latest
    env:
      DOCKER: 1
      FPGA_TARGET: ${{matrix.task}}
    steps:
    - uses: actions/checkout@v2
    - run: make microwatt.json
    - run: make microwatt.bit
    - run: make microwatt.svf
    - uses: actions/upload-artifact@v2
      with:
        name: ${{matrix.task}}-bitstream
        path: microwatt.svf

# test building verilog target from yosys/nextpnr
  verilog:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - run: make DOCKER=1 microwatt.v
