Merge branch 'master' of gum.krebsco.de:stockholm
This commit is contained in:
commit
bb096de06f
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
{ config, pkgs, ... }:
|
{ lib, config, pkgs, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
krebs.build.host = config.krebs.hosts.vbob;
|
krebs.build.host = config.krebs.hosts.vbob;
|
||||||
|
@ -12,13 +12,21 @@
|
||||||
../2configs/main-laptop.nix #< base-gui
|
../2configs/main-laptop.nix #< base-gui
|
||||||
|
|
||||||
# environment
|
# environment
|
||||||
|
|
||||||
../2configs/zsh-user.nix
|
../2configs/zsh-user.nix
|
||||||
../2configs/virtualization.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; };
|
nixpkgs.config.packageOverrides = pkgs: { tinc = pkgs.tinc_pre; };
|
||||||
environment.systemPackages = with pkgs;[
|
environment.systemPackages = with pkgs;[
|
||||||
get
|
get
|
||||||
];
|
];
|
||||||
|
|
||||||
networking.firewall.allowedTCPPorts = [
|
networking.firewall.allowedTCPPorts = [
|
||||||
25
|
25
|
||||||
|
|
18
2configs/Reaktor/full.nix
Normal file
18
2configs/Reaktor/full.nix
Normal file
|
@ -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";
|
||||||
|
};
|
||||||
|
}
|
|
@ -80,26 +80,6 @@ let
|
||||||
};
|
};
|
||||||
|
|
||||||
in {
|
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 = {
|
krebs.git = {
|
||||||
enable = true;
|
enable = true;
|
||||||
root-title = "public repositories";
|
root-title = "public repositories";
|
||||||
|
|
|
@ -5,6 +5,36 @@ let
|
||||||
mainUser = config.krebs.build.user.name;
|
mainUser = config.krebs.build.user.name;
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
programs.zsh.enable = true;
|
|
||||||
users.extraUsers.${mainUser}.shell = "/run/current-system/sw/bin/zsh";
|
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
|
||||||
|
'';
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
179
3modules/buildbot/master.nix
Normal file
179
3modules/buildbot/master.nix
Normal file
|
@ -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;
|
||||||
|
}
|
Loading…
Reference in a new issue