- Table of contents
- BuildBot Config
Old instructions, needs to be updated
BuildBot Config¶
Master¶
Installation¶
adduser --home /var/lib/buildbot --disabled-password --disabled-login --gecos "Buildbot user" buildbot apt-get install -y python3-venv build-essential python3-dev libssl-dev libffi-dev libmariadb-dev-compat mercurial su - buildbot python3 -m venv sandbox source sandbox/bin/activate pip install --upgrade pip pip install 'buildbot[bundle]' mysqlclient exit su - buildbot -c '(source sandbox/bin/activate; buildbot create-master master)'
Developers try jobs¶
addgroup developers mkdir -p /var/lib/buildbot/jobdir/{new,cur,tmp} chown -R buildbot.developers /var/lib/buildbot/jobdir chmod -R g+rwx,o-rwx /var/lib/buildbot/jobdir adduser ${UN} developers
MySQL database initialization¶
echo "DROP DATABASE IF EXISTS ${BUILDBOT_DB_NAME};" | mysql echo "DROP USER IF EXISTS '${BUILDBOT_DB_USER}'@'localhost';" | mysql echo "CREATE DATABASE ${BUILDBOT_DB_NAME};" | mysql echo "CREATE USER IF NOT EXISTS '${BUILDBOT_DB_USER}'@'localhost' IDENTIFIED BY '${BUILDBOT_DB_PASS}';" | mysql echo "GRANT ALL ON ${BUILDBOT_DB_NAME}.* TO '${BUILDBOT_DB_USER}'@'localhost';" | mysql echo "FLUSH PRIVILEGES;" | mysql su - buildbot -c '(source sandbox/bin/activate; buildbot upgrade-master master)' su - buildbot -c '(source sandbox/bin/activate; buildbot checkconfig master)' su - buildbot -c '(source sandbox/bin/activate; buildbot restart master)'
SystemD script¶
cat << EOF > /etc/systemd/system/buildbot-master.service [Unit] Description=BuildBot master service After=network.target [Service] User=buildbot Group=buildbot WorkingDirectory=/var/lib/buildbot/ ExecStart=/var/lib/buildbot/sandbox/bin/buildbot start --nodaemon master ExecStop=/var/lib/buildbot/sandbox/bin/buildbot stop master ExecReload=/var/lib/buildbot/sandbox/bin/buildbot reconfig master [Install] WantedBy=multi-user.target EOF systemctl daemon-reload systemctl enable buildbot-master
Basic configuration¶
cat << EOF > /var/lib/buildbot/master/master.cfg from buildbot.plugins import * c = BuildmasterConfig = {} c['protocols'] = {'pb': {'port': 9989}} c['workers'] = [ worker.Worker("bb-src", "pass!"), worker.Worker("bb-lin", "pass!"), worker.Worker("bb-deb", "pass!"), worker.Worker("bb-mingw", "pass!"), worker.Worker("macos-monterey", "pass!"), ] c['change_source'] = [] cs_mkernel = changes.HgPoller(repourl='/srv/hg/mkernel', workdir='mkernel', pollInterval=30, branch='') #cs_mkernel=changes.HgPoller(repourl='http://hg.cerbelle.net/hg/mkernel', workdir='mkernel', pollInterval=30, branch='') c['change_source'].append(cs_mkernel) c['projects'] = [ util.Project(name="mkernel", description="Micro_Kernel applicationd"), ] c['builders'] = [] c['schedulers'] = [] c['services'] = [] c['title'] = "Buildbot Cerbelle" c['titleURL'] = "https://redmine.cerbelle.net/" c['buildbotURL'] = "https://buildbot.cerbelle.net/" c['www'] = dict(port="tcp:8010:interface=127.0.0.1", plugins=dict(waterfall_view={}, console_view={}, grid_view={})) c['db'] = { 'db_url' : "mysql://${BUILDBOT_DB_USER}:${BUILDBOT_DB_PASS}@localhost/${BUILDBOT_DB_NAME}?max_idle=300" } EOF
BuildBot source package¶
To build the source package and test it
Dependencies¶
apt-get install -y mercurial autogen autoconf autopoint libtool pkg-config gettext g++ make
Buildbot builder¶
srcpkg = util.BuildFactory() srcpkg.addStep(steps.ShellCommand(name='Cleanup environment', command=['sudo', 'rm', '-Rf', '../build'])) srcpkg.addStep(steps.Mercurial(name="Clone repository",repourl='http://hg.cerbelle.net/hg/mkernel', mode='full', method='fresh', branchType='inrepo')) srcpkg.addStep(steps.SetPropertyFromCommand(name="Get package name", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\1~'", property="package")) srcpkg.addStep(steps.SetPropertyFromCommand(name="Get package version", command="grep AC_INIT configure.ac | sed 's~.*\[\(.*\)\].*\[\(.*\)\].*\[\(.*\)\].*~\\2~'", property="version")) srcpkg.addStep(steps.ShellCommand(name="Generate autotools files",command=["./bootstrap.sh"])) srcpkg.addStep(steps.Configure(name="Configure")) srcpkg.addStep(steps.Compile(name="Make dist",command=["make", "dist" ], warningPattern="^Warning: ")) srcpkg.addStep(steps.Test(name="Make distcheck",command=["make", "distcheck" ], warningPattern="^Warning: ", warnOnFailure=False)) srcpkg.addStep(steps.MultipleFileUpload(name="Publish files", workersrcs=[ util.Interpolate("%(prop:package)s-%(prop:version)s.tar.gz"), util.Interpolate("%(prop:package)s-%(prop:version)s.tar.bz2"), util.Interpolate("%(prop:package)s-%(prop:version)s.tar.xz"), util.Interpolate("%(prop:package)s-%(prop:version)s.zip"), ], masterdest=util.Interpolate("/var/www/buildbot.cerbelle.net/%(prop:package)s/%(prop:version)s"), mode=0o755, url=util.Interpolate("http://buildbot.cerbelle.net/%(prop:package)s/%(prop:version)s/"))) srcpkg.addStep(steps.MasterShellCommand(name="Fix www folders permissions",command=["chmod", "-R", "u+rw,go+r", util.Interpolate("/var/www/buildbot.cerbelle.net/%(prop:package)s")])) srcpkg.addStep(steps.Trigger( schedulerNames=['MKernel_Triggerable'], waitForFinish=False, updateSourceStamp=True, set_properties={ 'package' : util.Interpolate("%(prop:package)s"), 'version' : util.Interpolate("%(prop:version)s"), })) c['builders'].append( util.BuilderConfig( project="mkernel", name="Sources", workernames=["bb-src"], factory=srcpkg))
BuildBot Linux builder¶
To build :- The binary archive
- The documentation archive
- The development archive
- The AppImage executable
Dependencies¶
apt-get install -y g++ make doxygen libcppunit-dev pkg-config fuse3
Builder¶
binlin = util.BuildFactory() binlin.addStep(steps.ShellCommand(name='Cleanup environment', command=['rm', '-Rf', util.Interpolate('%(prop:builddir)s/build')])) binlin.addStep(steps.FileDownload(name="Download sources",mastersrc=util.Interpolate("/var/www/buildbot.cerbelle.net/%(prop:package)s/%(prop:version)s/%(prop:package)s-%(prop:version)s.tar.gz"),workerdest=util.Interpolate("%(prop:package)s-%(prop:version)s.tar.gz"))) binlin.addStep(steps.ShellCommand(name='Extract sources from dist', command=['tar', 'xvzf', util.Interpolate("%(prop:package)s-%(prop:version)s.tar.gz")])) binlin.addStep(steps.ShellCommand(name='Create a build folder', command=['mkdir', util.Interpolate("%(prop:package)s-%(prop:version)s-build")])) binlin.addStep(steps.ShellCommand(name='Out of tree default configuration', command=[util.Interpolate("../%(prop:package)s-%(prop:version)s/configure"), '--prefix=/usr' ], workdir=util.Interpolate("build/%(prop:package)s-%(prop:version)s-build"))) binlin.addStep(steps.Compile(name="Compile", command=['make', util.Interpolate("CFLAGS=-DBBID=\\\"%(prop:buildnumber)s\\\""), 'clean', 'all' ], workdir=util.Interpolate("build/%(prop:package)s-%(prop:version)s-build"), warningPattern="^Warning: ")) binlin.addStep(steps.Test(name="Test", command=["make","check"],workdir=util.Interpolate("build/%(prop:package)s-%(prop:version)s-build"), warningPattern="^Warning: ")) binlin.addStep(steps.Compile(name="Install", command=['make', 'install', util.Interpolate('DESTDIR=%(prop:builddir)s/build/%(prop:package)s-%(prop:version)s-linux')], workdir=util.Interpolate("build/%(prop:package)s-%(prop:version)s-build"), warningPattern="^Warning: ")) binlin.addStep(steps.ShellCommand(name='Create the archive', command=['tar', 'cvzf', util.Interpolate('%(prop:package)s-%(prop:version)s-linux.tar.gz'), util.Interpolate('%(prop:package)s-%(prop:version)s-linux')])) binlin.addStep(steps.FileUpload(workersrc=util.Interpolate('%(prop:package)s-%(prop:version)s-linux.tar.gz'), masterdest=util.Interpolate('/var/www/buildbot.cerbelle.net/%(prop:package)s/%(prop:version)s/%(prop:package)s-%(prop:version)s-linux.tar.gz'),mode=0o755,urlText="Linux binaries",url=util.Interpolate("http://buildbot.cerbelle.net/%(prop:package)s/%(prop:version)s/%(prop:package)s-%(prop:version)s-linux.tar.gz"))) binlin.addStep(steps.ShellCommand(name="Get linuxdeploy for Appimages",command=["wget","https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage"])) binlin.addStep(steps.ShellCommand(name="Make linuxdeploy executable",command=["chmod","+x","linuxdeploy-x86_64.AppImage"])) binlin.addStep(steps.ShellCommand(name='Build AppImage', command=["./linuxdeploy-x86_64.AppImage","--appdir",util.Interpolate('%(prop:package)s-%(prop:version)s-linux'),"-e",util.Interpolate('%(prop:package)s-%(prop:version)s-linux/usr/bin/mkernel'),"-i",util.Interpolate("%(prop:package)s-%(prop:version)s/resources/mkernel.png"),"-d",util.Interpolate("%(prop:package)s-%(prop:version)s/resources/mkernel.desktop"),"--output","appimage" ])) binlin.addStep(steps.FileUpload(workersrc="MKernel-x86_64.AppImage", masterdest=util.Interpolate('/var/www/buildbot.cerbelle.net/%(prop:package)s/%(prop:version)s/MKernel-x86_64.AppImage'),mode=0o755,urlText="Linux AppImage",url=util.Interpolate("http://buildbot.cerbelle.net/%(prop:package)s/%(prop:version)s/MKernel-x86_64.AppImage"))) c['builders'].append( util.BuilderConfig( project="mkernel", name="Linux", workernames=["bb-lin"], factory=binlin))
BuildBot Debian builder¶
To build and test the DEB packages
Dependencies¶
apt-get install -y pbuilder
Builder¶
bindeb = util.BuildFactory() bindeb.addStep(steps.SetProperty(name="Compute basename", property="basename", value=util.Interpolate("%(prop:package)s-%(prop:version)s"))) bindeb.addStep(steps.ShellCommand(name='Cleanup environment', command=['rm', '-Rf', util.Interpolate('%(prop:builddir)s/build')])) bindeb.addStep(steps.FileDownload(name="Download sources", mastersrc=util.Interpolate("/var/www/buildbot.cerbelle.net/%(prop:package)s/%(prop:version)s/%(prop:basename)s.tar.gz"),workerdest=util.Interpolate("%(prop:basename)s.tar.gz"))) bindeb.addStep(steps.ShellCommand(name='Extract sources from dist', command=['tar', 'xvzf', util.Interpolate("%(prop:basename)s.tar.gz")])) bindeb.addStep(steps.ShellCommand(name='Rename src dist file', command=['mv', util.Interpolate("%(prop:basename)s.tar.gz"), util.Interpolate("%(prop:package)s_%(prop:version)s.orig.tar.gz")])) bindeb.addStep(steps.DebPbuilder(architecture="amd64",distribution="bullseye",workdir=util.Interpolate("build/%(prop:basename)s"))) bindeb.addStep(steps.MultipleFileUpload(name="Publish files", workersrcs=[ util.Interpolate("%(prop:basename)s/%(prop:package)s_%(prop:version)s-1_amd64.buildinfo"), util.Interpolate("%(prop:basename)s/%(prop:package)s_%(prop:version)s-1_amd64.changes"), util.Interpolate("%(prop:basename)s/%(prop:package)s_%(prop:version)s-1_amd64.deb"), util.Interpolate("%(prop:basename)s/%(prop:package)s_%(prop:version)s-1.debian.tar.xz"), util.Interpolate("%(prop:basename)s/%(prop:package)s_%(prop:version)s-1.dsc"), util.Interpolate("%(prop:basename)s/%(prop:package)s_%(prop:version)s-1_source.changes"), util.Interpolate("%(prop:basename)s/%(prop:package)s_%(prop:version)s.orig.tar.gz"), util.Interpolate("%(prop:basename)s/%(prop:package)s-dbgsym_%(prop:version)s-1_amd64.deb") ], mode=0o755, masterdest=util.Interpolate("/var/www/buildbot.cerbelle.net/%(prop:package)s/%(prop:version)s/debian"), url=util.Interpolate("http://buildbot.cerbelle.net/%(prop:package)s/%(prop:version)s/debian"))) bindeb.addStep(steps.MasterShellCommand(name="Fix www folders permissions",command=["chmod", "-R", "u+rw,go+r", util.Interpolate("/var/www/buildbot.cerbelle.net/%(prop:package)s")])) c['builders'].append( util.BuilderConfig( name="Debian", workernames=["bb-deb"], factory=bindeb))
Windows (MinGW) builder¶
Dependencies¶
Builder¶
MacOS (Monterey) builder¶
Dependencies¶
Builder¶