summaryrefslogtreecommitdiffstats
path: root/krebs/3modules/repo-sync.nix
diff options
context:
space:
mode:
authorlassulus <lass@lassul.us>2017-03-08 00:47:43 +0100
committerlassulus <lass@lassul.us>2017-03-08 00:47:43 +0100
commit8464ebbf6954a5940b9dce8927639e128434b9d7 (patch)
tree2518b8b9cbe3b1f22f29c2e4cb5dd3f192aff930 /krebs/3modules/repo-sync.nix
parentf66d7f4d4720d1166520eae6a552245bc92e6a2d (diff)
k 3 repo-sync: better types, add repo timer
Diffstat (limited to 'krebs/3modules/repo-sync.nix')
-rw-r--r--krebs/3modules/repo-sync.nix114
1 files changed, 71 insertions, 43 deletions
diff --git a/krebs/3modules/repo-sync.nix b/krebs/3modules/repo-sync.nix
index 7705635f..0211b31b 100644
--- a/krebs/3modules/repo-sync.nix
+++ b/krebs/3modules/repo-sync.nix
@@ -12,7 +12,34 @@ let
api = {
enable = mkEnableOption "repo-sync";
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 ''
# see `repo-sync --help`
# `ref` provides sane defaults and can be omitted
@@ -23,53 +50,53 @@ let
# each attrset defines a group of repos for syncing
{ nxpkgs = {
- makefu = {
- origin = {
- url = http://github.com/makefu/nixpkgs;
- ref = "heads/dev" ;
+ branches = {
+ makefu = {
+ origin = {
+ url = http://github.com/makefu/nixpkgs;
+ ref = "heads/dev" ;
+ };
+ mirror = {
+ url = "git@internal:nixpkgs-mirror" ;
+ ref = "heads/github-mirror-dev" ;
+ };
};
- mirror = {
- url = "git@internal:nixpkgs-mirror" ;
- ref = "heads/github-mirror-dev" ;
+ lass = {
+ origin = {
+ url = http://github.com/lass/nixpkgs;
+ };
+ mirror = {
+ url = "git@internal:nixpkgs-mirror" ;
+ };
};
};
- lass = {
- origin = {
- url = http://github.com/lass/nixpkgs;
- };
- mirror = {
- url = "git@internal:nixpkgs-mirror" ;
- };
- };
- "@latest" = {
- mirror = {
- url = "git@internal:nixpkgs-mirror";
- ref = "heads/master";
- };
+ latest = {
+ url = "git@internal:nixpkgs-mirror";
+ ref = "heads/master";
};
};
stockholm = {
- lass = {
- origin = {
- url = http://cgit.prism.r/stockholm;
+ branches = {
+ lass = {
+ origin = {
+ url = http://cgit.prism.r/stockholm;
+ };
+ mirror = {
+ url = "git@internal:stockholm-mirror" ;
+ };
};
- mirror = {
- url = "git@internal:stockholm-mirror" ;
+ makefu = {
+ origin = {
+ url = http://gum.krebsco.de/stockholm;
+ };
+ mirror = {
+ url = "git@internal:stockholm-mirror" ;
+ };
};
};
- makefu = {
- origin = {
- url = http://gum.krebsco.de/stockholm;
- };
- mirror = {
- url = "git@internal:stockholm-mirror" ;
- };
- };
- "@latest" = {
- mirror = {
- url = "git@internal:stockholm-mirror";
- ref = "heads/master";
- };
+ latest = {
+ url = "git@internal:stockholm-mirror";
+ ref = "heads/master";
};
};
};
@@ -127,15 +154,16 @@ let
nameValuePair "repo-sync-${name}" {
description = "repo-sync timer";
wantedBy = [ "timers.target" ];
-
- timerConfig = cfg.timerConfig;
+ timerConfig = repo.timerConfig;
}
) cfg.repos;
systemd.services = mapAttrs' (name: repo:
let
- repo-sync-config = pkgs.writeText "repo-sync-config-${name}.json"
- (builtins.toJSON repo);
+ repo-sync-config = pkgs.writeJSON "repo-sync-config-${name}.json"
+ (repo.branches // optionalAttrs (repo.latest != null) {
+ "@latest".mirror = repo.latest;
+ });
in nameValuePair "repo-sync-${name}" {
description = "repo-sync";
after = [ "network.target" "secret.service" ];