summaryrefslogtreecommitdiffstats
path: root/makefu
diff options
context:
space:
mode:
authormakefu <github@syntax-fehler.de>2015-12-15 18:46:25 +0100
committermakefu <github@syntax-fehler.de>2015-12-15 18:46:25 +0100
commit36b34fdebe5de5a705df78d5cf0221101bc3d610 (patch)
tree146b28d31c7890bd07237a266780e06b1d1bb59c /makefu
parent55ad05879b8ba97e369bfd72810028dd4622e356 (diff)
parent3371d54618aa017be77e2494c1cf82331152f3b7 (diff)
Merge branch 'master' of gum.krebsco.de:stockholm
Diffstat (limited to 'makefu')
-rw-r--r--makefu/1systems/vbob.nix12
-rw-r--r--makefu/2configs/Reaktor/full.nix18
-rw-r--r--makefu/2configs/git/cgit-retiolum.nix20
-rw-r--r--makefu/2configs/zsh-user.nix32
-rw-r--r--makefu/3modules/buildbot/master.nix179
5 files changed, 238 insertions, 23 deletions
diff --git a/makefu/1systems/vbob.nix b/makefu/1systems/vbob.nix
index 4d8e8ced1..b121a730a 100644
--- a/makefu/1systems/vbob.nix
+++ b/makefu/1systems/vbob.nix
@@ -1,7 +1,7 @@
#
#
#
-{ config, pkgs, ... }:
+{ lib, config, pkgs, ... }:
{
krebs.build.host = config.krebs.hosts.vbob;
@@ -12,13 +12,21 @@
../2configs/main-laptop.nix #< base-gui
# environment
+
../2configs/zsh-user.nix
../2configs/virtualization.nix
];
+
+ # allow vbob to deploy self
+ users.extraUsers = {
+ root = {
+ openssh.authorizedKeys.keys = [ config.krebs.users.makefu-vbob.pubkey ];
+ };
+ };
nixpkgs.config.packageOverrides = pkgs: { tinc = pkgs.tinc_pre; };
environment.systemPackages = with pkgs;[
get
- ];
+ ];
networking.firewall.allowedTCPPorts = [
25
diff --git a/makefu/2configs/Reaktor/full.nix b/makefu/2configs/Reaktor/full.nix
new file mode 100644
index 000000000..50620890f
--- /dev/null
+++ b/makefu/2configs/Reaktor/full.nix
@@ -0,0 +1,18 @@
+_:
+{
+ # implementation of the complete Reaktor bot
+ imports = [
+ #./stockholmLentil.nix
+ ./simpleExtend.nix
+ ./random-emoji.nix
+ ./titlebot.nix
+ ./shack-correct.nix
+ ./sed-plugin.nix
+ ];
+ krebs.Reaktor.nickname = "Reaktor|bot";
+ krebs.Reaktor.enable = true;
+
+ krebs.Reaktor.extraEnviron = {
+ REAKTOR_CHANNELS = "#krebs,#binaergewitter,#shackspace";
+ };
+}
diff --git a/makefu/2configs/git/cgit-retiolum.nix b/makefu/2configs/git/cgit-retiolum.nix
index 68fd976d6..35bb169cf 100644
--- a/makefu/2configs/git/cgit-retiolum.nix
+++ b/makefu/2configs/git/cgit-retiolum.nix
@@ -80,26 +80,6 @@ let
};
in {
- imports = [{
- krebs.users = {
- makefu-omo = {
- name = "makefu-omo" ;
- pubkey= with builtins; readFile ../../../krebs/Zpubkeys/makefu_omo.ssh.pub;
- };
- makefu-vbob = {
- name = "makefu-vbob" ;
- pubkey= with builtins; readFile ../../../krebs/Zpubkeys/makefu_vbob.ssh.pub;
- };
- makefu-tsp = {
- name = "makefu-tsp" ;
- pubkey= with builtins; readFile ../../../krebs/Zpubkeys/makefu_tsp.ssh.pub;
- };
- exco = {
- name = "exco";
- pubkey= with builtins; readFile ../../../krebs/Zpubkeys/exco.ssh.pub;
- };
- };
- }];
krebs.git = {
enable = true;
root-title = "public repositories";
diff --git a/makefu/2configs/zsh-user.nix b/makefu/2configs/zsh-user.nix
index 3089b706a..266ce256a 100644
--- a/makefu/2configs/zsh-user.nix
+++ b/makefu/2configs/zsh-user.nix
@@ -5,6 +5,36 @@ let
mainUser = config.krebs.build.user.name;
in
{
- programs.zsh.enable = true;
users.extraUsers.${mainUser}.shell = "/run/current-system/sw/bin/zsh";
+ programs.zsh= {
+ enable = true;
+ interactiveShellInit = ''
+ HISTSIZE=900001
+ HISTFILESIZE=$HISTSIZE
+ SAVEHIST=$HISTSIZE
+
+ setopt HIST_IGNORE_ALL_DUPS
+ setopt HIST_IGNORE_SPACE
+ setopt HIST_FIND_NO_DUPS
+ bindkey -e
+ # shift-tab
+ bindkey '^[[Z' reverse-menu-complete
+
+ autoload -U compinit && compinit
+ zstyle ':completion:*' menu select
+ '';
+
+ promptInit = ''
+ RPROMPT=""
+ autoload colors && colors
+ case $UID in
+ 0) PROMPT="%{$fg[red]%}%~%{$reset_color%} " ;;
+ 9001) PROMPT="%{$fg[green]%}%~%{$reset_color%} " ;;
+ *) PROMPT="%{$fg[yellow]%}%n %{$fg[green]%}%~%{$reset_color%} " ;;
+ esac
+ if test -n "$SSH_CLIENT"; then
+ PROMPT="%{$fg[magenta]%}%m $PROMPT"
+ fi
+ '';
+ };
}
diff --git a/makefu/3modules/buildbot/master.nix b/makefu/3modules/buildbot/master.nix
new file mode 100644
index 000000000..310b8460d
--- /dev/null
+++ b/makefu/3modules/buildbot/master.nix
@@ -0,0 +1,179 @@
+{ config, pkgs, lib, ... }:
+
+with lib;
+let
+ buildbot = pkgs.buildbot;
+ buildbot-master-config = pkgs.writeText "buildbot-master.cfg" ''
+ # -*- python -*-
+ from buildbot.plugins import *
+
+ c = BuildmasterConfig = {}
+
+ c['slaves'] = []
+ # TODO: template potential buildslaves
+ # TODO: set password?
+ for i in [ 'testslave' ]:
+ c['slaves'].append(buildslave.BuildSlave(i, "krebspass"))
+
+ c['protocols'] = {'pb': {'port': 9989}}
+
+ ####### Build Inputs
+ stockholm_repo = 'http://cgit.gum/stockholm'
+ c['change_source'] = []
+ c['change_source'].append(changes.GitPoller(
+ stockholm_repo,
+ workdir='stockholm-poller', branch='master',
+ project='stockholm',
+ pollinterval=300))
+
+ ####### Build Scheduler
+ # TODO: configure scheduler
+ important_files = util.ChangeFilter(
+ project_re="^((krebs|share)/.*|Makefile|default.nix)",
+ branch='master')
+ c['schedulers'] = []
+ c['schedulers'].append(schedulers.SingleBranchScheduler(
+ name="all-important-files",
+ change_filter=important_files,
+ # 3 minutes stable tree
+ treeStableTimer=3*60,
+ builderNames=["runtests"]))
+ c['schedulers'].append(schedulers.ForceScheduler(
+ name="force",
+ builderNames=["runtests"]))
+ ###### The actual build
+ factory = util.BuildFactory()
+ factory.addStep(steps.Git(repourl=stockholm_repo, mode='incremental'))
+
+ deps = [ "gnumake", "jq" ]
+ factory.addStep(steps.ShellCommand(command=["nix-shell", "-p" ] + deps ))
+ factory.addStep(steps.ShellCommand(env={"LOGNAME": "shared"},
+ command=["make", "get=krebs.deploy",
+ "system=test-centos7"]))
+
+ # TODO: different Builders?
+ c['builders'] = []
+ c['builders'].append(
+ util.BuilderConfig(name="runtests",
+ # TODO: only some slaves being used in builder?
+ slavenames=c['slaves'],
+ factory=factory))
+
+ ####### Status of Builds
+ c['status'] = []
+
+ from buildbot.status import html
+ from buildbot.status.web import authz, auth
+ # TODO: configure if http is wanted
+ authz_cfg=authz.Authz(
+ # TODO: configure user/pw
+ auth=auth.BasicAuth([("krebs","bob")]),
+ gracefulShutdown = False,
+ forceBuild = 'auth',
+ forceAllBuilds = 'auth',
+ pingBuilder = False,
+ stopBuild = False,
+ stopAllBuilds = False,
+ cancelPendingBuild = False,
+ )
+ # TODO: configure nginx
+ c['status'].append(html.WebStatus(http_port=8010, authz=authz_cfg))
+
+ from buildbot.status import words
+ # TODO: configure IRC Bot
+ irc = words.IRC("irc.freenode.net", "krebsbuild",
+ channels=["krebs"],
+ notify_events={
+ 'sucess': 1,
+ 'failure': 1,
+ 'exception': 1,
+ 'successToFailure': 1,
+ 'failureToSuccess': 1,
+ },allowForce=True)
+ c['status'].append(irc)
+
+ ####### PROJECT IDENTITY
+ c['title'] = "Stockholm"
+ c['titleURL'] = "http://krebsco.de"
+
+ c['buildbotURL'] = "http://buildbot.krebsco.de/"
+
+ ####### DB URL
+ c['db'] = {
+ 'db_url' : "sqlite:///state.sqlite",
+ }
+ ${cfg.extraConfig}
+ '';
+
+ cfg = config.makefu.buildbot.master;
+
+ api = {
+ enable = mkEnableOption "Buildbot Master";
+
+ workDir = mkOption {
+ default = "/var/lib/buildbot/master";
+ type = types.str;
+ description = ''
+ Path to build bot master directory.
+ Will be created on startup.
+ '';
+ };
+
+ extraConfig = mkOption {
+ default = "";
+ type = types.lines;
+ description = ''
+ extra config appended to the generated master.cfg
+ '';
+ };
+ };
+
+ imp = {
+
+ users.extraUsers.buildbotMaster = {
+ uid = 672626386; #genid buildbotMaster
+ description = "Buildbot Master";
+ home = cfg.workDir;
+ createHome = false;
+ };
+
+ users.extraGroups.buildbotMaster = {
+ gid = 672626386;
+ };
+
+ systemd.services.buildbotMaster = {
+ description = "Buildbot Master";
+ after = [ "network.target" ];
+ wantedBy = [ "multi-user.target" ];
+ serviceConfig = {
+ PermissionsStartOnly = true;
+ # TODO: maybe also prepare buildbot.tac?
+ ExecStartPre = pkgs.writeScript "buildbot-master-init" ''
+ #!/bin/sh
+ set -efux
+ workdir=${lib.shell.escape cfg.workDir}
+ if [ ! -e $workdir ];then
+ mkdir -p $workdir
+ ${buildbot}/bin/buildbot create-master -r -l 10 -f $workdir
+ chown buildbotMaster:buildbotMaster $workdir
+ fi
+ # always override the master.cfg
+ cp ${toString buildbot-master-config} "$workdir/master.cfg"
+ # sanity
+ ${buildbot}/bin/buildbot checkconfig $workdir
+ # upgrade
+ ${buildbot}/bin/buildbot upgrade-master $workdir
+ '';
+ ExecStart = "${buildbot}/bin/buildbot ${lib.shell.escape cfg.workDir}";
+ PrivateTmp = "true";
+ User = "buildbotMaster";
+ Restart = "always";
+ RestartSec = "10";
+ };
+ };
+ };
+in
+{
+ options.makefu.buildbot.master = api;
+ config = mkIf cfg.enable imp;
+}