tvl-depot/ci-builds.nix
Griffin Smith a73714a93c feat(ops/nixos): Add generic rebuild-system script
This adds a first crack at one idea for a generic, non-user-specific
rebuild-system script to ops.nixos.rebuild-system. The idea here is that
we enumerate all the nixos systems stored in the monorepo (similarly to
what we do for ci-builds right now) then search through them by hostname
to find the one matching the hostname of the current system, which is an
attempt at a more generic version of tazjin's rebuilder script which
does the same thing but with an explicit case block.

As a caveat, it feels like there's a slight possibility that this way of
finding systems is going to get slow to evaluate - on my system it feels
fine but if it grows out of hand it's probably feasible to just bake
this into the built script as a dynamically generated case statement.

Change-Id: I2e4c5401913b6f4d936ab48ba2f95f96e0e78eb4
Reviewed-on: https://cl.tvl.fyi/c/depot/+/894
Tested-by: BuildkiteCI
Reviewed-by: lukegb <lukegb@tvl.fyi>
2020-07-06 15:16:36 +00:00

105 lines
2.5 KiB
Nix

# This file defines the derivations that should be built by CI.
#
# The "categories" (i.e. attributes) below exist because we run out of
# space on Sourcehut otherwise.
{ depot, lib, ... }:
let
inherit (builtins) attrNames filter foldl' getAttr substring;
# attach a nix expression to a drv so we can “build” it
# TODO(Profpatsch): instead of failing evaluation if a test fails,
# we can put the expression of the test failure into $out
# and continue with the other CI derivations.
drvify = name: exp: depot.nix.emptyDerivation {
inherit name;
owo = lib.generators.toPretty {} exp;
};
systemFor = configuration: (depot.third_party.nixos {
inherit configuration;
}).system;
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);
# Combined list of all the targets, used for building everything locally.
__allTargets =
(with depot.nix.yants; list drv)
(foldl' (x: y: x ++ y) [] (map (k: getAttr k self) self.__evaluatable));
fun = with depot.fun; [
amsterdump
clbot
gemma
quinistry
tvldb
watchblob
wcl
];
ops = with depot.ops; [
depot.ops."posix_mq.rs"
besadii
journaldriver
kontemplate
mq_cli
(systemFor nixos.whitby)
];
third_party = with depot.third_party; [
cgit
git
grpc
nix
openldap
apereo-cas
];
various = with depot; [
lisp.dns
nix.buildLisp.example
nix.yants.tests
tools.cheddar
tools.nsfv-setup
web.cgit-taz
web.tvl
(drvify "getBins-tests" nix.getBins.tests)
]
++ nix.runExecline.tests
;
# Haskell packages we've patched locally
haskellPackages = with depot.third_party.haskellPackages; [
generic-arbitrary
hgeometry
hgeometry-combinatorial
vinyl
comonad-extras
depot.third_party.haskell-language-server.ghc883
];
# User-specific build targets
tazjin = with depot.users.tazjin; [
blog.rendered
emacs
finito
homepage
(systemFor nixos.camden)
(systemFor nixos.frog)
];
glittershark = with depot.users.glittershark; [
(systemFor system.system.chupacabra)
xanthous
];
})