• Stars
    star
    418
  • Rank 103,620 (Top 3 %)
  • Language
    Shell
  • License
    Apache License 2.0
  • Created about 5 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

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

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 (the oldest supported Nix version is 2.3.5)
  • Allows specifying extra Nix configuration options via extra_nix_config
  • Allows specifying $NIX_PATH and channels via nix_path
  • Share /nix/store between builds using cachix-action for simple binary cache setup to speed up your builds and share binaries with your team
  • Enables flakes and nix-command experimental features by default (to disable, set experimental-features via extra_nix_config)

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@v3
    - uses: cachix/install-nix-action@v22
      with:
        nix_path: nixpkgs=channel:nixos-unstable
    - run: nix-build

Usage with Flakes

name: "Test"
on:
  pull_request:
  push:
jobs:
  tests:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - uses: cachix/install-nix-action@v22
      with:
        github_access_token: ${{ secrets.GITHUB_TOKEN }}
    - run: nix build
    - run: nix flake check

To install Nix from any commit, go to the corresponding installer_test action and click on "Run cachix/install-nix-action@XX" step and expand the first line.

Inputs (specify using with:)

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

  • github_access_token: configure Nix to pull from GitHub using the given GitHub token. This helps work around rate limit issues. Has no effect when access-tokens is also specified in extra_nix_config.

  • 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)

  • install_options: additional installer flags passed to the installer script.

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


FAQ

How do I print nixpkgs version I have configured?

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

How do I run NixOS tests?

With the following inputs:

- uses: cachix/install-nix-action@vXX
  with:
    extra_nix_config: "system-features = nixos-test benchmark big-parallel kvm"

Note that there's no hardware acceleration on GitHub Actions..

How do I install packages via nix-env from the specified nix_path?

nix-env -i mypackage -f '<nixpkgs>'

How do I add a binary cache?

If the binary cache you want to add is hosted on Cachix and you are using cachix-action, you should use their extraPullNames input like this:

- uses: cachix/cachix-action@vXX
   with:
     name: mycache
     authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
     extraPullNames: nix-community

Otherwise, you can add any binary cache to nix.conf using install-nix-action's own extra_nix_config input:

- uses: cachix/install-nix-action@v22
  with:
    extra_nix_config: |
      trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=
      substituters = https://hydra.iohk.io https://cache.nixos.org/

How do I pass environment variables to commands run with nix develop or nix shell?

Nix runs commands in a restricted environment by default, called pure mode. In pure mode, environment variables are not passed through to improve the reproducibility of the shell.

You can use the --keep / -k flag to keep certain environment variables:

- name: Run a command with nix develop
  run: nix develop --ignore-environment --keep MY_ENV_VAR --command echo $MY_ENV_VAR
  env:
    MY_ENV_VAR: "hello world"

Or you can disable pure mode entirely with the --impure flag:

nix develop --impure

More Repositories

1

devenv

Fast, Declarative, Reproducible, and Composable Developer Environments
Nix
4,054
star
2

cachix

Command line client for Nix binary cache hosting:
Haskell
814
star
3

git-hooks.nix

Seamless integration of https://pre-commit.com git hooks with Nix.
Nix
499
star
4

cachix-action

Build software only once and put it in a global cache
TypeScript
209
star
5

nixpkgs-python

All Python versions, kept up-to-date on hourly basis using Nix.
Nix
106
star
6

elm2nix

Convert Elm project into Nix expressions
Haskell
105
star
7

ghcide-nix

Nix installation for ghcide
Nix
76
star
8

docs.cachix.org

Documentation for Cachix service.
Python
58
star
9

cachix-deploy-hetzner-dedicated

Bootstrap Hetzner Dedicated machines with a single command and deploy using GitHub Actions
Nix
22
star
10

stamina.hs

Retrying for humans using Haskell.
Haskell
20
star
11

haskell-release-action

Automation for releasing haskell packages
17
star
12

hs-opentelemetry-instrumentation-servant

OpenTelemetry instrumentation for Servant, compatible with hs-opentelemetry.
Haskell
11
star
13

paddle

Haskell API for Paddle payments
Haskell
10
star
14

cachix-ci-agents

self-hosted github runners
Nix
9
star
15

nixpkgs-unfree-redistributable

Nix
6
star
16

katip-raven

Katip scribe for raven client (https://sentry.io)
Haskell
5
star
17

clickhouse-haskell

Haskell
5
star
18

cachix-deploy-flake

Functions to help manage Cachix Deploy when using flakes.
Nix
5
star
19

hs-opentelemetry-instrumentation-http-client

Plug&play OpenTelemetry tracing for http-client Manager
Haskell
5
star
20

cachix-deploy-terraform

HCL
3
star
21

websockets-simple

High-level library for Client/Server websocket communication in Haskell
Haskell
3
star
22

mixpanel-client

Haskell client implementation of mixpanel HTTP api
Haskell
3
star
23

fastspring

Haskell API for https://fastspring.com/
Haskell
3
star
24

buildkite-example

2
star
25

travis-ci-example

Nix
2
star
26

circleci-example

Nix
2
star
27

feedback

Feedback about https://cachix.org service
2
star
28

ekg-ghc

Provides additional metrics for GHC via `ekg-core`
Haskell
2
star
29

cachix-deploy-amis

AMIs for using Cachix Deploy
HCL
1
star
30

haskell-wishlist

Things we wish Haskell had
1
star
31

cachix-deploy-aws

HCL
1
star
32

parse-range-header.js

TypeScript
1
star
33

fastcdc-rs2hs

A Haskell wrapper around fastcdc-rs.
Haskell
1
star