nixci 0.2.0

Define and build CI for Nix projects anywhere
docs.rs failed to build nixci-0.2.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.

nixci

Crates.io

nixci builds all outputs in a flake, or optionally its sub-flakes, which can in turn be used either in CI or locally. Using devour-flake it will automatically build the following outputs:

Type Output Key
Standard flake outputs packages, apps, checks, devShells
NixOS nixosConfigurations.*
nix-darwin darwinConfigurations.*
home-manager legacyPackages.${system}.homeConfigurations.*

The stdout of nixci will be a list of store paths built.

Install

From nixpkgs

nix run nixpkgs#nixci

From source

Note

To make use of the binary cache, first run:

nix run nixpkgs#cachix use srid

To install, run nix profile install github:srid/nixci. You can also use use nix run github:srid/nixci to run nixci directly off this repo without installing it.

Usage

nixci accepts any valid flake URL or a Github PR URL.

# Run nixci on a local flake (default is $PWD)
$ nixci ~/code/myproject

# Run nixci on a github repo
$ nixci github:hercules-ci/hercules-ci-agent

# Run nixci on a github PR
$ nixci https://github.com/srid/emanote/pull/451

Using in Github Actions

Add the following to your workflow file,

      - name: Install Nix
        uses: DeterminateSystems/nix-installer-action@main
      - uses: yaxitech/nix-install-pkgs-action@v3
        with:
          packages: "nixpkgs#nixci"
      - run: nixci

Configuring

By default, nixci will build the top-level flake, but you can tell it to build sub-flakes by adding the following output to your top-level flake:

# myproject/flake.nix
{
  nixci.default = {
    dir1 = {
        dir = "dir1";
    };
    dir2 = {
        dir = "dir2";
        overrideInputs.myproject = ./.;
    };
  }
}

You can have more than one nixci configuration. For eg., nixci .#foo will run the configuration from nixci.foo flake output.

Examples

Some real-world examples of how nixci is used with specific configurations:

What it does

  • Optionally, accept a flake config (nixci.default) to indicate sub-flakes to build, along with their input overrides
  • Check that flake.lock is in sync
  • Use devour-flake to build all flake outputs
  • Print the built outputs to stdout

See also

  • jenkins-nix-ci - Jenkins NixOS module that supports nixci as a Groovy function