refactor(ci-builds): Split up CI builds into multiple buckets

These categories separate CI targets, which hopefully avoids the
out-of-space errors we have been seeing on Sourcehut.

The sets of CI build targets are made available in the depot itself so
that besadii can be updated to create a new build for each target
group.

For convenience, 'ciBuilds' contains an '__allTargets' attribute which
combines the contents of each target batch - this makes it possible to
still invoke a build for everything by using:

  nix-build -A ciBuilds.__allTargets

Note: Some targets that were previously built in CI aren't anymore,
most importantly my NixOS systems which don't fit on Sourcehut.

Change-Id: Ia15ed7b743c8add51ae08ce0827a0ddfacd637e2
Reviewed-on: https://cl.tvl.fyi/c/depot/+/570
Reviewed-by: lukegb <lukegb@tvl.fyi>
This commit is contained in:
Vincent Ambo 2020-06-24 03:08:53 +01:00 committed by tazjin
parent f2980dfc16
commit 1640d9d145
2 changed files with 73 additions and 32 deletions

View file

@ -1,35 +1,70 @@
# This file defines the derivations that should be built by CI. # This file defines the derivations that should be built by CI.
# #
# The plan is still to implement recursive tree traversal # The "categories" (i.e. attributes) below exist because we run out of
# automatically and detect all derivations that have `meta.enableCI = # space on Sourcehut otherwise.
# true`, but this is currently more effort than it would save me. { depot, lib, ... }:
with (import ./default.nix {}); [ let
fun.amsterdump inherit (builtins) attrNames filter foldl' getAttr substring;
fun.gemma
fun.quinistry
fun.watchblob
fun.wcl
lisp.dns
nix.buildLisp.example
nix.yants.tests
ops."posix_mq.rs"
ops.besadii
ops.journaldriver
ops.kms_pass
ops.kontemplate
ops.mq_cli
third_party.cgit
third_party.git
third_party.lisp # will build all third-party libraries
third_party.nix
tools.cheddar
web.blog
web.cgit-taz
web.tvl
# tazjin's personal things in lib.fix(self: {
__apprehendEvaluators = throw ''
Do not evaluate this attribute set directly. It exists only to group builds
for CI runs of different "project groups".
To use the depot, always start from the top-level attribute tree instead.
'';
# Names of all evaluatable attributes in here. This list will be
# used to trigger builds for each key.
__evaluatable = filter (key: (substring 0 2 key) != "__") (attrNames self);
# List of non-public targets, these are only used in local builds
# and not in CI.
__nonpublic = with depot; [
users.tazjin.emacs users.tazjin.emacs
users.tazjin.nixos.camdenSystem users.tazjin.nixos.camdenSystem
users.tazjin.nixos.frogSystem users.tazjin.nixos.frogSystem
] ];
# Combined list of all the targets, used for building everything locally.
__allTargets = foldl' (x: y: x ++ y) self.__nonpublic
(map (k: getAttr k self) self.__evaluatable);
fun = with depot.fun; [
amsterdump
gemma
quinistry
watchblob
wcl
];
gitAndFriends = with depot; [
third_party.cgit
third_party.git
web.cgit-taz
];
nix = [ depot.third_party.nix ];
ops = with depot.ops; [
depot.ops."posix_mq.rs"
besadii
journaldriver
kms_pass
kontemplate
mq_cli
];
various = with depot; [
tools.cheddar
lisp.dns
nix.buildLisp.example
nix.yants.tests
];
web = with depot.web; [
blog
tvl
];
})

View file

@ -18,6 +18,9 @@ let
config = depot: { config = depot: {
inherit depot; inherit depot;
# Expose lib & ciBuilds attributes to packages.
inherit (depot) ciBuilds lib;
# Pass third_party as 'pkgs' (for compatibility with external # Pass third_party as 'pkgs' (for compatibility with external
# imports for certain subdirectories) # imports for certain subdirectories)
pkgs = depot.third_party; pkgs = depot.third_party;
@ -59,10 +62,13 @@ in fix(self: {
# Make the path to the depot available for things that might need it # Make the path to the depot available for things that might need it
# (e.g. NixOS module inclusions) # (e.g. NixOS module inclusions)
depotPath = ./.; depotPath = ./.;
# Load CI builds in a way that can be injected into programs like besadii.
ciBuilds = import ./ci-builds.nix self.config;
} }
# Add local packages as structured by readTree # Add local packages as structured by readTree
// (localPkgs (readTree' (self.config // { inherit (self) lib; }))) // (localPkgs (readTree' self.config))
# Load overrides into the top-level. # Load overrides into the top-level.
# #