Installs Nix on GitHub Actions for the supported platforms: Linux and macOS.
Find a file
zimbatm 334bb6100b
idempotent installation
Don't run the installer if Nix has already been installed on the host.
We assume that the installed Nix is already in the desired state.

This allows to share a given pipeline between hosted and self-hosted
runners. Usually the self-hosted runners are long-lived and already have
Nix installed.
2020-11-02 12:35:41 +01:00
.github CI: trigger push only on master 2020-09-21 16:41:22 +02:00
__tests__ Initial commit 2019-10-02 11:52:32 +02:00
lib idempotent installation 2020-11-02 12:35:41 +01:00
src Prepare for Nix 2.3.5 2020-05-26 18:08:30 +02:00
.gitignore Initial commit 2019-10-02 11:52:32 +02:00
action.yml Support self-hosted runners and always skip adding a channel 2020-09-21 14:16:30 +02:00
jest.config.js Initial commit 2019-10-02 11:52:32 +02:00
LICENSE Initial commit 2019-10-02 11:52:32 +02:00
package.json Bump @actions/core from 1.1.1 to 1.2.6 2020-10-01 17:21:05 +00:00
README.md Adding more useful pinning reference to readme 2020-10-13 11:26:47 -04:00
shell.nix add shell.nix for easier development 2019-11-07 10:19:07 +01:00
test.nix add failing test 2020-08-25 18:17:09 +02:00
tsconfig.json Initial commit 2019-10-02 11:52:32 +02:00
yarn.lock Bump @actions/core from 1.1.1 to 1.2.6 2020-10-01 17:21:05 +00:00

install-nix-action

github actions badge

Installs Nix on GitHub Actions for the supported platforms: Linux and macOS.

By default it has no nixpkgs configured, you have to set nix_path by picking a channel or pin nixpkgs yourself (see also pinning tutorial).

Features

  • Quick installation (~4s on Linux, ~20s on macOS)
  • Multi-User installation (with sandboxing enabled only on Linux)
  • Self-hosted github runner support
  • Allows specifying Nix installation URL via install_url
  • Allows specifying extra Nix configration options via extra_nix_config
  • Allows specifying $NIX_PATH and channels via nix_path

Usage

Create .github/workflows/test.yml in your repo with the following contents:

name: "Test"
on:
  pull_request:
  push:
jobs:
  tests:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - uses: cachix/install-nix-action@v11
      with:
        nix_path: nixpkgs=channel:nixos-unstable
    - run: nix-build

See also cachix-action for simple binary cache setup to speed up your builds and share binaries with developers.

Usage with Flakes

name: "Test"
on:
  pull_request:
  push:
jobs:
  tests:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
      with:
          # Nix Flakes doesn't work on shallow clones
          fetch-depth: 0
    - uses: cachix/install-nix-action@v11
      with:
        install_url: https://github.com/numtide/nix-flakes-installer/releases/download/nix-3.0pre20200820_4d77513/install
        extra_nix_config: |
          experimental-features = nix-command flakes          
    - run: nix-build

Inputs (specify using with:)

  • install_url: specify URL to install Nix from (useful for testing non-stable releases or pinning Nix for example https://releases.nixos.org/nix/nix-2.3.7/install)

  • nix_path: set NIX_PATH environment variable, for example nixpkgs=channel:nixos-unstable

  • extra_nix_config: append to /etc/nix/nix.conf


FAQ

Is it possible to run NixOS tests / Qemu+KVM with GitHub Actions?

Currently GitHub Actions are not running on Azure instance types that support nested virtualization.

How do I print nixpkgs version with the channel I have configured?

nix-instantiate --eval -E '(import <nixpkgs> {}).lib.version'

Hacking

Install the dependencies

$ yarn install

Build the typescript

$ yarn build

Run the tests ✔️

$ yarn test