diff options
Diffstat (limited to 'krebs')
| -rw-r--r-- | krebs/2configs/buildbot-stockholm.nix | 44 | ||||
| -rw-r--r-- | krebs/2configs/reaktor-krebs.nix | 1 | ||||
| -rw-r--r-- | krebs/2configs/reaktor-retiolum.nix | 1 | ||||
| -rw-r--r-- | krebs/2configs/repo-sync.nix | 11 | ||||
| -rw-r--r-- | krebs/3modules/ci.nix | 162 | ||||
| -rw-r--r-- | krebs/3modules/default.nix | 2 | ||||
| -rw-r--r-- | krebs/3modules/konsens.nix | 2 | ||||
| -rw-r--r-- | krebs/3modules/mv/default.nix | 40 | ||||
| -rw-r--r-- | krebs/5pkgs/simple/Reaktor/plugins.nix | 9 | ||||
| -rw-r--r-- | krebs/5pkgs/simple/buildbot-classic/default.nix | 4 | ||||
| -rw-r--r-- | krebs/5pkgs/simple/git-hooks/default.nix | 15 | ||||
| -rw-r--r-- | krebs/5pkgs/simple/krebspage/default.nix | 6 | ||||
| -rw-r--r-- | krebs/krops.nix | 11 | 
13 files changed, 234 insertions, 74 deletions
| diff --git a/krebs/2configs/buildbot-stockholm.nix b/krebs/2configs/buildbot-stockholm.nix index 13d4c6729..0aa9288ec 100644 --- a/krebs/2configs/buildbot-stockholm.nix +++ b/krebs/2configs/buildbot-stockholm.nix @@ -4,11 +4,34 @@ let    hostname = config.networking.hostName; +  sourceRepos = [ +    "http://cgit.enklave.r/stockholm" +    "http://cgit.gum.r/stockholm" +    "http://cgit.hotdog.r/stockholm" +    "http://cgit.ni.r/stockholm" +    "http://cgit.prism.r/stockholm" +  ]; + +  # usage: build USER HOST +  # This executable is meant to be run with <stockholm> as working directory. +  # USER is expected to be a subdirectory of the working directory.    build = pkgs.writeDash "build" '' -    set -eu -    export USER="$1" -    export SYSTEM="$2" -    $(nix-build $USER/krops.nix --no-out-link --argstr name "$SYSTEM" --argstr target "$HOME/stockholm-build" -A ci) +    set -efu + +    user=$1 +    host=$2 + +    result=$(nix-build \ +        --argstr name "$host" \ +        --argstr target "$HOME"/stockholm-build \ +        --attr test \ +        --no-build-output \ +        --no-out-link \ +        --show-trace \ +        "$user"/krops.nix \ +    ) + +    exec "$result"    ''; @@ -31,17 +54,16 @@ in      slaves = {        testslave = "lasspass";      }; -    change_source.stockholm = '' -      stockholm_repo = 'http://cgit.hotdog.r/stockholm' +    change_source.stockholm = concatMapStrings (repo: ''        cs.append(            changes.GitPoller( -              stockholm_repo, -              workdir='stockholm-poller', branches=True, +              "${repo}", +              workdir='stockholm${elemAt(splitString "." repo) 1}', branches=True,                project='stockholm',                pollinterval=10            )        ) -    ''; +    '') sourceRepos;      scheduler = {        auto-scheduler = ''          sched.append( @@ -69,7 +91,7 @@ in      builder_pre = ''        # prepare grab_repo step for stockholm        grab_repo = steps.Git( -          repourl=stockholm_repo, +          repourl=util.Property('repository', 'http://cgit.hotdog.r/stockholm'),            mode='full',            submodules=True,        ) @@ -176,6 +198,6 @@ in      masterhost = "localhost";      username = "testslave";      password = "lasspass"; -    packages = with pkgs; [ gnumake jq nix populate ]; +    packages = with pkgs; [ gnumake jq nix populate gnutar lzma gzip ];    };  } diff --git a/krebs/2configs/reaktor-krebs.nix b/krebs/2configs/reaktor-krebs.nix index 2e63f1385..ba3715161 100644 --- a/krebs/2configs/reaktor-krebs.nix +++ b/krebs/2configs/reaktor-krebs.nix @@ -15,6 +15,7 @@ with import <stockholm/lib>;        sed-plugin        task-add        task-delete +      task-done        task-list      ] ++        (attrValues (todo "agenda")) diff --git a/krebs/2configs/reaktor-retiolum.nix b/krebs/2configs/reaktor-retiolum.nix index d5f1851e3..90573ca1c 100644 --- a/krebs/2configs/reaktor-retiolum.nix +++ b/krebs/2configs/reaktor-retiolum.nix @@ -12,6 +12,7 @@ with import <stockholm/lib>;        sed-plugin        task-add        task-delete +      task-done        task-list      ] ++        (attrValues (todo "agenda")) diff --git a/krebs/2configs/repo-sync.nix b/krebs/2configs/repo-sync.nix index 813dc154b..392e6bed3 100644 --- a/krebs/2configs/repo-sync.nix +++ b/krebs/2configs/repo-sync.nix @@ -20,11 +20,15 @@ let        cgit.section = section;        hooks = mkDefault {          post-receive = pkgs.git-hooks.irc-announce { -          nick = config.networking.hostName; -          verbose = false;            channel = "#xxx"; +          refs = [ +            "refs/heads/master" +            "refs/heads/newest" +            "refs/tags/*" +          ]; +          nick = config.networking.hostName;            server = "irc.r"; -          branches = [ "master" "newest" ]; +          verbose = false;          };        };      }; @@ -139,6 +143,7 @@ in {      (sync-retiolum { name = "cholerab"; desc = "krebs thesauron & enterprise-patterns"; section = "documentation"; }) +    (sync-retiolum { name = "buildbot-classic"; desc = "fork of buildbot"; section = "software"; })      (sync-retiolum { name = "disko"; desc = "take a description of your disk layout and produce a format script"; section = "software"; })      (sync-retiolum { name = "news"; desc = "take a rss feed and a timeout and print it to stdout"; section = "software"; })      (sync-retiolum { name = "krops"; desc = "krebs ops"; section = "software"; }) diff --git a/krebs/3modules/ci.nix b/krebs/3modules/ci.nix new file mode 100644 index 000000000..cf82401d3 --- /dev/null +++ b/krebs/3modules/ci.nix @@ -0,0 +1,162 @@ +{ config, lib, pkgs, ... }: + +with import <stockholm/lib>; + +let +  cfg = config.krebs.ci; + +  out = { +    options.krebs.ci = api; +    config = lib.mkIf cfg.enable imp; +  }; + +  api = { +    enable = mkEnableOption "Enable krebs ci service"; +    repos = mkOption { +      type = types.attrsOf (types.submodule ({ config, ...}: { +        options = { +          urls = mkOption { +            type = types.listOf types.str; +            default = [ "git@localhost:${config._module.args.name}" ]; +          }; +        }; +      })); +    }; +  }; + +  hostname = config.networking.hostName; +  getJobs = pkgs.writeDash "get_jobs" '' +    nix-build --no-out-link ./ci.nix 2>&1 > /dev/null +    nix-instantiate --eval --strict --json ./ci.nix +  ''; + +  imp = { +    krebs.buildbot.master = { +      slaves = { +        testslave = "lasspass"; +      }; + +      change_source = mapAttrs' (name: repo: +        nameValuePair name (concatMapStrings (url: '' +          cs.append( +              changes.GitPoller( +                  "${url}", +                  workdir='${name}-${elemAt(splitString "." url) 1}', branches=True, +                  project='${name}', +                  pollinterval=10 +              ) +          ) +        '') repo.urls) +      ) cfg.repos; + +      scheduler = mapAttrs' (name: repo: +        nameValuePair name '' +          sched.append( +              schedulers.SingleBranchScheduler( +                  change_filter=util.ChangeFilter(branch_re=".*"), +                  treeStableTimer=60, +                  name="build-all-branches", +                  builderNames=[ +                      "${name}", +                  ] +              ) +          ) +          sched.append( +              schedulers.ForceScheduler( +                  name="${name}", +                  builderNames=[ +                      "${name}", +                  ] +              ) +          ) +        '' +      ) cfg.repos; +      builder_pre = '' +        from buildbot import interfaces +        from buildbot.steps.shell import ShellCommand + +        class StepToStartMoreSteps(ShellCommand): +            def __init__(self, **kwargs): +                ShellCommand.__init__(self, **kwargs) + +            def addBuildSteps(self, steps_factories): +                for sf in steps_factories: +                    step = interfaces.IBuildStepFactory(sf).buildStep() +                    step.setBuild(self.build) +                    step.setBuildSlave(self.build.slavebuilder.slave) +                    step_status = self.build.build_status.addStepWithName(step.name) +                    step.setStepStatus(step_status) +                    self.build.steps.append(step) + +            def start(self): +                props = self.build.getProperties() +                new_steps = json.loads(props.getProperty('steps_json')) +                for new_step in new_steps: +                    self.addBuildSteps([steps.ShellCommand( +                        name=str(new_step), +                        command=[ +                          new_steps[new_step] +                        ], +                        timeout=90001, +                        workdir='build', # TODO figure out why we need this? +                    )]) + +                ShellCommand.start(self) + +      ''; + +      builder = mapAttrs' (name: repo: +        nameValuePair name '' +          f_${name} = util.BuildFactory() +          f_${name}.addStep(steps.Git( +              repourl=util.Property('repository', '${head repo.urls}'), +              mode='full', +              submodules=True, +          )) + +          f_${name}.addStep(steps.SetPropertyFromCommand( +              env={ +                "NIX_REMOTE": "daemon", +                "NIX_PATH": "secrets=/var/src/stockholm/null:/var/src", +              }, +              name="get_steps", +              command=["${getJobs}"], +              property="steps_json" +          )) +          f_${name}.addStep(StepToStartMoreSteps(command=["echo"])) # TODO remove dummy command from here + +          bu.append( +              util.BuilderConfig( +                  name="${name}", +                  slavenames=slavenames, +                  factory=f_${name} +              ) +          ) +        '' +      ) cfg.repos; + +      enable = true; +      web.enable = true; +      irc = { +        enable = true; +        nick = "build|${hostname}"; +        server = "irc.r"; +        channels = [ "noise" ]; +        allowForce = true; +      }; +      extraConfig = '' +        c['buildbotURL'] = "http://build.${hostname}.r/" +      ''; +    }; + +    krebs.buildbot.slave = { +      enable = true; +      masterhost = "localhost"; +      username = "testslave"; +      password = "lasspass"; +      packages = with pkgs; [ gnumake jq nix populate gnutar lzma gzip ]; +    }; +  }; + +in out + diff --git a/krebs/3modules/default.nix b/krebs/3modules/default.nix index 833349769..82ae3b02e 100644 --- a/krebs/3modules/default.nix +++ b/krebs/3modules/default.nix @@ -13,6 +13,7 @@ let        ./buildbot/master.nix        ./buildbot/slave.nix        ./build.nix +      ./ci.nix        ./current.nix        ./exim.nix        ./exim-retiolum.nix @@ -109,7 +110,6 @@ let      { krebs = import ./krebs  { inherit config; }; }      { krebs = import ./lass   { inherit config; }; }      { krebs = import ./makefu { inherit config; }; } -    { krebs = import ./mv     { inherit config; }; }      { krebs = import ./nin    { inherit config; }; }      { krebs = import ./tv     { inherit config; }; }      { diff --git a/krebs/3modules/konsens.nix b/krebs/3modules/konsens.nix index 47316d5d6..74895a971 100644 --- a/krebs/3modules/konsens.nix +++ b/krebs/3modules/konsens.nix @@ -68,7 +68,7 @@ let              fi              cd ${name}              git fetch origin -            git push origin $(git merge-base ${concatMapStringsSep " " (branch: "origin/${branch}") repo.branchesToCheck}):refs/heads/master +            git push origin $(git merge-base --octopus ${concatMapStringsSep " " (branch: "origin/${branch}") repo.branchesToCheck}):refs/heads/master            '';            WorkingDirectory = /var/lib/konsens;            User = "konsens"; diff --git a/krebs/3modules/mv/default.nix b/krebs/3modules/mv/default.nix deleted file mode 100644 index c8d138a44..000000000 --- a/krebs/3modules/mv/default.nix +++ /dev/null @@ -1,40 +0,0 @@ -{ config, ... }: - -with import <stockholm/lib>; - -{ -  hosts = mapAttrs (_: setAttr "owner" config.krebs.users.mv) { -    stro = { -      ci = true; -      cores = 4; -      nets = { -        retiolum = { -          ip4.addr = "10.243.111.111"; -          ip6.addr = "42:0:0:0:0:0:111:111"; -          aliases = [ -            "stro.r" -            "cgit.stro.r" -          ]; -          tinc.pubkey = '' -            -----BEGIN RSA PUBLIC KEY----- -            MIIBCgKCAQEA0vIzLyoetOyi3R7qOh3gjSvUVjPEdqCvd0NEevDCIhhFy0nIbZ/b -            vnuk3EUeTb6e384J8fKB4agig0JeR3JjtDvtjy5g9Cdy2nrU71w8wqU0etmv2PTb -            FjbCFfeBXn0N3U7gXwjZGCvjAXa1a4jGb4R2iYBYGG3aY4reCN8B8Ah81h+S0oLg -            ZJJfaBmWM5vNRFEI5X4CLaVnwtsoZuXIjYStgNn/9Mg/Y6NQS0H0H+HFeyhigAqG -            oYGqNar/2QqPU176V/FwrD30F3qJV1uyzuPta7hmdfOxqYjZ/jqdPSRYtlunYYcq -            XbH5oYmzO9NEeVWzjdac/DiV2OP8HufoYwIDAQAB -            -----END RSA PUBLIC KEY----- -          ''; -        }; -      }; -      ssh.privkey.path = <secrets/ssh.ed25519>; -      ssh.pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIM+7Qa51l0NSkBiaK2s8vQEoeObV3UPZyEzMxfUK/ZAO root@stro"; -    }; -  }; -  users = { -    mv = { -      mail = "mv@stro.r"; -      pubkey = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDfMqkfXsGRaXJ86Pi5svAx4508ij5kc4cMLGwr1CLvFI5G7EHggiHMZYooibmkZimBF1PvLM1lOdoptJ4nSmc3UGuQaeV9BpZ1dNXexc8wOmVPKzAHYZG/2upcV/xVZQ9lk3UOmDym6fDUXThMx4nXdhOjScgWpKp7+0N3JRCf2UHusZjWFGlhE9l4irLFHCwlZeBQ16DNF4fc03vsfZBB1ZrGGZlaVpkcY+FTC3sm8R0iF5QGaq8PgltJoCNnp3L1g3Yn7Elva7kCHjZfJC1pu5icV8vZMNptPn1b10gPsNwb302FCjvZohzRcMo39L2gwdNWQmflYfYk+NPY9EgqkLtSvZJywYu8oTVLeYBAp0ZGzJR4+uIH9at/WQF499HFMxpF4uwYiQweUcPiHrrOqI5zLQoOvqh9Jv0UMsnFynNrszbCTgwzeW8bcvv8ILcjE9of8GXRCrlIMvt7Z9q8xrb5j1RhKscvusyyNOAL+HMZl6jgSxUBDtzRqPZ62QHJsBEBdRXdJRQLGeHNW9kGPrh/tiKGucuT3/HZC+2Rcemxt3RVT60+lHkghrMLi0/VOWBUKL9J94UK5xIE4Gb3RTW9DcNK53U4ql+N4ORSSEuhk3Rqzx3Bzv7AXpLKQCFKdB7tjxzGN7sCQM3PBUUo6Tk0VG2cIKOjzTRnDJlb7Q== mv@stro"; -    }; -  }; -} diff --git a/krebs/5pkgs/simple/Reaktor/plugins.nix b/krebs/5pkgs/simple/Reaktor/plugins.nix index c6e601475..700f9b40d 100644 --- a/krebs/5pkgs/simple/Reaktor/plugins.nix +++ b/krebs/5pkgs/simple/Reaktor/plugins.nix @@ -160,7 +160,7 @@ rec {    task-list = buildSimpleReaktorPlugin "task-list" {      pattern = "^task-list";      script = pkgs.writeDash "task-list" '' -        ${pkgs.taskwarrior}/bin/task rc:${taskrcFile} list +        ${pkgs.taskwarrior}/bin/task rc:${taskrcFile} minimal        '';    }; @@ -171,6 +171,13 @@ rec {        '';    }; +  task-done = buildSimpleReaktorPlugin "task-done" { +    pattern = "^task-done: (?P<args>.*)$$"; +    script = pkgs.writeDash "task-done" '' +        ${pkgs.taskwarrior}/bin/task rc:${taskrcFile} done "$*" +      ''; +  }; +    todo = name: {      add = buildSimpleReaktorPlugin "${name}-add" {        pattern = "^${name}-add: (?P<args>.*)$$"; diff --git a/krebs/5pkgs/simple/buildbot-classic/default.nix b/krebs/5pkgs/simple/buildbot-classic/default.nix index e6bafbd25..4fae6256d 100644 --- a/krebs/5pkgs/simple/buildbot-classic/default.nix +++ b/krebs/5pkgs/simple/buildbot-classic/default.nix @@ -2,7 +2,7 @@  python2Packages.buildPythonApplication rec {    name = "buildbot-classic-${version}"; -  version = "0.8.16"; +  version = "0.8.17";    namePrefix = "";    patches = []; @@ -10,7 +10,7 @@ python2Packages.buildPythonApplication rec {      owner = "krebs";      repo = "buildbot-classic";      rev = version; -    sha256 = "0g686n6m0cjfyympl0ksansllx503gby3hx9gmc8hiyx6x5fkjha"; +    sha256 = "0yn0n37rs2bhz9q0simnvyzz5sfrpqhbdm6pdj6qk7sab4y6xbq8";    };    postUnpack = "sourceRoot=\${sourceRoot}/master"; diff --git a/krebs/5pkgs/simple/git-hooks/default.nix b/krebs/5pkgs/simple/git-hooks/default.nix index 1930c7f14..0a2c84410 100644 --- a/krebs/5pkgs/simple/git-hooks/default.nix +++ b/krebs/5pkgs/simple/git-hooks/default.nix @@ -6,11 +6,11 @@ with import <stockholm/lib>;    # TODO irc-announce should return a derivation    #      but it cannot because krebs.git.repos.*.hooks :: attrsOf str    irc-announce = -  { branches ? [] -  , cgit_endpoint ? "http://cgit.${nick}.r" +  { cgit_endpoint ? "http://cgit.${nick}.r"    , channel    , nick    , port ? 6667 +  , refs ? []    , server    , verbose ? false    }: /* sh */ '' @@ -57,14 +57,15 @@ with import <stockholm/lib>;          receive_mode=non-fast-forward        fi -      h=$(echo $ref | sed 's:^refs/heads/::') - -      ${optionalString (branches != []) '' -        if ! (echo "$h" | grep -qE "${concatStringsSep "|" branches}"); then -          echo "we are not serving this branch: $h" +      ${optionalString (refs != []) '' +        if ! { echo "$ref" | grep -qE "${concatStringsSep "|" refs}"; }; then +          echo "we are not announcing this ref: $h"            exit 0          fi        ''} + +      h=$(echo $ref | sed 's:^refs/heads/::') +        # empty_tree=$(git hash-object -t tree /dev/null)        empty_tree=4b825dc6 diff --git a/krebs/5pkgs/simple/krebspage/default.nix b/krebs/5pkgs/simple/krebspage/default.nix new file mode 100644 index 000000000..f9a446f43 --- /dev/null +++ b/krebs/5pkgs/simple/krebspage/default.nix @@ -0,0 +1,6 @@ +{ fetchgit }: +fetchgit { +  url = "https://cgit.lassul.us/krebspage"; +  rev = "8711780cef004e19a273a5149677869751cd06dc"; +  sha256 = "0131vqrkcw140d7j94bvajkhlwi99kpikb8sy2bi1hgh8ziqplsm"; +} diff --git a/krebs/krops.nix b/krebs/krops.nix index c71e60571..5378d6fb0 100644 --- a/krebs/krops.nix +++ b/krebs/krops.nix @@ -55,14 +55,9 @@      target = "root@${name}/var/src";    }; -  # usage: $(nix-build --no-out-link --argstr name HOSTNAME -A test) -  test = pkgs.krops.writeTest "${name}-test" { +  # usage: $(nix-build --no-out-link --argstr name HOSTNAME --argstr target PATH -A test) +  test = { target }: pkgs.krops.writeTest "${name}-test" { +    inherit target;      source = source { test = true; }; -    target = "${lib.getEnv "HOME"}/tmp/${name}-krops-test-src"; -  }; - -  ci = pkgs.krops.writeTest "${name}-test" { -    source = source { test = true; }; -    target = "${lib.getEnv "HOME"}/stockholm-build";    };  } | 
