name: CI

on:
  push:
    branches:
      - main
  pull_request_review:

  workflow_dispatch:

permissions:
  contents: read

jobs:
  flake-check:
    name: Flake Check
    runs-on: [self-hosted, nix-builder]
    needs: [format-check]
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Check flake
        run: nix flake check --show-trace --print-build-logs

  format-check:
    name: Format Check
    runs-on: [self-hosted, nix-builder]
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Check formatting
        run: |
          nix fmt **/*.nix
          if ! git diff --quiet; then
            echo "::error::Code is not formatted. Please run 'nix fmt **/*.nix' locally."
            git diff
            exit 1
          fi

  eval-configs:
    name: Evaluate Key Configurations
    runs-on: [self-hosted, nix-builder]
    needs: [flake-check, format-check]
    strategy:
      matrix:
        config:
          - nix-builder
          - nix-laptop1
          - nix-desktop1
      fail-fast: false
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Evaluate configuration
        run: |
          echo "Evaluating configuration for ${{ matrix.config }}"
          nix eval .#nixosConfigurations.${{ matrix.config }}.config.system.build.toplevel.drvPath \
            --show-trace

  eval-artifacts:
    name: Evaluate Artifacts
    runs-on: [self-hosted, nix-builder]
    needs: [flake-check, format-check]
    strategy:
      matrix:
        artifact:
          - lxc-nix-builder
          - installer-iso-nix-laptop1
      fail-fast: false
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Evaluate artifact
        run: |
          echo "Evaluating artifact ${{ matrix.artifact }}"
          nix eval .#${{ matrix.artifact }}.drvPath \
            --show-trace
