name: Build and run tests with Verific (Linux)

on: [push, pull_request]

jobs:
  pre-job:
    runs-on: ubuntu-latest
    outputs:
      should_skip: ${{ steps.skip_check.outputs.should_skip }}
    steps:
      - id: skip_check
        uses: fkirc/skip-duplicate-actions@v5
        with:
          paths_ignore: '["**/README.md", "docs/**", "guidelines/**"]'
          # cancel previous builds if a new commit is pushed
          cancel_others: 'true'
          # only run on push *or* pull_request, not both
          concurrent_skipping: 'same_content_newer'

  test-verific:
    needs: pre-job
    if: needs.pre-job.outputs.should_skip != 'true'
    runs-on: [self-hosted, linux, x64, fast]
    steps:
      - name: Checkout Yosys
        uses: actions/checkout@v4
        with:
          persist-credentials: false
          submodules: true
      - name: Runtime environment
        run: |
          echo "procs=$(nproc)" >> $GITHUB_ENV

      - name: Build Yosys
        run: |
          make config-clang
          echo "ENABLE_VERIFIC := 1" >> Makefile.conf
          echo "ENABLE_VERIFIC_EDIF := 1" >> Makefile.conf
          echo "ENABLE_VERIFIC_LIBERTY := 1" >> Makefile.conf
          echo "ENABLE_VERIFIC_YOSYSHQ_EXTENSIONS := 1" >> Makefile.conf
          echo "ENABLE_CCACHE := 1" >> Makefile.conf
          echo "ENABLE_FUNCTIONAL_TESTS := 1" >> Makefile.conf
          make -j${{ env.procs }} ENABLE_LTO=1

      - name: Install Yosys
        run: |
          make install DESTDIR=${GITHUB_WORKSPACE}/.local PREFIX=

      - name: Checkout SBY
        uses: actions/checkout@v4
        with:
          repository: 'YosysHQ/sby'
          path: 'sby'

      - name: Build SBY
        run: |
          make -C sby install DESTDIR=${GITHUB_WORKSPACE}/.local PREFIX=

      - name: Run Yosys tests
        run: |
          make -j${{ env.procs }} test

      - name: Run Verific specific Yosys tests
        run: |
          make -C tests/sva
          cd tests/svtypes && bash run-test.sh

      - name: Run SBY tests
        if: ${{ github.ref == 'refs/heads/main' }}
        run: |
          make -C sby run_ci
