2019-12-26 18:05:13 +03:00

253 lines
7.0 KiB
Python

# This Python file uses the following encoding: utf-8
from BuildBotLib.basemodule import BaseModule
from buildbot.plugins import util, steps
import datetime
from BuildBotLib.secretManager import SecretManager
class Make(BaseModule):
def __init__(self):
BaseModule.__init__(self)
def isClean(self, step):
return step.getProperty('clean')
def isDeploy(self, step):
return step.getProperty('deploy')
def isRelease(self, step):
return step.getProperty('release')
def isTest(self, step):
return step.getProperty('test')
def destDirPrivate(self, props):
repo = str(props.getProperty('repository'))
now = datetime.datetime.now().strftime("(%H_%M)_%m-%d-%Y")
return repo[repo.rfind('/'): len(repo) - 4] + "/" + now
def destDir(self, props):
return self.home + '/shared/' + self.destDirPrivate(props)
def destDirUrl(self, props):
return "http://quasarapp.ddns.net:3031" + self.home
def permission(self, props):
return ["chmod", "-R", "775", self.home + '/shared']
def linuxXmakeCmd(self, props):
command = [
'qmake-linux',
"-r",
"CONFIG+=qtquickcompiler",
'ONLINE="~/repo"'
]
return command
def windowsXmakeCmd(self, props):
command = [
'qmake-windows',
'-spec', 'win32-g++',
"-r",
"CONFIG+=qtquickcompiler",
'ONLINE="~/repo"'
]
return command
def androidXmakeCmd(self, props):
secret = SecretManager(self.home + "/buildBotSecret/secret.json")
command = [
'qmake-android',
'-spec', 'android-clang',
"-r",
"CONFIG+=qtquickcompiler",
'SIGN_PATH="' + secret.getValue('SIGPATH') + '"',
'SIGN_ALIES="quasarapp"',
'SIGN_STORE_PASSWORD="' + secret.getValue('SIGPASS') + '"'
]
return command
def androidXmakeEnv(self, props):
return {}
def windowsXmakeEnv(self, props):
return {}
def linuxXmakeEnv(self, props):
return {}
def makePrefix(self):
return ""
def generateStep(self, cmd, platform, desc, checkFunc):
platformCgek = {
'linux': self.isLinux,
'windows': self.isWin,
'android': self.isAndroid,
}
@util.renderer
def envWraper(step):
platformEnv = {
'linux': self.linuxXmakeEnv,
'windows': self.windowsXmakeEnv,
'android': self.androidXmakeEnv,
}
return platformEnv[platform](step)
def dustepIf(step):
return checkFunc(step) and platformCgek[platform](step)
@util.renderer
def cmdWraper(step):
if isinstance(cmd, list):
return cmd
return cmd(step)
res = steps.ShellCommand(
command=cmdWraper,
haltOnFailure=True,
doStepIf=lambda step: dustepIf(step),
hideStepIf=lambda step: not dustepIf(step),
name=self.makePrefix() + 'Make ' + platform,
env=envWraper,
description=desc,
)
return res
def generatePlatformSteps(self, platform):
platformXcmd = {
'linux': self.linuxXmakeCmd,
'windows': self.windowsXmakeCmd,
'android': self.androidXmakeCmd,
}
res = []
res += [self.generateStep(platformXcmd[platform],
platform,
'generate make files for build the project',
lambda step: True)]
res += [self.generateStep('make clean',
platform,
'clean old data',
self.isClean)]
res += [self.generateStep(self.makeCommand,
platform,
'build project',
lambda step: True)]
res += [self.generateStep('make deploy',
platform,
'deploy project',
self.isDeploy)]
res += [self.generateStep('make test',
platform,
'test project',
self.isTest)]
res += [self.generateStep('make release',
platform,
'release project',
self.isRelease)]
res += [self.generateStep('make distclean',
platform,
'release project',
lambda step: True)]
return res
def getFactory(self):
factory = super().getFactory()
factory.addStep(
steps.Git(
repourl=util.Interpolate('%(prop:repository)s'),
branch=util.Interpolate('%(prop:branch)s'),
mode='full',
method='fresh',
submodules=True,
name='git operations',
description='operations of git like pull clone fetch',
)
)
factory.addSteps(self.generatePlatformSteps('linux'))
factory.addSteps(self.generatePlatformSteps('windows'))
factory.addSteps(self.generatePlatformSteps('android'))
factory.addStep(
steps.DirectoryUpload(
workersrc=util.Interpolate('%(prop:copyFolder)s'),
masterdest=self.destDir,
url=self.destDirUrl,
doStepIf=lambda step: self.isDeploy(step),
name='copy buildet files',
description='copy buildet files to shared folder',
)
)
factory.addStep(
steps.ShellCommand(
command=self.permission,
name='set permission',
haltOnFailure=True,
description='set permission for shared folder',
)
)
return factory
def getPropertyes(self):
base = super().getPropertyes()
return base + [
util.BooleanParameter(
name='clean',
label='clean old build ',
default=True
),
util.BooleanParameter(
name='deploy',
label='deploy project',
default=True
),
util.BooleanParameter(
name='test',
label='test project ',
default=True
),
util.BooleanParameter(
name='release',
label='release project',
default=False
),
util.StringParameter(
name='copyFolder',
label='Folder with buildet data',
default="Distro"
),
]