name: CI

on:
  pull_request:
  push:
    branches: [main]

jobs:
  run-x86_64-linux:
    name: Run x86_64 Linux
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v3
      - name: Install Nix
        uses: ./
        with:
          logger: pretty
          log-directives: nix_installer=trace
          backtrace: full
          nix-installer-branch: main
      - name: echo $PATH
        run: echo $PATH
      - name: Test `nix` with `$GITHUB_PATH`
        if: success() || failure()
        run: |
          nix run nixpkgs#hello
          nix profile install nixpkgs#hello
          hello
          nix store gc
          nix run nixpkgs#hello
      - name: Test bash
        run: nix-instantiate -E 'builtins.currentTime' --eval
        if: success() || failure()
        shell: bash --login {0}
      - name: Test sh
        run: nix-instantiate -E 'builtins.currentTime' --eval
        if: success() || failure()
        shell: sh -l {0}
      - name: Install Nix again (noop)
        uses: ./
        with:
          logger: pretty
          log-directives: nix_installer=trace
          backtrace: full
          nix-installer-branch: main
      - name: Test `nix` with `$GITHUB_PATH`
        if: success() || failure()
        run: |
          nix run nixpkgs#hello
          nix profile install nixpkgs#hello
          hello
          nix store gc
          nix run nixpkgs#hello
      - name: Reinstall Nix
        uses: ./
        with:
          logger: pretty
          log-directives: nix_installer=trace
          backtrace: full
          reinstall: true
          extra-conf: |
            use-sqlite-wal = true
          nix-installer-branch: main
      - name: Test `nix` with `$GITHUB_PATH`
        if: success() || failure()
        run: |
          nix run nixpkgs#hello
          nix profile install nixpkgs#hello
          hello
          nix store gc
          nix run nixpkgs#hello
      - name: Verify the generated nix.conf
        run: |
          cat -n /etc/nix/nix.conf
          grep -E "^trusted-users = .*$USER" /etc/nix/nix.conf
          grep -E "^use-sqlite-wal = true" /etc/nix/nix.conf

  run-steam-deck:
    name: Run Steam Deck (Mock))
    runs-on: ubuntu-22.04
    steps:
      - uses: actions/checkout@v3
      - name: Make the CI look like a steam deck
        run: |
          mkdir -p ~/bin
          echo -e "#! /bin/sh\nexit 0" | sudo tee -a /bin/steamos-readonly
          sudo chmod +x /bin/steamos-readonly
          sudo useradd -m deck
      - name: Install Nix
        uses: ./
        with:
          logger: pretty
          log-directives: nix_installer=trace
          backtrace: full
          nix-installer-branch: main
      - name: echo $PATH
        run: echo $PATH
      - name: Test `nix` with `$GITHUB_PATH`
        if: success() || failure()
        run: |
          nix run nixpkgs#hello
          nix profile install nixpkgs#hello
          hello
          nix store gc
          nix run nixpkgs#hello
      - name: Test bash
        run: nix-instantiate -E 'builtins.currentTime' --eval
        if: success() || failure()
        shell: bash --login {0}
      - name: Test sh
        run: nix-instantiate -E 'builtins.currentTime' --eval
        if: success() || failure()
        shell: sh -l {0}
      - name: Install Nix again (noop)
        uses: ./
        with:
          logger: pretty
          log-directives: nix_installer=trace
          backtrace: full
          nix-installer-branch: main
      - name: Test `nix` with `$GITHUB_PATH`
        if: success() || failure()
        run: |
          nix run nixpkgs#hello
          nix profile install nixpkgs#hello
          hello
          nix store gc
          nix run nixpkgs#hello
      - name: Reinstall Nix
        uses: ./
        with:
          logger: pretty
          log-directives: nix_installer=trace
          backtrace: full
          reinstall: true
          extra-conf: |
            use-sqlite-wal = true
          nix-installer-branch: main
      - name: Test `nix` with `$GITHUB_PATH`
        if: success() || failure()
        run: |
          nix run nixpkgs#hello
          nix profile install nixpkgs#hello
          hello
          nix store gc
          nix run nixpkgs#hello
      - name: Verify the generated nix.conf
        run: |
          cat -n /etc/nix/nix.conf
          grep -E "^trusted-users = .*$USER" /etc/nix/nix.conf
          grep -E "^use-sqlite-wal = true" /etc/nix/nix.conf

  run-x86_64-darwin:
    name: Run x86_64 Darwin
    runs-on: macos-12
    steps:
      - uses: actions/checkout@v3
      - name: Install Nix
        uses: ./
        with:
          logger: pretty
          log-directives: nix_installer=trace
          backtrace: full
          nix-installer-branch: main
      - name: echo $PATH
        run: echo $PATH
      - name: Test `nix` with `$GITHUB_PATH`
        if: success() || failure()
        run: |
          nix run nixpkgs#hello
          nix profile install nixpkgs#hello
          hello
          nix store gc
          nix run nixpkgs#hello
      - name: Test bash
        run: nix-instantiate -E 'builtins.currentTime' --eval
        if: success() || failure()
        shell: bash --login {0}
      - name: Test sh
        run: nix-instantiate -E 'builtins.currentTime' --eval
        if: success() || failure()
        shell: sh -l {0}
      - name: Test zsh
        run: nix-instantiate -E 'builtins.currentTime' --eval
        if: success() || failure()
        shell: zsh --login --interactive {0}
      - name: Install Nix again (noop)
        uses: ./
        with:
          logger: pretty
          log-directives: nix_installer=trace
          backtrace: full
          nix-installer-branch: main
      - name: Test `nix` with `$GITHUB_PATH`
        if: success() || failure()
        run: |
          nix run nixpkgs#hello
          nix profile install nixpkgs#hello
          hello
          nix store gc
          nix run nixpkgs#hello
      - name: Reinstall Nix
        uses: ./
        with:
          logger: pretty
          log-directives: nix_installer=trace
          backtrace: full
          reinstall: true
          extra-conf: |
            use-sqlite-wal = true
          nix-installer-branch: main
      - name: Test `nix` with `$GITHUB_PATH`
        if: success() || failure()
        run: |
          nix run nixpkgs#hello
          nix profile install nixpkgs#hello
          hello
          nix store gc
          nix run nixpkgs#hello
      - name: Verify the generated nix.conf
        run: |
          cat /etc/nix/nix.conf
          grep -E "^trusted-users = .*$USER" /etc/nix/nix.conf
          grep -E "^use-sqlite-wal = true" /etc/nix/nix.conf