# -*- python -*-
# ex: set syntax=python:

import json
from buildbot.changes.filter import ChangeFilter
from buildbot.plugins import *

c = BuildmasterConfig = {}

# BUILDSLAVES

secrets = json.load(open('secrets.json'))

c['slaves'] = [
    buildslave.BuildSlave('linux-amd64', secrets['linux-amd64'],
                          max_builds=1,
                          properties={'platform': 'linux-amd64'}),
    buildslave.BuildSlave('linux-i386', secrets['linux-i386'],
                          max_builds=1,
                          properties={'platform': 'linux-i686'}),
    buildslave.BuildSlave('freebsd64', secrets['freebsd64'],
                          max_builds=1,
                          properties={'platform': 'freebsd-amd64'}),
    buildslave.BuildSlave('arm7', secrets['arm7'],
                          max_builds=1,
                          properties={'platform': 'linux-armv7'}),
    buildslave.BuildSlave('arm8', secrets['arm8'],
                          max_builds=1,
                          properties={'platform': 'linux-armv8'}),
    buildslave.BuildSlave('win32', secrets['win32'],
                          max_builds=1,
                          properties={'platform': 'win32'}),
    buildslave.BuildSlave('win64', secrets['win64'],
                          max_builds=1,
                          properties={'platform': 'win64'}),
    buildslave.BuildSlave('osx-10.10', secrets['osx-10.10'],
                          max_builds=1,
                          properties={'platform': 'osx-10.10'}),
    buildslave.BuildSlave('osx-10.11', secrets['osx-10.11'],
                          max_builds=1,
                          properties={'platform': 'osx-10.11'}),
    buildslave.BuildSlave('osx-10.12', secrets['osx-10.12'],
                          max_builds=1,
                          properties={'platform': 'osx-10.12'}),
    buildslave.BuildSlave('dragonfly-4.6', secrets['dragonfly-4.6'],
                          max_builds=1,
                          properties={'platform': 'dragonfly-4.6'}),

]

c['protocols'] = {'pb': {'port': 9989}}

# CHANGESOURCES

c['change_source'] = []
c['change_source'].append(changes.GitPoller(
        'https://github.com/monero-project/monero.git',
        workdir='gitpoller-workdir', branch='master',
        pollinterval=400))

c['change_source'].append(changes.GitPoller(
        'https://github.com/monero-project/monero-gui.git',
        workdir='gitpoller-workdir', branch='master',
        pollinterval=600))

c['change_source'].append(changes.GitPoller(
        'https://github.com/monero-project/kovri.git',
        workdir='gitpoller-workdir', branch='master',
        pollinterval=400))

#

def startCompile(change):
    '''Determine whether we want to start a compile pass based on the files that
        have changed.  Only skip compile if ALL changes are in the ignore criteria.
    '''
    compile = True
    for fn in change.files:
         # ignore all changes to gpg keys and markdown and text files
         if fn.endswith('.asc') or fn.endswith('.md') or fn.endswith('.txt') or fn.endswith('.conf'):
                compile = False
         # don't ignore changes to CMakeLists.txt files
         if re.match('CMakeLists.txt', fn):
                compile = True
         else:
                return True
    return compile

####### SCHEDULERS

# Configure the Schedulers, which decide how to react to incoming changes.

c['schedulers'] = []
from buildbot.plugins import schedulers

c['schedulers'].append(schedulers.ForceScheduler(
                            name='force',
builderNames=['kovri-static-openbsd-amd64', 'kovri-all-openbsd-amd64', 'kovri-static-dragonflybsd-amd64', 'kovri-all-dragonflybsd-amd64', 'monero-snap','monero-core-android-armv7','monero-static-dragonflybsd-amd64','monero-static-netbsd-amd64','monero-static-openbsd-amd64','monero-android-armv7','kovri-static-win32','kovri-static-win64','kovri-static-freebsd64','kovri-static-osx','kovri-static-ubuntu-amd64','kovri-static-ubuntu-i686','kovri-static-ubuntu-arm7','kovri-static-debian-arm8','pigeons-testing','monero-tests-ubuntu-16.04-i686','monero-tests-windows-10-i686','monero-tests-freebsd-10.3-amd64','monero-tests-ubuntu-16.04-amd64','monero-tests-osx-10.11','monero-tests-osx-10.10','monero-tests-osx-10.12','monero-tests-ubuntu-16.04-armv7','monero-tests-debian-armv8','monero-tests-windows-10-amd64','monero-core-win32','monero-core-win64','monero-core-freebsd','monero-core-ubuntu-arm7','monero-core-debian-armv8','kovri-all-freebsd64','kovri-all-osx-10.12','kovri-all-osx-10.10','kovri-all-osx-10.11','kovri-all-ubuntu-arm7','kovri-all-ubuntu-i686','kovri-all-win32','kovri-all-win64','kovri-all-debian-arm8','kovri-all-ubuntu-amd64','monero-core-osx-10.12','monero-core-osx-10.11','monero-core-ubuntu-amd64','monero-core-ubuntu-i686','monero-static-osx-10.10','monero-static-osx-10.11','monero-static-win32','monero-static-win64','monero-static-ubuntu-amd64','monero-static-freebsd64','monero-static-ubuntu-arm7','monero-static-debian-armv8','monero-static-ubuntu-i686','monero-static-osx-10.12']))

c['schedulers'].append(schedulers.SingleBranchScheduler(
            name='monero PR builder',
            builderNames=['monero-static-dragonflybsd-amd64','monero-static-win32','monero-static-win64','monero-static-osx-10.10','monero-static-osx-10.11','monero-static-osx-10.12','monero-static-freebsd64','monero-static-debian-armv8','monero-static-ubuntu-arm7','monero-static-ubuntu-amd64','monero-static-ubuntu-i686'],
            change_filter=util.ChangeFilter(repository='https://github.com/monero-project/monero.git')
            ))

c['schedulers'].append(schedulers.SingleBranchScheduler(
            name='monero-core PR builder',
            builderNames=['monero-core-freebsd','monero-core-osx-10.12','monero-core-osx-10.11','monero-core-ubuntu-i686','monero-core-ubuntu-amd64','monero-core-win32','monero-core-win64','monero-core-ubuntu-arm7','monero-core-debian-armv8'],
            change_filter=util.ChangeFilter(repository='https://github.com/monero-project/monero-gui.git')
            ))

c['schedulers'].append(schedulers.SingleBranchScheduler(
            name='kovri PR builder',
            fileIsImportant=startCompile,
            builderNames=['kovri-all-dragonflybsd-amd64', 'kovri-all-win32','kovri-all-win64','kovri-all-freebsd64','kovri-all-osx-10.12','kovri-all-osx-10.10','kovri-all-osx-10.11','kovri-all-ubuntu-amd64','kovri-all-ubuntu-i686','kovri-all-ubuntu-arm7','kovri-all-debian-arm8'],
            change_filter=util.ChangeFilter(repository='https://github.com/monero-project/kovri.git')
            ))

c['schedulers'].append(schedulers.Nightly(
                       name='Kovri Nightly',
                       branch='master',
                       builderNames=['kovri-static-dragonflybsd-amd64','kovri-static-win32','kovri-static-win64','kovri-static-freebsd64','kovri-static-osx','kovri-static-ubuntu-amd64','kovri-static-ubuntu-i686','kovri-static-ubuntu-arm7','kovri-static-debian-arm8'],
                       hour=6, 
                       minute=0,
                       change_filter=util.ChangeFilter(repository='https://github.com/monero-project/kovri.git'),
                       onlyIfChanged=False))

c['schedulers'].append(schedulers.Nightly(
		       name='Tests',
                       branch='master',
		       builderNames=['monero-tests-ubuntu-16.04-i686','monero-tests-windows-10-amd64','monero-tests-ubuntu-16.04-armv7','monero-tests-windows-10-i686','monero-tests-freebsd-10.3-amd64','monero-tests-ubuntu-16.04-amd64','monero-tests-osx-10.11','monero-tests-osx-10.10','monero-tests-osx-10.12'],
                       hour=5, 
		       minute=0,
                       change_filter=util.ChangeFilter(repository='https://github.com/monero-project/monero.git'),
		       onlyIfChanged=True))

c['schedulers'].append(schedulers.Nightly(
                       name='Kovri Nightly',
                       branch='master',
                       builderNames=['kovri-static-dragonflybsd-amd64','kovri-static-win32','kovri-static-win64','kovri-static-freebsd64','kovri-static-osx','kovri-static-ubuntu-amd64','kovri-static-ubuntu-i686','kovri-static-ubuntu-arm7','kovri-static-debian-arm8'],
                       hour=6, 
                       minute=0,
                       change_filter=util.ChangeFilter(repository='https://github.com/monero-project/kovri.git'),
                       onlyIfChanged=False))

c['schedulers'].append(schedulers.Nightly(
                       name='Monero Nightly',
                       branch='master',
                       builderNames=['monero-static-dragonflybsd-amd64','monero-static-win32','monero-static-win64','monero-static-osx-10.10','monero-static-osx-10.11','monero-static-osx-10.12','monero-static-freebsd64','monero-static-debian-armv8','monero-static-ubuntu-arm7','monero-static-ubuntu-amd64','monero-static-ubuntu-i686'],
                       hour=7, 
                       minute=0,
                       change_filter=util.ChangeFilter(repository='https://github.com/monero-project/monero.git'),
                       onlyIfChanged=False))


# thanks m-labs https://github.com/m-labs/buildbot-config/blob/master/master.cfg
def addCoverallsUploadSteps(factory, repo_token):
    factory.addStep(
        CoverallsCommand(
            name              = 'coveralls',
            description       = 'uploading',
            descriptionDone   = 'upload',
            descriptionSuffix = 'coveralls',
            flunkOnFailure    = False,
            warnOnFailure     = True,
            env               = { 'COVERALLS_REPO_TOKEN': repo_token },
            # Don't dump env variables potentially containing secret tokens
	    logEnviron	      = False
			))

import re
from commands import CoverallsCommand
from buildbot.steps.shell import ShellCommand
from buildbot.process.properties import WithProperties
from buildbot.status.results import FAILURE, SUCCESS

# BUILD FACTORIES

noTestsFactory = util.BuildFactory()
noTestsFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full', submodules=True))
noTestsFactory.addStep(steps.Compile(command = ['make', 'release-static']))

noCoretestsFactory = util.BuildFactory()
noCoretestsFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full', submodules=True))
noCoretestsFactory.addStep(steps.Compile(command = ['make', 'release-static']))
noCoretestsFactory.addStep(steps.Test(command = ['make', 'release-test'], timeout=None, env={'ARGS': " -E 'core_tests|libwallet_api_tests' "}, logfiles={'LastTest': 'build/release/Testing/Temporary/LastTest.log','CTestCostData.txt': 'build/release/Testing/Temporary/CTestCostData.txt'}))
noCoretestsFactory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
noCoretestsFactory.addStep(steps.ShellCommand(name = "zip", command = ["tar", "-zcvf", WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), "build/release/bin"] ))
noCoretestsFactory.addStep(steps.FileUpload(slavesrc=WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-%(gitversion)s-%(platform)s.tar.gz"), url=WithProperties("https://build.getmonero.org/downloads/monero-%(gitversion)s-%(platform)s.tar.gz")))

ispHijackedFactory = util.BuildFactory()
ispHijackedFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full', submodules=True))
ispHijackedFactory.addStep(steps.Compile(command = ['make', 'release-static']))
ispHijackedFactory.addStep(steps.Test(command = ['make', 'release-test'], timeout=None, env={'ARGS': " -E 'core_tests|libwallet_api_tests' ", 'GTEST_FILTER': '-DNSResolver.*:AddressFromURL.*'}, logfiles={'LastTest': 'build/release/Testing/Temporary/LastTest.log','CTestCostData.txt': 'build/release/Testing/Temporary/CTestCostData.txt'}))
ispHijackedFactory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
ispHijackedFactory.addStep(steps.ShellCommand(name = "zip", command = ["tar", "-zcvf", WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), "build/release/bin"] ))
ispHijackedFactory.addStep(steps.FileUpload(slavesrc=WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-%(gitversion)s-%(platform)s.tar.gz"), url=WithProperties("https://build.getmonero.org/downloads/monero-%(gitversion)s-%(platform)s.tar.gz")))

osxTestsFactory = util.BuildFactory()
osxTestsFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='incremental', submodules=True))
osxTestsFactory.addStep(steps.Test(command = ['make', 'release-test'], timeout=None, logfiles={'LastTest.log': 'build/debug/Testing/Temporary/LastTest.log','CTestCostData.txt': 'build/debug/Testing/Temporary/CTestCostData.txt','coretests.log': 'build/debug/tests/core_tests/coretests.log'}))

armv8Factory = util.BuildFactory()
armv8Factory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full', submodules=True))
armv8Factory.addStep(steps.Compile(command = ['make', 'release-static-armv8']))
armv8Factory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
armv8Factory.addStep(steps.ShellCommand(name = "zip", command = ["tar", "-zcvf", WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), "build/release/bin"] ))
armv8Factory.addStep(steps.FileUpload(slavesrc=WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-%(gitversion)s-%(platform)s.tar.gz"), url=WithProperties("https://build.getmonero.org/downloads/monero-%(gitversion)s-%(platform)s.tar.gz")))

armv7Factory = util.BuildFactory()
armv7Factory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='incremental', submodules=True))
armv7Factory.addStep(steps.Compile(command = ['ccache', 'make', 'release-static-armv7'], timeout=None))
armv7Factory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
armv7Factory.addStep(steps.ShellCommand(name = "zip", command = ["tar", "-zcvf", WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), "build/release/bin"] ))
armv7Factory.addStep(steps.FileUpload(slavesrc=WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-%(gitversion)s-%(platform)s.tar.gz"), url=WithProperties("https://build.getmonero.org/downloads/monero-%(gitversion)s-%(platform)s.tar.gz")))

static32Factory = util.BuildFactory()
static32Factory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full', submodules=True))
static32Factory.addStep(steps.Compile(command = ['make', 'release-static-32']))
static32Factory.addStep(steps.Test(command = ['make', 'release-test'], timeout=None, env={'ARGS': " -E 'core_tests|libwallet_api_tests' "}, logfiles={"LastTest": "build/release/Testing/Temporary/LastTest.log","CTestCostData.txt": "build/release/Testing/Temporary/CTestCostData.txt"}))
static32Factory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
static32Factory.addStep(steps.ShellCommand(name = "zip", command = ["tar", "-zcvf", WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), "build/release/bin"] ))
static32Factory.addStep(steps.FileUpload(slavesrc=WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-%(gitversion)s-%(platform)s.tar.gz"), url=WithProperties("https://build.getmonero.org/downloads/monero-%(gitversion)s-%(platform)s.tar.gz")))

win32ReleaseFactory = util.BuildFactory()
win32ReleaseFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full', submodules=True))
win32ReleaseFactory.addStep(steps.Compile(command = ["make", "release-static-win32"]))
win32ReleaseFactory.addStep(steps.Test(command = ["make", "release-test"], env={'ARGS': " -E 'core_tests|libwallet_api_tests' "}, logfiles={"LastTest": "build/release/Testing/Temporary/LastTest.log","CTestCostData.txt": "build/release/Testing/Temporary/CTestCostData.txt"}))

win64ReleaseFactory = util.BuildFactory()
win64ReleaseFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full', submodules=True))
win64ReleaseFactory.addStep(steps.Compile(command = ["make", "release-static-win64"]))
win64ReleaseFactory.addStep(steps.Test(command = ["make", "release-test"], env={'ARGS': " -E 'core_tests|libwallet_api_tests' "}, logfiles={"LastTest": "build/release/Testing/Temporary/LastTest.log","CTestCostData.txt": "build/release/Testing/Temporary/CTestCostData.txt"}))
win64ReleaseFactory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
win64ReleaseFactory.addStep(steps.ShellCommand(name = "zip", command = ["tar", "-zcvf", WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), "build/release/bin"] ))
win64ReleaseFactory.addStep(steps.FileUpload(slavesrc=WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-%(gitversion)s-%(platform)s.tar.gz"), url=WithProperties("https://build.getmonero.org/downloads/monero-%(gitversion)s-%(platform)s.tar.gz")))

dragonflyFactory = util.BuildFactory()
dragonflyFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full', submodules=True))
dragonflyFactory.addStep(steps.Compile(command = ['gmake', 'release-static'], env={'LDVER': 'ld.bfd'}))
dragonflyFactory.addStep(steps.Test(command = ['gmake', 'release-test'], timeout=None, env={'LDVER': 'ld.bfd', 'ARGS': " -E 'core_tests|libwallet_api_tests' "}, logfiles={'LastTest': 'build/release/Testing/Temporary/LastTest.log','CTestCostData.txt': 'build/release/Testing/Temporary/CTestCostData.txt'}))
dragonflyFactory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
dragonflyFactory.addStep(steps.ShellCommand(name = "zip", command = ["tar", "-zcvf", WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), "build/release/bin"] ))
dragonflyFactory.addStep(steps.FileUpload(slavesrc=WithProperties("monero-%(gitversion)s-%(platform)s.tar.gz"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-%(gitversion)s-%(platform)s.tar.gz"), url=WithProperties("https://build.getmonero.org/downloads/monero-%(gitversion)s-%(platform)s.tar.gz")))

coreFactory = util.BuildFactory()
coreFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero-gui.git', mode='full', submodules=True))
coreFactory.addStep(steps.Compile(command = ["bash", "-ex", "build.sh"], timeout=None))

coreOsxFactory = util.BuildFactory()
coreOsxFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero-gui.git', mode='full', submodules=True))
coreOsxFactory.addStep(steps.Compile(command = ["bash", "-ex", "./build.sh"], env={'PATH': '/opt/qt/Qt5.7.0/5.7/clang_64/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin'}))
coreOsxFactory.addStep(steps.ShellCommand(command=['make', 'deploy'], name='deploy', description='deploying', workdir='build/build', env={'PATH': '/opt/qt/Qt5.7.0/5.7/clang_64/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin'}))
coreOsxFactory.addStep(steps.ShellCommand(name='copy boost', command=['cp', '/usr/local/opt/boost/lib/libboost_system-mt.dylib', 'build/release/bin/monero-wallet-gui.app/Contents/Frameworks/']))
coreOsxFactory.addStep(steps.ShellCommand(name='copy Qt', command=['cp', '-rv', '/opt/qt/Qt5.7.0/5.7/clang_64/qml/Qt', 'build/release/bin/monero-wallet-gui.app/Contents/MacOS/']))
coreOsxFactory.addStep(steps.ShellCommand(name='copy QtQuick', command=['cp', '-Rv', '/opt/qt/Qt5.7.0/5.7/clang_64/qml/QtQuick', 'build/release/bin/monero-wallet-gui.app/Contents/MacOS/']))
coreOsxFactory.addStep(steps.ShellCommand(name='copy QtGraphicalEffects', command=['cp', '-rv', '/opt/qt/Qt5.7.0/5.7/clang_64/qml/QtGraphicalEffects', 'build/release/bin/monero-wallet-gui.app/Contents/MacOS/']))
coreOsxFactory.addStep(steps.ShellCommand(name='copy deps', command=['cp', '-rv', '/opt/qt/Qt5.7.0/5.7/clang_64/lib/QtXmlPatterns.framework', 'build/release/bin/monero-wallet-gui.app/Contents/Frameworks']))
coreOsxFactory.addStep(steps.ShellCommand(name='link', command=['install_name_tool', '-change', '/usr/local/Cellar/openssl/1.0.2j/lib/libcrypto.1.0.0.dylib', '@executable_path/../Frameworks/libcrypto.1.0.0.dylib', 'build/release/bin/monero-wallet-gui.app/Contents/Frameworks/libssl.1.0.0.dylib']))
coreOsxFactory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
coreOsxFactory.addStep(steps.ShellCommand(name = "zip", command = ["zip", "-r", "-X", WithProperties("monero-wallet-gui-%(gitversion)s-%(platform)s.zip"), "build/release/bin/monero-wallet-gui.app"] ))
coreOsxFactory.addStep(steps.FileUpload(slavesrc=WithProperties("monero-wallet-gui-%(gitversion)s-%(platform)s.zip"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-wallet-gui-%(gitversion)s-%(platform)s.zip"), url=WithProperties("https://build.getmonero.org/downloads/monero-wallet-gui-%(gitversion)s-%(platform)s.zip")))

coreFreebsdFactory = util.BuildFactory()
coreFreebsdFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero-gui.git', mode='incremental', submodules=True))
coreFreebsdFactory.addStep(steps.Compile(command = ["bash", "-ex", "build.sh"],env={'SHELL': '/usr/local/bin/bash', 'PATH': '/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/home/vagrant/bin:/usr/local/lib/qt5/bin'}))

coreMingw32Factory = util.BuildFactory()
coreMingw32Factory.addStep(steps.RemoveDirectory(dir='monero'))
coreMingw32Factory.addStep(steps.Git(repourl='https://github.com/monero-project/monero-gui.git', mode='full', method='clobber', submodules=True))
coreMingw32Factory.addStep(steps.Compile(command = ['/msys32/usr/bin/bash.exe', '-ex', './build.sh'],env={'MSYSTEM': 'MINGW32', 'PATH': '/c/Windows/system32;/c/Windows;/c/Windows/System32/WindowsPowerShell/v1.0;/c/Qt/Qt5.7.0/Tools/mingw530_32/bin;/c/Qt/Qt5.7.0/Tools/mingw530_32/boost/lib;/c/Qt/Qt5.7.0/5.7/mingw53_32/bin;/c/python27/lib/site-packages/pywin32_system32;/c/msys32/mingw32/bin;/c/msys32/usr/bin'}))
coreMingw32Factory.addStep(steps.Compile(name='deploy', description='deploying', descriptionDone='deploy', command = ['make', 'deploy'], workdir='build/build', env={'MSYSTEM': 'MINGW32', 'PATH': '/c/Python27;/c/Python27/Scripts;/c/Windows/system32;/c/Windows;/c/Qt/Qt5.7.0/Tools/mingw530_32/bin;/c/Qt/Qt5.7.0/Tools/mingw530_32/boost/lib;/c/Qt/Qt5.7.0/5.7/mingw53_32/bin;/c/python27/lib/site-packages/pywin32_system32;/c/msys32/mingw32/bin;/msys32/usr/bin'}))
coreMingw32Factory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
coreMingw32Factory.addStep(steps.ShellCommand(name = "zip", command = ["zip", "-r", WithProperties("monero-core-%(gitversion)s-%(platform)s.zip"), "build/release/bin"] ))
coreMingw32Factory.addStep(steps.FileUpload(slavesrc=WithProperties("monero-core-%(gitversion)s-%(platform)s.zip"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-core-%(gitversion)s-%(platform)s.zip"), url=WithProperties("https://build.getmonero.org/downloads/monero-core-%(gitversion)s-%(platform)s.zip")))

coreMingw64Factory = util.BuildFactory()
coreMingw64Factory.addStep(steps.RemoveDirectory(dir='build/build'))
coreMingw64Factory.addStep(steps.Git(repourl='https://github.com/monero-project/monero-gui.git', mode='full', submodules=True))
coreMingw64Factory.addStep(steps.Compile(command = ["/msys64/usr/bin/bash.exe","-ex","./build.sh"],env={'MSYSTEM': 'MINGW64', 'PATH': '/c/Qt/qt-everywhere-opensource-src-5.7.0/qtbase/bin;/c/msys64/usr/bin;/c/Windows/system32;/c/Windows;/c/msys64/mingw64/bin'}))
coreMingw64Factory.addStep(steps.Compile(name='deploy', description='deploying', descriptionDone='deploy', command = ['make', 'deploy'], workdir='build/build', env={'MSYSTEM_PREFIX': '/mingw64', 'MSYSTEM': 'MINGW64', 'PATH': ["c:\Qt\qt-everywhere-opensource-src-5.7.0\qtbase\\bin", "${PATH}"]}))
coreMingw64Factory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
coreMingw64Factory.addStep(steps.ShellCommand(name = "zip", command = ["zip", "-r", WithProperties("monero-core-%(gitversion)s-%(platform)s.zip"), "build/release/bin"] ))
coreMingw64Factory.addStep(steps.FileUpload(slavesrc=WithProperties("monero-core-%(gitversion)s-%(platform)s.zip"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-core-%(gitversion)s-%(platform)s.zip"), url=WithProperties("https://build.getmonero.org/downloads/monero-core-%(gitversion)s-%(platform)s.zip")))

kovriAllFactory = util.BuildFactory()
kovriAllFactory.addStep(steps.Git(repourl='https://github.com/monero-project/kovri.git', mode='full', submodules=True))
kovriAllFactory.addStep(steps.Compile(command=["make", "all-options"]))
kovriAllFactory.addStep(steps.Compile(name="compile tests", command=["make", "tests"]))
kovriAllFactory.addStep(steps.Test(command=["./build/kovri-tests"]))

kovriArmFactory = util.BuildFactory()
kovriArmFactory.addStep(steps.Git(repourl='https://github.com/monero-project/kovri.git', mode='full', submodules=True))
kovriArmFactory.addStep(steps.Compile(command=["make", "all-options"], env={'CC': 'clang35', 'CXX': 'clang++35'}))
kovriArmFactory.addStep(steps.Compile(name="compile tests", command=["make", "tests"], env={'CC': 'clang35', 'CXX': 'clang++35'}))
kovriArmFactory.addStep(steps.Test(command=["./build/kovri-tests"]))

kovriUbuntu64Factory = util.BuildFactory()
kovriUbuntu64Factory.addStep(steps.Git(repourl='https://github.com/monero-project/kovri.git', mode='full', submodules=True))
kovriUbuntu64Factory.addStep(steps.Compile(command=["make", "coverage"]))
kovriUbuntu64Factory.addStep(steps.Compile(name="compile tests", command=["make", "coverage-tests"]))
kovriUbuntu64Factory.addStep(steps.Test(command=["./build/kovri-tests"]))
addCoverallsUploadSteps(kovriUbuntu64Factory,repo_token=secrets['coveralls_token'])

kovriFreebsdFactory = util.BuildFactory()
kovriFreebsdFactory.addStep(steps.Git(repourl='https://github.com/monero-project/kovri.git', mode='full', submodules=True))
kovriFreebsdFactory.addStep(steps.Compile(command=["gmake", "all-options"], env={'CC': 'clang36', 'CXX': 'clang++36'}))
kovriFreebsdFactory.addStep(steps.Compile(name="compile tests", command=["gmake", "tests"], env={'CC': 'clang36', 'CXX': 'clang++36'}))
kovriFreebsdFactory.addStep(steps.Test(command=["./build/kovri-tests"]))

kovriMingw32Factory = util.BuildFactory()
kovriMingw32Factory.addStep(steps.Git(repourl='https://github.com/monero-project/kovri.git', mode='full', submodules=True))
kovriMingw32Factory.addStep(steps.Compile(command=["/msys32/usr/bin/bash.exe","-c", "make", "all-options"],env={'MSYSTEM': "MINGW32"}))
kovriMingw32Factory.addStep(steps.Compile(name="compile tests", command=["make", "tests"]))
kovriMingw32Factory.addStep(steps.Test(command=["kovri-tests.exe"], workdir="build/build"))

kovriMingw64Factory = util.BuildFactory()
kovriMingw64Factory.addStep(steps.Git(repourl='https://github.com/monero-project/kovri.git', mode='full', submodules=True))
kovriMingw64Factory.addStep(steps.Compile(command=["make", "all-options"],env={'MSYSTEM': "MINGW64"}))
kovriMingw64Factory.addStep(steps.Compile(name="compile tests", command=["make", "tests"]))
kovriMingw64Factory.addStep(steps.Test(command=["kovri-tests.exe"], workdir="build/build"))

kovriDragonflyFactory = util.BuildFactory()
kovriDragonflyFactory.addStep(steps.Git(repourl='https://github.com/monero-project/kovri.git', mode='full', submodules=True))
kovriDragonflyFactory.addStep(steps.Compile(command=["gmake", "all-options"]))
kovriDragonflyFactory.addStep(steps.Compile(name="compile tests", command=["gmake", "tests"]))
kovriDragonflyFactory.addStep(steps.Test(command=["./build/kovri-tests"]))
kovriDragonflyFactory.addStep(steps.Test(name="benchmark", command=["./build/kovri-benchmarks"]))

kovriStaticFactory = util.BuildFactory()
kovriStaticFactory.addStep(steps.Git(repourl='https://github.com/monero-project/kovri.git', mode='full', submodules=True))
kovriStaticFactory.addStep(steps.Compile(command=["make", "release-static"]))
kovriStaticFactory.addStep(steps.Compile(name='make documentation', command=["make", "doxygen"]))
kovriStaticFactory.addStep(steps.ShellCommand(name='package', description='packaging', descriptionDone='package', command = ['bash', '-x', './pkg/installers/kovri-install.sh', '-p', '-c', '-f', util.Interpolate('kovri-latest-%(prop:platform)s.tar.bz2')]))
kovriStaticFactory.addStep(steps.FileUpload(slavesrc=WithProperties("kovri-latest-%(platform)s.tar.bz2"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/kovri-latest-%(platform)s.tar.bz2"), url=WithProperties("https://build.getmonero.org/downloads/kovri-latest-%(platform)s.tar.bz2")))
kovriStaticFactory.addStep(steps.FileUpload(name="upload hashes", slavesrc=WithProperties("kovri-latest-%(platform)s.tar.bz2.sha256sum.txt"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/kovri-latest-%(platform)s.tar.bz2.sha256sum.txt"), url=WithProperties("https://build.getmonero.org/downloads/kovri-latest-%(platform)s.tar.bz2.sha256sum.txt")))

kovriStaticBsdFactory = util.BuildFactory()
kovriStaticBsdFactory.addStep(steps.Git(repourl='https://github.com/monero-project/kovri.git', mode='full', submodules=True))
kovriStaticBsdFactory.addStep(steps.Compile(command=["gmake", "release-static"]))
kovriStaticBsdFactory.addStep(steps.ShellCommand(name='package', description='packaging', descriptionDone='packaged', command = ['bash', '-x', './pkg/installers/kovri-install.sh', '-p', '-c', '-f', util.Interpolate('kovri-latest-%(prop:platform)s.tar.bz2')]))
kovriStaticBsdFactory.addStep(steps.FileUpload(slavesrc=WithProperties("kovri-latest-%(platform)s.tar.bz2"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/kovri-latest-%(platform)s.tar.bz2"), url=WithProperties("https://build.getmonero.org/downloads/kovri-latest-%(platform)s.tar.bz2")))
kovriStaticBsdFactory.addStep(steps.FileUpload(name="upload hashes", slavesrc=WithProperties("kovri-latest-%(platform)s.tar.bz2.sha256sum.txt"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/kovri-latest-%(platform)s.tar.bz2.sha256sum.txt"), url=WithProperties("https://build.getmonero.org/downloads/kovri-latest-%(platform)s.tar.bz2.sha256sum.txt")))
kovriStaticBsdFactory.addStep(steps.RemoveDirectory(dir='build/build', hideStepIf=True))

kovriStaticWin32Factory = util.BuildFactory()
kovriStaticWin32Factory.addStep(steps.Git(repourl='https://github.com/monero-project/kovri.git', mode='full', submodules=True))
kovriStaticWin32Factory.addStep(steps.Compile(command=["make", "release-static"],env={'MSYSTEM': "MINGW32"}))
kovriStaticWin32Factory.addStep(steps.ShellCommand(name='package', description='packaging', descriptionDone='packaged', env={'PATH': ["C:\msys32\usr\\bin\\core_perl", "${PATH}"]}, command = ['bash', '-x', './pkg/installers/kovri-install.sh', '-p', '-c', '-f', util.Interpolate('kovri-latest-%(prop:platform)s.exe')]))
kovriStaticWin32Factory.addStep(steps.FileUpload(slavesrc=WithProperties("kovri-latest-%(platform)s.exe"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/kovri-latest-%(platform)s.exe"), url=WithProperties("https://build.getmonero.org/downloads/kovri-latest-%(platform)s.exe")))
kovriStaticWin32Factory.addStep(steps.FileUpload(name="upload hashes", slavesrc=WithProperties("kovri-latest-%(platform)s.exe.sha256sum.txt"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/kovri-latest-%(platform)s.exe.sha256sum.txt"), url=WithProperties("https://build.getmonero.org/downloads/kovri-latest-%(platform)s.exe.sha256sum.txt")))

kovriStaticWin64Factory = util.BuildFactory()
kovriStaticWin64Factory.addStep(steps.Git(repourl='https://github.com/monero-project/kovri.git', mode='full', submodules=True))
kovriStaticWin64Factory.addStep(steps.Compile(command=["make", "release-static"],env={'MSYSTEM': "MINGW64"}))
kovriStaticWin64Factory.addStep(steps.ShellCommand(name='package', description='packaging', descriptionDone='packaged', env={'PATH': ["C:\msys64\usr\\bin\\core_perl", "${PATH}"]}, command = ['bash', '-x', './pkg/installers/kovri-install.sh', '-p', '-c', '-f', util.Interpolate('kovri-latest-%(prop:platform)s.exe')]))
kovriStaticWin64Factory.addStep(steps.FileUpload(slavesrc=WithProperties("kovri-latest-%(platform)s.exe"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/kovri-latest-%(platform)s.exe"), url=WithProperties("https://build.getmonero.org/downloads/kovri-latest-%(platform)s.exe")))
kovriStaticWin64Factory.addStep(steps.FileUpload(name="upload hashes", slavesrc=WithProperties("kovri-latest-%(platform)s.exe.sha256sum.txt"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/kovri-latest-%(platform)s.exe.sha256sum.txt"), url=WithProperties("https://build.getmonero.org/downloads/kovri-latest-%(platform)s.exe.sha256sum.txt")))


coreUbuntu64Factory = util.BuildFactory()
coreUbuntu64Factory.addStep(steps.Git(repourl='https://github.com/monero-project/monero-gui.git', mode='full', submodules=True))
coreUbuntu64Factory.addStep(steps.Compile(command = ["bash", "-ex", "./build.sh"], env={'PATH': '/opt/Qt/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'}))
coreUbuntu64Factory.addStep(steps.Compile(name='deploy', description='deploying', descriptionDone='deploy', command = ['make', 'deploy'],workdir='build/build'))
coreUbuntu64Factory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
coreUbuntu64Factory.addStep(steps.ShellCommand(name = "zip", command = ["tar", "-zcvf", WithProperties("monero-core-%(gitversion)s-%(platform)s.tar.gz"), "build/release/bin"] ))
coreUbuntu64Factory.addStep(steps.FileUpload(slavesrc=WithProperties("monero-core-%(gitversion)s-%(platform)s.tar.gz"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-core-%(gitversion)s-%(platform)s.tar.gz"), url=WithProperties("https://build.getmonero.org/downloads/monero-core-%(gitversion)s-%(platform)s.tar.gz")))

coreDebianFactory = util.BuildFactory()
coreDebianFactory.addStep(steps.RemoveDirectory(dir='build/build'))
coreDebianFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero-gui.git', mode='full', submodules=True))
coreDebianFactory.addStep(steps.Compile(command = ["bash", "-ex", "./build.sh"]))
coreDebianFactory.addStep(steps.Compile(name='deploy', description='deploying', descriptionDone='deploy', command = ['make', 'deploy'],workdir='build/build'))
coreDebianFactory.addStep(steps.SetPropertyFromCommand(name = "set version", command = ["git", "rev-parse", "--short", "HEAD"], property = 'gitversion'))
coreDebianFactory.addStep(steps.ShellCommand(name = "zip", command = ["tar", "-zcvf", WithProperties("monero-core-%(gitversion)s-%(platform)s.tar.gz"), "build/release/bin"] ))
coreDebianFactory.addStep(steps.FileUpload(slavesrc=WithProperties("monero-core-%(gitversion)s-%(platform)s.tar.gz"), masterdest=WithProperties("/home/buildbot/master/public_html/downloads/monero-core-%(gitversion)s-%(platform)s.tar.gz"), url=WithProperties("https://build.getmonero.org/downloads/monero-core-%(gitversion)s-%(platform)s.tar.gz")))

testsFactory = util.BuildFactory()
testsFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='incremental', submodules=True))
testsFactory.addStep(steps.Compile(command = ["make", "debug"]))
testsFactory.addStep(steps.Test(command = ["make", "debug-test"], timeout=None, logfiles={"LastTest.log": "build/debug/Testing/Temporary/LastTest.log","CTestCostData.txt": "build/debug/Testing/Temporary/CTestCostData.txt","coretests.log": "build/debug/tests/core_tests/coretests.log"}))

testsFreebsdFactory = util.BuildFactory()
testsFreebsdFactory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full', method="clobber", submodules=True))
testsFreebsdFactory.addStep(steps.Compile(command = ["make", "release-static"]))
testsFreebsdFactory.addStep(steps.Test(command = ["make", "release-test"], timeout=None, logfiles={"LastTest.log": "build/release/Testing/Temporary/LastTest.log","CTestCostData.txt": "build/release/Testing/Temporary/CTestCostData.txt","coretests.log": "build/release/tests/core_tests/coretests.log"}))

testsWin32Factory = util.BuildFactory()
testsWin32Factory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full', method="clobber", submodules=True))
testsWin32Factory.addStep(steps.Compile(command = ["make", "release-static-win32"]))
testsWin32Factory.addStep(steps.Test(command = ["make", "release-test"], timeout=None, logfiles={"LastTest.log": "build/release/Testing/Temporary/LastTest.log","CTestCostData.txt": "build/release/Testing/Temporary/CTestCostData.txt"}))

testsWin64Factory = util.BuildFactory()
testsWin64Factory.addStep(steps.Git(repourl='https://github.com/monero-project/monero.git', mode='full', method="clobber", submodules=True))
testsWin64Factory.addStep(steps.Compile(command = ["make", "release-static-win64"]))
testsWin64Factory.addStep(steps.Test(command = ["make", "release-test"], timeout=None, logfiles={"LastTest.log": "build/release/Testing/Temporary/LastTest.log","CTestCostData.txt": "build/release/Testing/Temporary/CTestCostData.txt"}))

# BUILDERS
c['builders'] = []

c['builders'].append(
    util.BuilderConfig(name="monero-tests-windows-10-i686",
      slavenames=["win32"],
      factory=testsWin32Factory)) 

c['builders'].append(
    util.BuilderConfig(name="monero-tests-osx-10.12",
      slavenames=["osx-10.12"],
      factory=osxTestsFactory)) 

c['builders'].append(
    util.BuilderConfig(name="monero-tests-osx-10.10",
      slavenames=["osx-10.10"],
      factory=testsFactory)) 

c['builders'].append(
    util.BuilderConfig(name="monero-tests-osx-10.11",
      slavenames=["osx-10.11"],
      factory=testsFactory))

c['builders'].append(
    util.BuilderConfig(name="monero-static-debian-armv8",
      slavenames=["arm8"],
      factory=armv8Factory,
      mergeRequests=True,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "monero",
    }))

c['builders'].append(
    util.BuilderConfig(name="monero-static-ubuntu-amd64",
      slavenames=["linux-amd64"],
      factory=noCoretestsFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "monero",
    }))

c['builders'].append(
    util.BuilderConfig(name="monero-static-ubuntu-i686",
      slavenames=["linux-i386"],
      factory=static32Factory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "monero",
    }))

c['builders'].append(
    util.BuilderConfig(name="monero-static-ubuntu-arm7",
      slavenames=["arm7"],
      factory=armv7Factory,
      mergeRequests=True,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "monero",
    }))

c['builders'].append(
    util.BuilderConfig(name="monero-static-freebsd64",
      slavenames=["freebsd64"],
      factory=noCoretestsFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "monero",
    }))

c['builders'].append(
    util.BuilderConfig(name="monero-static-dragonflybsd-amd64",
      slavenames=["dragonfly-4.6"],
      factory=dragonflyFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "monero",
    }))

c['builders'].append(
    util.BuilderConfig(name="monero-static-osx-10.12",
      slavenames=["osx-10.12"],
      factory=ispHijackedFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "monero",
    }))

c['builders'].append(
    util.BuilderConfig(name="monero-static-osx-10.10",
      slavenames=["osx-10.10"],
      factory=noCoretestsFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "monero",
    }))

c['builders'].append(
    util.BuilderConfig(name="monero-static-osx-10.11",
      slavenames=["osx-10.11"],
      factory=ispHijackedFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "monero",
    }))

c['builders'].append(
    util.BuilderConfig(name="monero-static-win32",
      slavenames=["win32"],
      factory=win32ReleaseFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "monero",
    }))

c['builders'].append(
    util.BuilderConfig(name="monero-static-win64",
      slavenames=["win64"],
      factory=win64ReleaseFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "monero",
    }))

c['builders'].append(
    util.BuilderConfig(name="monero-core-win32",
      slavenames=["win32"],
      factory=coreMingw32Factory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "monero-core",
    }))

c['builders'].append(
    util.BuilderConfig(name="monero-core-win64",
      slavenames=["win64"],
      factory=coreMingw64Factory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "monero-core",
    }))

c['builders'].append(
    util.BuilderConfig(name="monero-core-freebsd",
      slavenames=["freebsd64"],
      factory=coreFreebsdFactory))

c['builders'].append(
    util.BuilderConfig(name="monero-core-ubuntu-arm7",
      slavenames=["arm7"],
      factory=coreFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "monero-core",
    }))

c['builders'].append(
    util.BuilderConfig(name="monero-core-debian-armv8",
      slavenames=["arm8"],
      factory=coreFactory))

c['builders'].append(
    util.BuilderConfig(name="monero-core-ubuntu-amd64",
      slavenames=["linux-amd64"],
      factory=coreUbuntu64Factory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "monero-core",
    }))

c['builders'].append(
    util.BuilderConfig(name="monero-core-ubuntu-i686",
      slavenames=["linux-i386"],
      factory=coreDebianFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "monero-core",
    }))

c['builders'].append(
    util.BuilderConfig(name="monero-core-osx-10.12",
      slavenames=["osx-10.12"],
      factory=coreOsxFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "monero-core",
    }))

c['builders'].append(
    util.BuilderConfig(name="monero-core-osx-10.11",
      slavenames=["osx-10.11"],
      factory=coreOsxFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "monero-core",
    }))

c['builders'].append(
    util.BuilderConfig(name="kovri-all-ubuntu-i686",
      slavenames=["linux-i386"],
      factory=kovriAllFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "kovri",
    }))

c['builders'].append(
    util.BuilderConfig(name="kovri-all-osx-10.12",
      slavenames=["osx-10.12"],
      factory=kovriAllFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "kovri",
    }))

c['builders'].append(
    util.BuilderConfig(name="kovri-all-osx-10.10",
      slavenames=["osx-10.10"],
      factory=kovriAllFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "kovri",
    }))

c['builders'].append(
    util.BuilderConfig(name="kovri-all-osx-10.11",
      slavenames=["osx-10.11"],
      factory=kovriAllFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "kovri",
    }))

c['builders'].append(
    util.BuilderConfig(name="kovri-all-ubuntu-amd64",
      slavenames=["linux-amd64"],
      factory=kovriUbuntu64Factory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "kovri",
    }))

c['builders'].append(
    util.BuilderConfig(name="kovri-all-ubuntu-arm7",
      slavenames=["arm7"],
      factory=kovriAllFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "kovri",
    }))

c['builders'].append(
    util.BuilderConfig(name="kovri-all-debian-arm8",
      slavenames=["arm8"],
      factory=kovriAllFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "kovri",
    }))

c['builders'].append(
    util.BuilderConfig(name="kovri-all-freebsd64",
      slavenames=["freebsd64"],
      factory=kovriFreebsdFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "kovri",
    }))

c['builders'].append(
    util.BuilderConfig(name="kovri-all-dragonflybsd-amd64",
      slavenames=["dragonfly-4.6"],
      factory=kovriDragonflyFactory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "kovri",
    }))

c['builders'].append(
    util.BuilderConfig(name="kovri-all-win32",
      slavenames=["win32"],
      factory=kovriMingw32Factory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "kovri",
    }))

c['builders'].append(
    util.BuilderConfig(name="kovri-all-win64",
      slavenames=["win64"],
      factory=kovriMingw64Factory,
      properties={
        "github_repo_owner": "monero-project",
        "github_repo_name": "kovri",
    }))

c['builders'].append(
    util.BuilderConfig(name="kovri-static-dragonflybsd-amd64",
      slavenames=["dragonfly-4.6"],
      factory=kovriStaticDragonflyFactory))

c['builders'].append(
    util.BuilderConfig(name="monero-tests-ubuntu-16.04-i686",
      slavenames=["linux-i386"],
      factory=testsFactory))

c['builders'].append(
    util.BuilderConfig(name="monero-tests-ubuntu-16.04-amd64",
      slavenames=["linux-amd64"],
      factory=testsFactory))

c['builders'].append(
    util.BuilderConfig(name="monero-tests-windows-10-amd64",
      slavenames=["win64"],
      factory=testsWin64Factory))

c['builders'].append(
    util.BuilderConfig(name="monero-tests-freebsd-10.3-amd64",
      slavenames=["freebsd64"],
      factory=testsFactory))

c['builders'].append(
    util.BuilderConfig(name="monero-tests-ubuntu-16.04-armv7",
      slavenames=["arm7"],
      factory=testsFactory))

c['builders'].append(
    util.BuilderConfig(name="monero-tests-debian-armv8",
      slavenames=["arm8"],
      factory=testsFactory))

c['builders'].append(
    util.BuilderConfig(name="kovri-static-ubuntu-i686",
      slavenames=["linux-i386"],
      factory=kovriStaticFactory))

c['builders'].append(
    util.BuilderConfig(name="kovri-static-osx",
      slavenames=["osx-10.10"],
      factory=kovriStaticFactory))

c['builders'].append(
    util.BuilderConfig(name="kovri-static-ubuntu-amd64",
      slavenames=["linux-amd64"],
      factory=kovriStaticFactory))

c['builders'].append(
    util.BuilderConfig(name="kovri-static-ubuntu-arm7",
      slavenames=["arm7"],
      factory=kovriStaticFactory))

c['builders'].append(
    util.BuilderConfig(name="kovri-static-debian-arm8",
      slavenames=["arm8"],
      factory=kovriStaticFactory))

c['builders'].append(
    util.BuilderConfig(name="kovri-static-dragonflybsd-amd64",
      slavenames=["dragonfly-4.6"],
      factory=kovriStaticBsdFactory))

c['builders'].append(
    util.BuilderConfig(name="kovri-static-freebsd64",
      slavenames=["freebsd64"], env={'CC': 'clang36', 'CXX': 'clang++36'},
      factory=kovriStaticBsdFactory))

c['builders'].append(
    util.BuilderConfig(name="kovri-static-openbsd-amd64",
      slavenames=["openbsd"], env={'CC': 'egcc', 'CXX': 'eg++'},
      factory=kovriStaticBsdFactory))

c['builders'].append(
    util.BuilderConfig(name="kovri-static-win32",
      slavenames=["win32"],
      factory=kovriStaticWin32Factory))

c['builders'].append(
    util.BuilderConfig(name="kovri-static-win64",
      slavenames=["win64"],
      factory=kovriStaticWin64Factory))

# STATUS TARGETS

# 'status' is a list of Status Targets. The results of each build will be
# pushed to these targets. buildbot/status/*.py has a variety to choose from,
# including web pages, email senders, and IRC bots.

c['status'] = []

from buildbot.status import html
from buildbot.status.web import authz, auth
secrets = json.load(open('secrets.json'))

authz_cfg=authz.Authz(
    gracefulShutdown = 'auth',
    forceBuild = 'auth', 
    forceAllBuilds = 'auth',  
    pingBuilder = 'auth',
    stopBuild = 'auth',
    stopAllBuilds = 'auth',
    cancelPendingBuild = 'auth',
    pauseSlave = 'auth',
    cancelAllPendingBuilds = 'auth',
)
c['status'].append(html.WebStatus(http_port=8010,authz=authz_cfg, 
                                   change_hook_dialects={
				       'github':{
        				    'secret': secrets['gh_change_hook'],
            			            'strict': True
        					} 
					
					}))

from buildbot.plugins import status

irc = status.IRC('irc.freenode.org', 'xmr_buildbot',
                 useColors=True,
                 channels=[{"channel": "#monero-bots"}
],
		 allowForce=True,
                 notify_events={
                   'started': 0,
		   'finished': 0,
		   'failure': 1,
                   'success': 1,
	           'exception': 1,
                   'successToFailure': 1,
                   'failureToSuccess': 1
                 })

c['status'].append(irc)

# Github status reporter
from buildbot.plugins import status, util

repoOwner = util.Interpolate("%(prop:github_repo_owner)s")
repoName = util.Interpolate("%(prop:github_repo_name)s")
sha = util.Interpolate("%(src::revision)s")
context = util.Interpolate("buildbot/%(prop:buildername)s")
gs = status.GitHubStatus(token=secrets['github_token'],
                         repoOwner=repoOwner,
                         repoName=repoName,
                         sha=sha,
                         context=context,
                         startDescription='Build started.',
                         endDescription='Build done.')
c['status'].append(gs)

# PROJECT IDENTITY

# the 'title' string will appear at the top of this buildbot
# installation's html.WebStatus home page (linked to the
# 'titleURL') and is embedded in the title of the waterfall HTML page.

c['title'] = 'Monero Project'
c['titleURL'] = 'https://getmonero.org/'

c['buildbotURL'] = 'https://build.getmonero.org/'

# DB URL

c['db'] = {
    'db_url':'sqlite:///state.sqlite',
}