name: Test

on:
  - push
  - pull_request

jobs:
  fortify:
    name: Fortify
    runs-on: nix
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Run NixOS test
        run: nix build --out-link "result" --print-out-paths --print-build-logs .#checks.x86_64-linux.fortify

      - name: Upload test output
        uses: actions/upload-artifact@v3
        with:
          name: "fortify-vm-output"
          path: result/*
          retention-days: 1

  fpkg:
    name: Fpkg
    runs-on: nix
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Run NixOS test
        run: nix build --out-link "result" --print-out-paths --print-build-logs .#checks.x86_64-linux.fpkg

      - name: Upload test output
        uses: actions/upload-artifact@v3
        with:
          name: "fpkg-vm-output"
          path: result/*
          retention-days: 1

  race:
    name: Data race detector
    runs-on: nix
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Run NixOS test
        run: nix build --out-link "result" --print-out-paths --print-build-logs .#checks.x86_64-linux.race

      - name: Upload test output
        uses: actions/upload-artifact@v3
        with:
          name: "fortify-race-vm-output"
          path: result/*
          retention-days: 1

  check:
    name: Flake checks
    needs:
      - fortify
      - fpkg
      - race
    runs-on: nix
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Run checks
        run: nix --print-build-logs --experimental-features 'nix-command flakes' flake check

  dist:
    name: Create distribution
    runs-on: nix
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Build for test
        id: build-test
        run: >-
          export FORTIFY_REV="$(git rev-parse --short HEAD)" &&
          sed -i.old 's/version = /version = "0.0.0-'$FORTIFY_REV'"; # version = /' package.nix &&
          nix build --print-out-paths --print-build-logs .#dist &&
          mv package.nix.old package.nix &&
          echo "rev=$FORTIFY_REV" >> $GITHUB_OUTPUT

      - name: Upload test build
        uses: actions/upload-artifact@v3
        with:
          name: "fortify-${{ steps.build-test.outputs.rev }}"
          path: result/*
          retention-days: 1