Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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!
- Host: GitHub
- URL: https://github.com/getchoo/nix2workflow
- Owner: getchoo
- License: mit
- Created: 2023-11-08T02:47:13.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2023-12-25T09:35:28.000Z (about 1 year ago)
- Last Synced: 2024-10-13T00:58:22.938Z (3 months ago)
- Language: Nix
- Size: 26.4 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
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