# Source: adapted from the official cachix/install-nix-action "Flakes CI workflow" example
#   https://github.com/cachix/install-nix-action
#   (README: "Flakes CI workflow with nix build and flake check")
# Every action used here (actions/checkout) is from an official GitHub repo.
#
# Adaptations for Gitea Actions:
#   * runs-on: native  - Gitea's self-hosted native runner. cachix/install-nix-action
#     explicitly supports self-hosted runners, and this runner's host already provides
#     Nix (Lix), so the installer step is omitted and flakes are enabled via NIX_CONFIG
#     (identical to the action's `extra_nix_config: experimental-features = nix-command flakes`).
#   * The native runner only puts its `hostPackages` on PATH, which does NOT include Nix.
#     Each job therefore exports the host's system Nix (/run/current-system/sw/bin) onto
#     PATH before invoking `nix`. This uses the host's actual Lix rather than installing a
#     second Nix client that would mismatch the running Lix daemon.
#   * Gitea context vars (gitea.workflow / gitea.head_ref / gitea.sha) for concurrency.
#   * matrix over x86_64-linux + aarch64-linux.
#     All jobs use --no-build (eval-only) because the runner has 2 cores / 4GB RAM:
#     building nix derivations would exhaust memory and crash the server.
#     Pre-commit hooks run locally via git-hooks-nix on the developer's machine.
#   * aarch64 builds need QEMU binfmt (boot.binfmt.emulatedSystems) + nix extra-platforms,
#     which require a nixos-rebuild switch not yet applied. Flake-check for aarch64
#     runs eval-only (no build) and passes.

name: CI

on:
  push:
    branches: [main]
  pull_request:

# Least-privilege by default; jobs opt into what they need.
permissions: {}

concurrency:
  group: ${{ gitea.workflow }}-${{ gitea.head_ref || gitea.sha }}
  cancel-in-progress: true

defaults:
  run:
    shell: bash

env:
  NIX_CONFIG: |
    experimental-features = nix-command flakes
    extra-platforms = aarch64-linux

jobs:
  flake-check:
    name: Flake check (${{ matrix.system }})
    runs-on: native
    strategy:
      fail-fast: false
      matrix:
        system:
          - x86_64-linux
          - aarch64-linux
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
        with:
          persist-credentials: false

      - name: Flake check (${{ matrix.system }})
        run: |
          export PATH=/run/current-system/sw/bin:$PATH
          nix flake check --no-build --system ${{ matrix.system }}
