2020-07-06 10:27:55 -04:00
|
|
|
Continuous Integration with GitHub Actions
|
|
|
|
==========================================
|
|
|
|
|
2020-07-07 04:26:09 -04:00
|
|
|
This tutorial guides you through **a few short steps** to start using
|
|
|
|
`GitHub Actions <https://github.com/features/actions>`_ as your CI
|
|
|
|
for commits and pull requests.
|
2020-07-06 10:27:55 -04:00
|
|
|
|
|
|
|
|
|
|
|
Caching builds using Cachix
|
|
|
|
---------------------------
|
|
|
|
|
|
|
|
One nice benefit of Nix is that **CI can build and cache developer environments
|
|
|
|
for every project** on every branch using binary caches.
|
|
|
|
|
|
|
|
Another important aspect of CI is the feedback loop of
|
|
|
|
**how many minutes does the build take to finish**.
|
|
|
|
|
2020-07-07 10:58:18 -04:00
|
|
|
Using `Cachix <https://cachix.org/>`_ you'll never
|
2020-07-06 10:27:55 -04:00
|
|
|
have to waste building any derivation twice and you'll share built derivations with all your developers.
|
|
|
|
|
|
|
|
After each job, just built derivations are pushed to your binary cache.
|
|
|
|
|
|
|
|
Before each job, derivations to be built are first substituted (if they exist) from your binary cache.
|
|
|
|
|
|
|
|
|
|
|
|
1. Creating your first binary cache
|
|
|
|
***********************************
|
|
|
|
|
|
|
|
It's recommended to have different binary caches per team, depending who will have write/read access to it.
|
|
|
|
|
|
|
|
Fill out the form on `create binary cache <https://app.cachix.org/cache>`_ page.
|
|
|
|
|
|
|
|
On your freshly created binary cache, generate signing keypair via **Push binaries tab** instructions.
|
|
|
|
|
|
|
|
|
|
|
|
2. Setting up secrets
|
|
|
|
*********************
|
|
|
|
|
|
|
|
On your GitHub repository or organization (for use across all repositories):
|
|
|
|
|
|
|
|
1. Click on ``Settings``
|
|
|
|
2. Click on ``Secrets``.
|
|
|
|
3. Add your (previously generated) signing key under name ``CACHIX_SIGNING_KEY``.
|
|
|
|
|
|
|
|
|
|
|
|
Setting up GitHub Actions
|
|
|
|
-------------------------
|
|
|
|
|
|
|
|
Create ``.github/workflows/test.yml`` with:
|
|
|
|
|
|
|
|
.. code:: yaml
|
|
|
|
|
|
|
|
name: "Test"
|
|
|
|
on:
|
|
|
|
pull_request:
|
|
|
|
push:
|
|
|
|
jobs:
|
|
|
|
tests:
|
|
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
|
|
- uses: actions/checkout@v2.3.1
|
|
|
|
- uses: cachix/install-nix-action@v10
|
|
|
|
- uses: cachix/cachix-action@v6
|
|
|
|
with:
|
|
|
|
name: mycache
|
|
|
|
signingKey: '${{ secrets.CACHIX_SIGNING_KEY }}'
|
|
|
|
# Only needed for private caches
|
|
|
|
#authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
|
|
|
|
- run: nix-build
|
2020-07-07 05:27:40 -04:00
|
|
|
- run: nix-shell --run "echo OK"
|
2020-07-06 10:27:55 -04:00
|
|
|
|
|
|
|
Once you commit and push to your GitHub repository,
|
|
|
|
you should see status checks appearing on commits and PRs.
|
|
|
|
|
|
|
|
|
|
|
|
Going forward
|
|
|
|
-------------
|
|
|
|
|
|
|
|
- See `GitHub Actions workflow syntax <https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions>`_
|
|
|
|
|
2020-07-08 08:09:32 -04:00
|
|
|
- To quickly setup a Nix project read through
|
|
|
|
`Getting started Nix template <https://github.com/nix-dot-dev/getting-started-nix-template>`_.
|