Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions buildbot-nix.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
attribute = "ci.buildbot"
3 changes: 3 additions & 0 deletions flake/default.nix
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
inputs.flake-parts.flakeModules.partitions
./deprecation
./modules.nix
./options/ci.nix
./options/testbeds.nix
./packages.nix
./propagated-packages.nix
];
Expand All @@ -15,6 +17,7 @@

partitionedAttrs = lib.genAttrs [
"checks"
"ci"
"devShells"
"formatter"
] (_: "dev");
Expand Down
36 changes: 35 additions & 1 deletion flake/dev/packages.nix
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,46 @@
# are derivations.
checks = config.packages;

packages = config.testbeds;

# Testbeds are virtual machines based on NixOS, therefore they are
# only available for Linux systems.
packages = lib.mkIf pkgs.stdenv.hostPlatform.isLinux (
testbeds = lib.mkIf pkgs.stdenv.hostPlatform.isLinux (
import ../../stylix/testbed {
inherit pkgs inputs lib;
}
);

ci.buildbot = {
Comment thread
trueNAHO marked this conversation as resolved.
packages = builtins.removeAttrs config.packages (
builtins.attrNames config.testbeds
);
Comment thread
0xda157 marked this conversation as resolved.
# Batching testbeds by target, to avoid overwhelming buildbot
testbeds = lib.pipe config.testbeds [
(lib.mapAttrsToList (
name: testbed:
let
# name is formatted as `testbed:target:variant` e.g. `testbed:alacritty:dark`
splitName = lib.splitString ":" name;
in
{
target = builtins.elemAt splitName 1;
variant = builtins.elemAt splitName 2;
inherit testbed;
}
))
(builtins.groupBy (entry: entry.target))
(lib.mapAttrs (_: builtins.groupBy (entry: entry.variant)))
(lib.mapAttrs (
_:
lib.mapAttrs (
_: entries:
assert lib.length entries == 1;
(lib.head entries).testbed
)
))
(lib.mapAttrs (target: pkgs.linkFarm "testbeds-${target}"))
];
};
};
}
35 changes: 35 additions & 0 deletions flake/options/ci.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{ lib, config, ... }:
let
inherit (lib) types;
in
{
perSystem.options.ci.buildbot = lib.mkOption {
type = types.lazyAttrsOf types.raw;
default = { };
description = ''
A set of tests for [buildbot] to run.
[buildbot]: https://buildbot.nix-community.org
'';
};

flake = {
# top-level CI option
#
# NOTE:
# This must be an actual option, NOT a set of options.
# Otherwise, flake partitions will not be lazy.
options.ci = lib.mkOption {
type = types.lazyAttrsOf (types.lazyAttrsOf types.raw);
default = { };
description = ''
Outputs related to CI.
Usually defined via the `perSystem.ci` options.
'';
};

# Transpose per-system CI outputs to the top-level
config.ci.buildbot = lib.mapAttrs (
_: sysCfg: sysCfg.ci.buildbot
) config.allSystems;
};
}
9 changes: 9 additions & 0 deletions flake/options/testbeds.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{ lib, ... }:
{
perSystem.options.testbeds = lib.mkOption {
internal = true;
type = lib.types.lazyAttrsOf lib.types.package;
default = { };
description = "Testbeds for Stylix.";
};
}