- TypeScript 67.8%
- Nix 26.9%
- JavaScript 5.3%
|
|
||
|---|---|---|
| .github/workflows | ||
| __tests__ | ||
| lib | ||
| src | ||
| .gitignore | ||
| action.yml | ||
| jest.config.js | ||
| LICENSE | ||
| package.json | ||
| README.md | ||
| test.nix | ||
| tsconfig.json | ||
| yarn.lock | ||
cachix-action
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.
Caching /nix/store is time consuming as Nix only appends store paths to it.
As you invoke new builds, those will contain all your sources throughout the whole history of your build.
Garbage collecting is also suboptimal, as caching is hard to invalidate correctly between different changes and branches.
Cachix avoids this by keeping your /nix/store hosted and only downloads the bits you
need for the given build (in parallel) using Nix substituters.
Usage
-
Login to Cachix and create a new cache.
- Follow getting started to create your signing key
- Backup the signing key in the process.
-
As an admin of your github repository:
- Click on Settings
- Click on Secrets (If missing, you need to sign up first for actions beta)
- Add your signing key value under name
CACHIX_SIGNING_KEY.
-
Create
.github/workflows/test.ymlin 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