Install nova-nix in a GitHub Actions
workflow. The action downloads a release archive, checks it against the
release's published checksums, and adds it to PATH. No Haskell toolchain is
needed.
For what to do with nova-nix once it is installed, see its README.
steps:
- uses: Novavero-AI/install-nova-nix@v1
- run: nova-nix eval --expr '1 + 2'| Name | Description | Required | Default |
|---|---|---|---|
version |
Version to install, with or without a leading v (for example 0.10.0.0). latest installs the most recent release. |
No | latest |
| Name | Description |
|---|---|
bin-dir |
Directory added to PATH, containing the nova-nix executable. |
archive |
Name of the release asset that was installed. |
- uses: Novavero-AI/install-nova-nix@v1
with:
version: 0.10.0.0jobs:
evaluate:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
steps:
- uses: Novavero-AI/install-nova-nix@v1
- run: |
nova-nix eval --strict --expr 'builtins.map (x: x * x) [ 1 2 3 ]'
shell: bashThe archive ships the package recipes beside the executable, so a build needs nothing checked out. The recipes target Windows, so the job runs on a Windows runner. The public cache holds the closure nova-nix's main branch last built, so naming it downloads what it holds and builds only what it lacks; without it the build compiles the toolchain seeds first.
jobs:
build:
runs-on: windows-latest
steps:
- uses: Novavero-AI/install-nova-nix@v1
id: nova
- run: >-
nova-nix build "$BIN/../pkgs/windows/hello.nix"
--substituter https://cache.novavero.ai
--trusted-key cache.novavero.ai-1:9gQ7tLWMM+2tdC9H5sKMJltDIPfD7X2GWlZe8Aa8hHQ=
shell: bash
env:
BIN: ${{ steps.nova.outputs.bin-dir }}| Runner | Archive |
|---|---|
ubuntu-latest |
nova-nix-linux-x64.tar.gz |
macos-latest |
nova-nix-macos-arm64.tar.gz |
windows-latest |
nova-nix-windows-x64.zip |
nova-nix publishes one archive per platform, built on the runner image GitHub calls latest for it, so those three are all that exist. On any other runner the action fails with an error naming the platform, rather than with a 404 from the download.
The archive unpacks to a single directory holding bin/, share/, pkgs/ and
nova-nix's LICENSE, NOTICE and README.md, and only bin/ goes on PATH.
bin/: thenova-nixexecutable. The Windows build needs only the Windows system DLLs. The Linux build loads glibc, libm, zlib and GMP dynamically, and the macOS build loads only libraries macOS ships, from/usr/liband/System/Library/Frameworks. This repository's tests run the executable on all three hosted runners.share/: the bundled<nix/*>search path, resolved relative to the executable, which is what lets an installed nova-nix build rather than only evaluate.pkgs/: the package recipes, reachable at${{ steps.<id>.outputs.bin-dir }}/../pkgs.
A composite action: the steps run directly in your job, on your runner, with no
Node bundle to build or audit. It resolves the platform, downloads the matching
archive and the release's SHA256SUMS, verifies the archive against it,
unpacks it under RUNNER_TEMP, and appends bin/ to GITHUB_PATH.
Verification happens before anything is unpacked, so a truncated or corrupted
download, or an archive that does not match its release's checksum, fails the
step before anything reaches PATH. The checksums come from the same release
as the archive, so this shows the download is intact, not who published it.
With latest, a release published between the two downloads fails the check;
pin version for a reproducible install.
Apache-2.0. Copyright 2026 Novavero AI Inc. and contributors; see NOTICE.