name: Test

on:
  - push

jobs:
  hakurei:
    name: Hakurei
    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 ./test#checks.x86_64-linux.hakurei

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

  race:
    name: Hakurei (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 ./test#checks.x86_64-linux.race

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

  sandbox:
    name: Sandbox
    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 ./test#checks.x86_64-linux.sandbox

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

  sandbox-race:
    name: Sandbox (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 ./test#checks.x86_64-linux.sandbox-race

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

  sharefs:
    name: ShareFS
    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 ./test#checks.x86_64-linux.sharefs

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

  check:
    name: Flake checks
    needs:
      - hakurei
      - race
      - sandbox
      - sandbox-race
      - sharefs
    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 ./test

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

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

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