Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/getchoo/nix2workflow

all your cool nix packages, now in github actions!
https://github.com/getchoo/nix2workflow

Last synced: about 2 months ago
JSON representation

all your cool nix packages, now in github actions!

Awesome Lists containing this project

README

        

# nix2workflow

![Test Status](https://github.com/getchoo/nix2workflow/actions/workflows/ci.yaml/badge.svg)
[![FlakeHub](https://img.shields.io/endpoint?url=https://flakehub.com/f/getchoo/nix2workflow/badge)](https://flakehub.com/flake/getchoo/nix2workflow)

nix2workflow is a library for generating GitHub matrices from nix flake outputs.

## Usage

We offer both a standard library for use in any flake, along with
a [flake-parts](https://flake.parts/) module for easier integration.

You can find an example workflow for use in your own project in
[./.github/workflows/example.yaml](./.github/workflows/example.yaml).

### Flake module

A basic setup might look like this. Please see the [module](./module.nix)
for all options

```nix
{self, ...}: {
imports = [ nix2workflow.flakeModule ];

nix2workflow = {
# this will automatically build all standard outputs in self
root = self;

overrides = {
checks.systems = [ "x86_64-linux" ];
};
};
}
```

A full example can be found in [./test/module/flake.nix](./test/module/flake.nix)

### Library

The regular library will have a more complicated setup, though
it also allows using lower level functions and has no restrictions on
what flake outputs are used.

```nix
{
workflowMatrix = let
platforms = {
x86_64-linux = {
os = "ubuntu-latest";
arch = "x64";
};

x86_64-darwin = {
os = "macos-latest";
arch = "x64";
};
};

inherit (nix2workflow.lib { inherit platforms; }) mkMatrix;

jobs = lib.flatten (
(mkMatrix {
root = self;
output = "packages";
})

(mkMatrix {
root = self;
output = "checks";
systems = [ "x86_64-linux" ];
})
);
in {
include = jobs;
};
}
```

You can see a full example in [./test/lib/flake.nix](./test/lib/flake.nix)

### In workflows

When the matrix is imported, a few variables with added to the `matrix` context.
These can allow you to customize your workflow based on what packages are building -
such as enabling QEMU when building for aarch64

| name | use |
| --- | --- |
| `os` | The operating system of the current output. Usually `ubuntu-latest` or `macos-latest` |
| `arch` | The architecture of the current output. Will be `aarch64` or `x64` |
| `attr` | The flake attribute of the current output (can really be anything).
Note that you will still need to prefix this with the `root` attribute if set (i.e. `.#hydraJobs.${{ matrix.attrr }}`) |

## Related projects
- [nix-community/nix-github-actions](https://github.com/nix-community/nix-github-actions/)
- This is the primary inspiration for this project - and I believe also one of the first
projects to attempt this, so kudos!
- [nix-community/nix-eval-jobs](https://github.com/nix-community/nix-eval-jobs)
- I liked the idea of using `hydraJobs` (and possibly others) on GitHub Actions, and
thought it might be fun to make a direct translation of these attributes in pure nix