tvl-depot/ci-builds.nix
Profpatsch 4402c363b6 feat(nix/runExecline): add runExecline
runExecline is a primitive that just does not care.

It’s similar to `runCommand`, but instead of concatenating bash
scripts left and right, it actually *uses* the features of
`derivation`, passing things to `args` and making it possible to
overwrite the `builder` in a sensible manner.

Additionally, it provides a way to pass a nix string to `stdin` of the
build script.

Similar to `writeExecline`, the passed script is not a string, but a
nested list of nix lists representing execline blocks. Escaping is
done by the implementation, the user can just use normal nix strings.

Change-Id: I890d9e5d921207751cdc8cc4309381395d92742f
Reviewed-on: https://cl.tvl.fyi/c/depot/+/701
Reviewed-by: BuildkiteCI
Reviewed-by: isomer <isomer@tvl.fyi>
Reviewed-by: tazjin <mail@tazj.in>
Tested-by: BuildkiteCI
2020-06-29 22:58:47 +00:00

95 lines
2.3 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;
};
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.nixos.camdenSystem
users.tazjin.nixos.frogSystem
];
# Combined list of all the targets, used for building everything locally.
__allTargets =
(with depot.nix.yants; list drv)
(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
kontemplate
mq_cli
];
various = with depot; [
depot.web.tvl
lisp.dns
nix.buildLisp.example
nix.yants.tests
tools.cheddar
tools.nsfv-setup
(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
];
# User-specific build targets
tazjin = with depot.users.tazjin; [
blog.rendered
emacs
homepage
];
})