name: Test
on:
  pull_request:
  schedule:
    - cron: "30 2 * * *"
jobs:
  tests:
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest]
    runs-on: ${{ matrix.os }}
    steps:
    - uses: actions/checkout@v6
    - uses: cachix/install-nix-action@v31
      with:
        # TODO: Adjust uninstall to not need channel
        nix_path: nixpkgs=channel:nixos-25.05
        extra_nix_config: |
          experimental-features = nix-command flakes
    - run: |
        if grep -R --exclude stdlib-extended.nix literalExample modules ; then
          echo "Error: literalExample should be replaced by literalExpression" > /dev/stderr
          exit 1
        fi
    - run: nix build --show-trace .#docs-jsonModuleMaintainers
    - run: ./format --ci
    - name: Test init --switch with locked inputs
      run: |
        # Copy lock file to home directory for consistent testing
        mkdir -p ~/.config/home-manager
        cp flake.lock ~/.config/home-manager/
        nix run .#home-manager -- init --switch --override-input home-manager .
      # FIXME: nix broken on darwin
      if: matrix.os != 'macos-latest'
    - run: yes | nix run . -- uninstall
      # FIXME: nix broken on darwin
      if: matrix.os != 'macos-latest'
    - name: Run tests
      run: nix build -j auto --show-trace --option allow-import-from-derivation false --reference-lock-file flake.lock "./tests#test-all-no-big"
      env:
        GC_INITIAL_HEAP_SIZE: 4294967296
    - name: Run tests (with IFD)
      run: nix build -j auto --show-trace --reference-lock-file flake.lock "./tests#test-all-no-big"
      env:
        GC_INITIAL_HEAP_SIZE: 4294967296
