k 3 repo-sync: better types, add repo timer

This commit is contained in:
lassulus 2017-03-08 00:47:43 +01:00
parent f66d7f4d47
commit 8464ebbf69

View File

@ -12,7 +12,34 @@ let
api = { api = {
enable = mkEnableOption "repo-sync"; enable = mkEnableOption "repo-sync";
repos = mkOption { repos = mkOption {
type = with types;attrsOf (attrsOf (attrsOf (attrsOf str))); type = types.attrsOf (types.submodule {
options = {
branches = mkOption {
type = types.attrsOf (types.submodule ({ config, ... }: {
options = {
origin = mkOption {
type = types.git-source;
};
mirror = mkOption {
type = types.git-source;
};
};
config = {
origin.ref = mkDefault "heads/master";
mirror.ref = mkDefault "heads/${config._module.args.name}";
};
}));
};
latest = mkOption {
type = types.nullOr types.git-source;
default = null;
};
timerConfig = mkOption {
type = types.attrsOf types.str;
default = cfg.timerConfig;
};
};
});
example = literalExample '' example = literalExample ''
# see `repo-sync --help` # see `repo-sync --help`
# `ref` provides sane defaults and can be omitted # `ref` provides sane defaults and can be omitted
@ -23,53 +50,53 @@ let
# each attrset defines a group of repos for syncing # each attrset defines a group of repos for syncing
{ nxpkgs = { { nxpkgs = {
makefu = { branches = {
origin = { makefu = {
url = http://github.com/makefu/nixpkgs; origin = {
ref = "heads/dev" ; url = http://github.com/makefu/nixpkgs;
ref = "heads/dev" ;
};
mirror = {
url = "git@internal:nixpkgs-mirror" ;
ref = "heads/github-mirror-dev" ;
};
}; };
mirror = { lass = {
url = "git@internal:nixpkgs-mirror" ; origin = {
ref = "heads/github-mirror-dev" ; url = http://github.com/lass/nixpkgs;
};
mirror = {
url = "git@internal:nixpkgs-mirror" ;
};
}; };
}; };
lass = { latest = {
origin = { url = "git@internal:nixpkgs-mirror";
url = http://github.com/lass/nixpkgs; ref = "heads/master";
};
mirror = {
url = "git@internal:nixpkgs-mirror" ;
};
};
"@latest" = {
mirror = {
url = "git@internal:nixpkgs-mirror";
ref = "heads/master";
};
}; };
}; };
stockholm = { stockholm = {
lass = { branches = {
origin = { lass = {
url = http://cgit.prism.r/stockholm; origin = {
url = http://cgit.prism.r/stockholm;
};
mirror = {
url = "git@internal:stockholm-mirror" ;
};
}; };
mirror = { makefu = {
url = "git@internal:stockholm-mirror" ; origin = {
url = http://gum.krebsco.de/stockholm;
};
mirror = {
url = "git@internal:stockholm-mirror" ;
};
}; };
}; };
makefu = { latest = {
origin = { url = "git@internal:stockholm-mirror";
url = http://gum.krebsco.de/stockholm; ref = "heads/master";
};
mirror = {
url = "git@internal:stockholm-mirror" ;
};
};
"@latest" = {
mirror = {
url = "git@internal:stockholm-mirror";
ref = "heads/master";
};
}; };
}; };
}; };
@ -127,15 +154,16 @@ let
nameValuePair "repo-sync-${name}" { nameValuePair "repo-sync-${name}" {
description = "repo-sync timer"; description = "repo-sync timer";
wantedBy = [ "timers.target" ]; wantedBy = [ "timers.target" ];
timerConfig = repo.timerConfig;
timerConfig = cfg.timerConfig;
} }
) cfg.repos; ) cfg.repos;
systemd.services = mapAttrs' (name: repo: systemd.services = mapAttrs' (name: repo:
let let
repo-sync-config = pkgs.writeText "repo-sync-config-${name}.json" repo-sync-config = pkgs.writeJSON "repo-sync-config-${name}.json"
(builtins.toJSON repo); (repo.branches // optionalAttrs (repo.latest != null) {
"@latest".mirror = repo.latest;
});
in nameValuePair "repo-sync-${name}" { in nameValuePair "repo-sync-${name}" {
description = "repo-sync"; description = "repo-sync";
after = [ "network.target" "secret.service" ]; after = [ "network.target" "secret.service" ];