formatting & feature branches
Signed-off-by: ahuston-0 <aliceghuston@gmail.com>
This commit is contained in:
parent
f47e58a89b
commit
13b39a1d26
@ -1,52 +1,162 @@
|
|||||||
{ nixpkgs, pulls, ... }:
|
{
|
||||||
|
nixpkgs,
|
||||||
|
pulls,
|
||||||
|
feature-branches,
|
||||||
|
flake-update-branches,
|
||||||
|
...
|
||||||
|
}:
|
||||||
let
|
let
|
||||||
pkgs = import nixpkgs { };
|
pkgs = import nixpkgs { };
|
||||||
|
|
||||||
|
makeSpec =
|
||||||
|
contents:
|
||||||
|
builtins.derivation {
|
||||||
|
name = "spec.json";
|
||||||
|
system = "x86_64-linux";
|
||||||
|
preferLocalBuild = true;
|
||||||
|
allowSubstitutes = false;
|
||||||
|
builder = "/bin/sh";
|
||||||
|
args = [
|
||||||
|
(builtins.toFile "builder.sh" ''
|
||||||
|
echo "$contents" > $out
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
contents = builtins.toJSON contents;
|
||||||
|
};
|
||||||
|
|
||||||
prs = builtins.fromJSON (builtins.readFile pulls);
|
prs = builtins.fromJSON (builtins.readFile pulls);
|
||||||
prJobsets = pkgs.lib.mapAttrs (num: info: {
|
branches = builtins.fromJSON (builtins.readFile feature-branches);
|
||||||
enabled = 1;
|
update = builtins.fromJSON (builtins.readFile flake-update-branches);
|
||||||
hidden = false;
|
repo = "ahuston-0/nix-dotfiles-hydra";
|
||||||
description = "PR ${num}: ${info.title}";
|
|
||||||
checkinterval = 60;
|
|
||||||
schedulingshares = 20;
|
|
||||||
enableemail = false;
|
|
||||||
emailoverride = "";
|
|
||||||
keepnr = 1;
|
|
||||||
type = 1;
|
|
||||||
flake = "github:ahuston-0/nix-dotfiles-hydra/pull/${num}/head";
|
|
||||||
}) prs;
|
|
||||||
mkFlakeJobset = branch: {
|
|
||||||
description = "Build ${branch}";
|
|
||||||
checkinterval = "3600";
|
|
||||||
enabled = "1";
|
|
||||||
schedulingshares = 100;
|
|
||||||
enableemail = false;
|
|
||||||
emailoverride = "";
|
|
||||||
keepnr = 3;
|
|
||||||
hidden = false;
|
|
||||||
type = 1;
|
|
||||||
flake = "github:ahuston-0/nix-dotfiles-hydra/tree/${branch}";
|
|
||||||
};
|
|
||||||
|
|
||||||
desc = prJobsets // {
|
makeJob =
|
||||||
"main" = mkFlakeJobset "main";
|
|
||||||
"feature-upsync" = mkFlakeJobset "feature/upsync";
|
|
||||||
};
|
|
||||||
|
|
||||||
log = {
|
|
||||||
pulls = prs;
|
|
||||||
jobsets = desc;
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
jobsets = pkgs.runCommand "spec-jobsets.json" { } ''
|
schedulingshares ? 10,
|
||||||
cat >$out <<EOF
|
keepnr ? 3,
|
||||||
${builtins.toJSON desc}
|
description,
|
||||||
EOF
|
flake,
|
||||||
# This is to get nice .jobsets build logs on Hydra
|
}:
|
||||||
cat >tmp <<EOF
|
{
|
||||||
${builtins.toJSON log}
|
inherit
|
||||||
EOF
|
description
|
||||||
${pkgs.jq}/bin/jq . tmp
|
flake
|
||||||
'';
|
schedulingshares
|
||||||
|
keepnr
|
||||||
|
;
|
||||||
|
enabled = 1;
|
||||||
|
type = 1;
|
||||||
|
hidden = false;
|
||||||
|
checkinterval = 300; # every 6 months
|
||||||
|
enableemail = false;
|
||||||
|
emailoverride = "";
|
||||||
|
};
|
||||||
|
jobOfRef =
|
||||||
|
name:
|
||||||
|
{ ref, ... }:
|
||||||
|
if isNull (builtins.match "^refs/heads/(.*)$" ref) then
|
||||||
|
null
|
||||||
|
else
|
||||||
|
{
|
||||||
|
name = "branch-${name}";
|
||||||
|
value = makeJob {
|
||||||
|
description = "Branch ${name}";
|
||||||
|
flake = "git+ssh://git@github.com/${repo}?ref=${ref}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
jobOfPR = id: info: {
|
||||||
|
name = "pr-${id}";
|
||||||
|
value = makeJob {
|
||||||
|
description = "PR ${id}: ${info.title}";
|
||||||
|
flake = "git+ssh://git@github.com/${info.head.repo.full_name}?ref=${info.head.ref}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
attrsToList = l: builtins.attrValues (builtins.mapAttrs (name: value: { inherit name value; }) l);
|
||||||
|
readJSONFile = f: builtins.fromJSON (builtins.readFile f);
|
||||||
|
mapFilter = f: l: builtins.filter (x: !(isNull x)) (map f l);
|
||||||
|
in
|
||||||
|
# throwJSON = x: throw (builtins.toJSON x);
|
||||||
|
# prJobsets = pkgs.lib.mapAttrs (num: info: {
|
||||||
|
# enabled = 1;
|
||||||
|
# hidden = false;
|
||||||
|
# description = "PR ${num}: ${info.title}";
|
||||||
|
# checkinterval = 60;
|
||||||
|
# schedulingshares = 20;
|
||||||
|
# enableemail = false;
|
||||||
|
# emailoverride = "";
|
||||||
|
# keepnr = 1;
|
||||||
|
# type = 1;
|
||||||
|
# flake = "github:ahuston-0/nix-dotfiles-hydra/pull/${num}/head";
|
||||||
|
# }) prs;
|
||||||
|
# branchJobsets = pkgs.lib.mapAttrs (num: info: {
|
||||||
|
# enabled = 1;
|
||||||
|
# hidden = false;
|
||||||
|
# description = "PR ${num}: ${info.title}";
|
||||||
|
# checkinterval = 60;
|
||||||
|
# schedulingshares = 20;
|
||||||
|
# enableemail = false;
|
||||||
|
# emailoverride = "";
|
||||||
|
# keepnr = 1;
|
||||||
|
# type = 1;
|
||||||
|
# flake = "github:ahuston-0/nix-dotfiles-hydra/pull/${num}/head";
|
||||||
|
# }) branches;
|
||||||
|
# updateJobsets = pkgs.lib.mapAttrs (num: info: {
|
||||||
|
# enabled = 1;
|
||||||
|
# hidden = false;
|
||||||
|
# description = "PR ${num}: ${info.title}";
|
||||||
|
# checkinterval = 60;
|
||||||
|
# schedulingshares = 20;
|
||||||
|
# enableemail = false;
|
||||||
|
# emailoverride = "";
|
||||||
|
# keepnr = 1;
|
||||||
|
# type = 1;
|
||||||
|
# flake = "github:ahuston-0/nix-dotfiles-hydra/pull/${num}/head";
|
||||||
|
# }) prs;
|
||||||
|
# mkFlakeJobset = branch: {
|
||||||
|
# description = "Build ${branch}";
|
||||||
|
# checkinterval = "3600";
|
||||||
|
# enabled = "1";
|
||||||
|
# schedulingshares = 100;
|
||||||
|
# enableemail = false;
|
||||||
|
# emailoverride = "";
|
||||||
|
# keepnr = 3;
|
||||||
|
# hidden = false;
|
||||||
|
# type = 1;
|
||||||
|
# flake = "github:ahuston-0/nix-dotfiles-hydra/tree/${branch}";
|
||||||
|
# };
|
||||||
|
# desc = prJobsets // {
|
||||||
|
# "main" = mkFlakeJobset "main";
|
||||||
|
# "feature-upsync" = mkFlakeJobset "feature/upsync";
|
||||||
|
# };
|
||||||
|
# log = {
|
||||||
|
# pulls = prs;
|
||||||
|
# jobsets = desc;
|
||||||
|
# };
|
||||||
|
{
|
||||||
|
# jobsets = pkgs.runCommand "spec-jobsets.json" { } ''
|
||||||
|
# cat >$out <<EOF
|
||||||
|
# ${builtins.toJSON desc}
|
||||||
|
# EOF
|
||||||
|
# # This is to get nice .jobsets build logs on Hydra
|
||||||
|
# cat >tmp <<EOF
|
||||||
|
# ${builtins.toJSON log}
|
||||||
|
# EOF
|
||||||
|
# ${pkgs.jq}/bin/jq . tmp
|
||||||
|
# '';
|
||||||
|
jobsets = makeSpec (
|
||||||
|
builtins.listToAttrs (map ({ name, value }: jobOfPR name value) (attrsToList (readJSONFile prs)))
|
||||||
|
// builtins.listToAttrs (
|
||||||
|
mapFilter ({ name, value }: jobOfRef name value) (attrsToList (readJSONFile branches))
|
||||||
|
)
|
||||||
|
// builtins.listToAttrs (
|
||||||
|
mapFilter ({ name, value }: jobOfRef name value) (attrsToList (readJSONFile update))
|
||||||
|
)
|
||||||
|
// {
|
||||||
|
main = makeJob {
|
||||||
|
description = "main";
|
||||||
|
flake = "github:${repo}";
|
||||||
|
keepnr = 10;
|
||||||
|
schedulingshares = 100;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user