Github action to use an Attic binary cache https://cachix.org
  • TypeScript 67.8%
  • Nix 26.9%
  • JavaScript 5.3%
Find a file
Domen Kožar 4f0d7f12ae
Update README.md
Co-Authored-By: Robert Hensing <roberth@users.noreply.github.com>
2019-12-19 18:01:20 +01:00
.github/workflows bump 2019-11-20 15:41:46 +01:00
__tests__ saneSplit -> nonEmptySplit 2019-10-03 13:26:42 +02:00
lib Allow skipping nix-build 2019-12-19 17:23:34 +01:00
src Allow skipping nix-build 2019-12-19 17:23:34 +01:00
.gitignore Initial commit 2019-09-30 15:32:36 +02:00
action.yml Allow skipping nix-build 2019-12-19 17:23:34 +01:00
jest.config.js Initial commit 2019-09-30 15:32:36 +02:00
LICENSE Split Nix installation into separate action 2019-10-02 16:25:24 +02:00
package.json Split Nix installation into separate action 2019-10-02 16:25:24 +02:00
README.md Update README.md 2019-12-19 18:01:20 +01:00
test.nix fix for #3 2019-10-03 15:43:16 +02:00
tsconfig.json Initial commit 2019-09-30 15:32:36 +02:00
yarn.lock Install Nix via the action 2019-10-01 11:54:05 +02:00

cachix-action

github actions badge

Build software only once using Nix with the help of Cachix.

This action will configure Cachix and invoke nix-build.

Why do I need this

Because you'd like for your CI to be fast. Let me explain.

Directory-based caching on a typical CI doesn't work well for Nix.

/nix/store is a global storage of everything Nix operates on. These are your sources, patches, tarballs, packages, configuration.

A directory-based cache requires downloading a whole store, including the irrelevant parts. cachix-action will only fetch what's needed by configuring a Nix binary cache.

When the build is done, cachix-action only has to upload the new store paths, rather than syncing the whole store.

Purging paths from a directory-based cache is not feasible because it'd have to be aware of all branches and their respective contents somehow.

Usage

  1. Login to Cachix and create a new cache.

    1. Follow getting started to create your signing key
    2. Backup the signing key in the process.
  2. As an admin of your github repository:

    1. Click on Settings
    2. Click on Secrets (If missing, you need to sign up first for actions beta)
    3. Add your signing key value under name CACHIX_SIGNING_KEY.
  3. 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@v1
    - uses: cachix/install-nix-action@v6
    - uses: cachix/cachix-action@v2
      with:
        name: mycache
        signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}'
        # Only needed for private caches
        authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'

Alternatively, you can use this action to only configure cachix for substitution:

...
    - uses: cachix/cachix-action@v2
      with:
        name: mycache
        skipNixBuild: true
        # Only needed for private caches
        authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
...

See action.yml for all options.


Hacking

Install the dependencies

$ yarn install

Build the typescript

$ yarn build

Run the tests ✔️

$ yarn test