253 lines
7.1 KiB
Python
Raw Normal View History

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