# name: build
# on: push
# jobs:
#   checks:
#     uses: nixbuild/nixbuild-action/.github/workflows/ci-workflow.yml@v19
#     with:
#       nix_conf: |
#         allow-import-from-derivation = true
#     secrets:
#       nixbuild_token: ${{ secrets.nixbuild_token }}


name: "build"
on:
  pull_request:
  push:
    branches: [ "main" ]

jobs:
  path-filter:
    runs-on: ubuntu-latest
    outputs:
      changed: ${{ steps.filter.outputs.changed }}

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - uses: dorny/paths-filter@v3
        id: filter
        with:
          filters: |
            changed:
              - 'lib/**'
              - 'modules/**'
              - '!modules/**/docs/**'
              - 'test/**'
              - '.github/workflows/build.yaml'

  build-matrix:
    needs: [ "path-filter" ]
    if: needs.path-filter.outputs.changed == 'true'
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
      - name: Install Nix
        uses: DeterminateSystems/nix-installer-action@main
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          extra-conf: "system-features = nixos-test benchmark big-parallel kvm"
      - name: Setup Caching
        uses: cachix/cachix-action@v14
        with:
          name: selfhostblocks
          authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
      - name: Generate Matrix
        id: generate-matrix
        run: |
          nix flake show --allow-import-from-derivation --json \
              | jq -c '.["checks"]["x86_64-linux"] | keys' > .output

          cat .output

          echo dynamic_list="$(cat .output)" >> "$GITHUB_OUTPUT"
    outputs:
      check: ${{ steps.generate-matrix.outputs.dynamic_list }}

  manual:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
      - name: Install Nix
        uses: DeterminateSystems/nix-installer-action@main
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          extra-conf: "system-features = nixos-test benchmark big-parallel kvm"
      - name: Setup Caching
        uses: cachix/cachix-action@v14
        with:
          name: selfhostblocks
          authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
      - name: Build
        run: |
          nix \
            --print-build-logs \
            --option keep-going true \
            --show-trace \
            build .#manualHtml

  tests:
    runs-on: ubuntu-latest
    needs: [ "build-matrix" ]
    strategy:
      matrix:
        check: ${{ fromJson(needs.build-matrix.outputs.check) }}
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
      - name: Install Nix
        uses: DeterminateSystems/nix-installer-action@main
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          extra-conf: "system-features = nixos-test benchmark big-parallel kvm"
      - name: Setup Caching
        uses: cachix/cachix-action@v14
        with:
          name: selfhostblocks
          authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
      - name: Build
        run: |
          nix build --print-build-logs --show-trace .#checks.x86_64-linux.${{ matrix.check }}

  results:
    name: Final Results
    runs-on: ubuntu-latest
    needs: [ manual, tests ]
    if: '!cancelled()'
    steps:
      - run: |
          result="${{ needs.tests.result }}"
          if [[ $result == "success" || $result == "skipped" ]]; then
            exit 0
          else
            exit 1
          fi
