name: Benchmarks CI
on:
  pull_request:
  push:
    branches:
      - 'devel'

jobs:
  build:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-20.04]
        cpu: [amd64]
    name: '${{ matrix.os }}'
    runs-on: ${{ matrix.os }}
    timeout-minutes: 60 # refs bug #18178
    steps:
      - name: 'Checkout'
        uses: actions/checkout@v4
        with:
          fetch-depth: 2

      - name: 'Install node.js 16.x'
        uses: actions/setup-node@v3
        with:
          node-version: '16.x'

      - name: 'Install dependencies (Linux amd64)'
        if: runner.os == 'Linux' && matrix.cpu == 'amd64'
        run: |
          sudo apt-fast update -qq
          DEBIAN_FRONTEND='noninteractive' \
            sudo apt-fast install --no-install-recommends -yq \
              libcurl4-openssl-dev libgc-dev libsdl1.2-dev libsfml-dev \
              valgrind libc6-dbg libblas-dev xorg-dev

      - name: 'Add build binaries to PATH'
        shell: bash
        run: echo "${{ github.workspace }}/bin" >> "${GITHUB_PATH}"

      - name: 'Build csourcesAny'
        shell: bash
        run: . ci/funs.sh && nimBuildCsourcesIfNeeded CC=gcc ucpu='${{ matrix.cpu }}'

      - name: 'Build koch'
        shell: bash
        run: nim c koch

      - name: 'Build Nim'
        shell: bash
        run: ./koch boot -d:release -d:nimStrictMode --lib:lib

      - name: 'Build Nimble'
        shell: bash
        run: ./koch nimble

      - name: 'Action'
        shell: bash
        run: nim c -r -d:release ci/action.nim

      - name: 'Checkout minimize'
        uses: actions/checkout@v4
        with:
          repository: 'nim-lang/ci_bench'
          path: minimize

      - name: 'Run minimize benchmarks'
        shell: bash
        run: ./minimize/minimize ci-bench

      - name: 'Restore minimize cached database'
        uses: actions/cache/restore@v3
        with:
          path: minimize.csv
          key: minimize-db-key

      - name: 'Update minimize db'
        shell: bash
        run: ./minimize/minimize update-db

      - name: 'Save minimize cached database'
        if: |
          github.event_name == 'push' && github.ref == 'refs/heads/devel' &&
          matrix.target == 'linux'
        uses: actions/cache/save@v3
        with:
          path: minimize.csv
          key: minimize-db-key

      - name: 'Generate minimize report'
        shell: bash
        run: ./minimize/minimize generate-report

      - name: 'Archive minimize report'
        uses: actions/upload-artifact@v3
        with:
          name: minimize-report
          path: |
            minimize/minimize.html
            minimize/minimize.csv

      # Requires additional permissions, see:
      # https://github.com/nim-lang/Nim/actions/runs/4778177321/jobs/8494423792?pr=21566
      # - name: 'Publish HTML report'
      #   uses: rossjrw/pr-preview-action@v1
      #   with:
      #     source-dir: minimize
      #     umbrella-dir: minimize
      #   env:
      #     GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

      - name: Extract md summary
        run: |
          cat minimize/summary.md  >> $GITHUB_STEP_SUMMARY
