name: CI on: pull_request: push: branches: [main] workflow_dispatch: jobs: tests: runs-on: ubuntu-22.04 needs: - check-dist-up-to-date - install-nix-linux - install-nix-macos - install-with-non-default-source-inputs steps: - run: true check-dist-up-to-date: name: Check the dist/ folder is up to date runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 - uses: DeterminateSystems/nix-installer-action@main - uses: DeterminateSystems/magic-nix-cache-action@main - name: pnpm install run: nix develop --command pnpm install - name: prettier format run: nix develop --command pnpm run check-fmt - name: ESLint run: nix develop --command pnpm run lint - name: tsup build run: nix develop --command pnpm run build - name: ncc package run: nix develop --command pnpm run package - name: Git status run: git status --porcelain=v1 - name: Ensure no staged changes run: git diff --exit-code install-nix-linux: name: Run test suite for Linux systems strategy: matrix: runner: - ubuntu-latest - nscloud-ubuntu-22.04-amd64-4x16 - namespace-profile-default-arm64 runs-on: ${{ matrix.runner }} permissions: contents: read id-token: write steps: - uses: actions/checkout@v4 - name: Install Nix uses: ./ with: logger: pretty log-directives: nix_installer=trace backtrace: full - name: echo $PATH run: echo $PATH - name: Render the devshell if: success() || failure() run: | nix develop --command date - 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 - 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 - 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 - name: Breakpoint if tests failed if: failure() uses: namespacelabs/breakpoint-action@v0 with: duration: 5m authorized-users: grahamc install-nix-macos: name: Run test suite for macOS systems strategy: matrix: runner: # x86_64-darwin - macos-12 # aarch64-darwin - macos-latest-xlarge runs-on: ${{ matrix.runner }} permissions: contents: read id-token: write steps: - uses: actions/checkout@v4 - name: Install Nix uses: ./ with: logger: pretty log-directives: nix_installer=trace backtrace: full - 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 - 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 - 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 - name: Breakpoint if tests failed if: failure() uses: namespacelabs/breakpoint-action@v0 with: duration: 5m authorized-users: grahamc install-with-non-default-source-inputs: name: Install Nix using non-default source-${{ matrix.inputs.key }} runs-on: ubuntu-22.04 strategy: matrix: inputs: # https://github.com/DeterminateSystems/nix-installer/blob/v0.18.0 - key: url value: https://github.com/DeterminateSystems/nix-installer/releases/download/v0.18.0/nix-installer-x86_64-linux nix-version: "2.21.2" # https://github.com/DeterminateSystems/nix-installer/tree/7011c077ec491da410fbc39f68676b0908b9ce7e - key: revision value: 7011c077ec491da410fbc39f68676b0908b9ce7e nix-version: "2.19.2" steps: - uses: actions/checkout@v4 - name: Install with alternative source-${{ matrix.inputs.key }} uses: ./ with: source-${{ matrix.inputs.key }}: ${{ matrix.inputs.value }} - name: Ensure that the expected Nix version ${{ matrix.inputs.nix-version }} is installed via alternative source-${{ matrix.inputs.key }} run: .github/verify-version.sh ${{ matrix.inputs.nix-version }}