name: Zig Test and Benchmark

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

env:
  ZIG_VERSION: 0.14.0-dev.1409+6d2945f1f

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Cache Zig
        uses: actions/cache@v3
        with:
          path: ~/zig
          key: ${{ runner.os }}-zig-${{ env.ZIG_VERSION }}

      - name: Install Zig
        if: steps.cache.outputs.cache-hit != 'true'
        run: |
          wget https://ziglang.org/builds/zig-linux-x86_64-${{ env.ZIG_VERSION }}.tar.xz
          tar -xf zig-linux-x86_64-${{ env.ZIG_VERSION }}.tar.xz
          mv zig-linux-x86_64-${{ env.ZIG_VERSION }} ~/zig

      - name: Add Zig to PATH
        run: echo "${HOME}/zig" >> $GITHUB_PATH

      - name: Cache Zig build artifacts
        uses: actions/cache@v3
        with:
          path: |
            zig-cache
            ~/.cache/zig
          key: ${{ runner.os }}-zig-build-${{ hashFiles('**/*.zig') }}
          restore-keys: |
            ${{ runner.os }}-zig-build-

      - name: Unit testing
        run: zig build test --summary all

      - name: Run benchmarks
        run: zig build bench -Doptimize=ReleaseFast