name: Prover

on:
  push:
    branches:
      - main
      - staging
      - develop
      - alpha
    paths:
      - 'prover/**'
      - '.github/workflows/prover.yml'
  pull_request:
    types:
      - opened
      - reopened
      - synchronize
      - ready_for_review
    paths:
      - 'prover/**'
      - '.github/workflows/prover.yml'

defaults:
  run:
    working-directory: 'prover'

jobs:
  test:
    if: github.event.pull_request.draft == false
    runs-on: ubuntu-latest
    steps:
    - name: Install Go
      uses: actions/setup-go@v2
      with:
        go-version: 1.19.x
    - name: Checkout code
      uses: actions/checkout@v2
    - name: Test
      run: |
        go test -tags="mock_prover" -v -coverprofile=coverage.txt ./...
    - name: Upload coverage reports to Codecov
      uses: codecov/codecov-action@v3
      env:
        CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
      with:
        flags: prover
  compile:
    if: github.event_name == 'push' # will only be triggered when pushing to main & staging & develop & alpha
    runs-on: ubuntu-latest
    steps:
    - uses: actions-rs/toolchain@v1
      with:
        toolchain: nightly-2022-12-10
        override: true
        components: rustfmt, clippy
    - name: Install Go
      uses: actions/setup-go@v2
      with:
        go-version: 1.19.x
    - name: Checkout code
      uses: actions/checkout@v2
    - name: Cache cargo
      uses: Swatinem/rust-cache@v2
      with:
        workspaces: "common/libzkp/impl -> target"
    - name: Test
      run: |
        make prover
  check:
    if: github.event.pull_request.draft == false
    runs-on: ubuntu-latest
    steps:
    - name: Install Go
      uses: actions/setup-go@v2
      with:
        go-version: 1.19.x
    - name: Checkout code
      uses: actions/checkout@v2
    - name: Lint
      run: |
        rm -rf $HOME/.cache/golangci-lint
        make lint
  goimports-lint:
    if: github.event.pull_request.draft == false
    runs-on: ubuntu-latest
    steps:
    - name: Install Go
      uses: actions/setup-go@v2
      with:
        go-version: 1.19.x
    - name: Checkout code
      uses: actions/checkout@v2
    - name: Install goimports
      run: go install golang.org/x/tools/cmd/goimports
    - run: goimports -local scroll-tech/prover/ -w .
    - run: go mod tidy
    # If there are any diffs from goimports or go mod tidy, fail.
    - name: Verify no changes from goimports and go mod tidy
      run: |
        if [ -n "$(git status --porcelain)" ]; then
          exit 1
        fi
