diff --git a/BuildBotLib/BuildBot.pyproject b/BuildBotLib/BuildBot.pyproject index 3fac077..86ef444 100644 --- a/BuildBotLib/BuildBot.pyproject +++ b/BuildBotLib/BuildBot.pyproject @@ -22,6 +22,7 @@ "secretManager.py", "NPM.py", "git/gitBin.sh", - "asssetsinstaller.py" + "asssetsinstaller.py", + "qifRepogen.py" ] } diff --git a/BuildBotLib/buildBotShedulers.py b/BuildBotLib/buildBotShedulers.py index 92a6656..4a526c1 100644 --- a/BuildBotLib/buildBotShedulers.py +++ b/BuildBotLib/buildBotShedulers.py @@ -24,27 +24,32 @@ class BuildBotShedulers(BuildBotModule): def initScheduler(self): + buildersCode = ['LinuxBuilder', + 'AndroidBuilder', + 'WindowsBuilder', + ] + + buildersRepo = ['LinuxBuilder', + 'WindowsBuilder', + ] + self.masterConf['schedulers'] = self.shedulers + [ schedulers.AnyBranchScheduler( name='github', change_filter=util.ChangeFilter(project_re="qmake-*"), - builderNames=['LinuxBuilder', - 'AndroidBuilder', - 'WindowsBuilder', - ], + builderNames=buildersCode, properties={ 'clean': True, 'test': True, 'release': False, - 'deploy': False, - 'Linux': True, - 'Windows': True, - 'Android': True - + 'deploy': False }, treeStableTimer=None ), + schedulers.Triggerable(name="repogen", + builderNames=buildersRepo) + ] return self.getMasterConf() diff --git a/BuildBotLib/make.py b/BuildBotLib/make.py index 1f1634b..bc9355b 100644 --- a/BuildBotLib/make.py +++ b/BuildBotLib/make.py @@ -5,11 +5,13 @@ from BuildBotLib.basemodule import BaseModule from buildbot.plugins import util, steps import datetime from BuildBotLib.secretManager import SecretManager +import hashlib class Make(BaseModule): def __init__(self, platform): BaseModule.__init__(self, platform) + self.tempRepoDir = "" def isClean(self, step): return step.getProperty('clean') @@ -29,10 +31,23 @@ class Make(BaseModule): return repo[repo.rfind('/'): len(repo) - 4] + "/" + now + def tempDirPrivate(self, props): + repo = str(props.getProperty('repository')) + now = datetime.datetime.now().strftime("(%H_%M_%S)_%m-%d-%Y") + + m = hashlib.md5() + m.update(repo[repo.rfind('/'): len(repo) - 4] + "/" + now) + + return m.hexdigest() + def destDir(self, props): return self.home + '/shared/' + self.destDirPrivate(props) + def tempDir(self, props): + self.tempRepoDir = self.home + '/rTemp/' + self.tempDirPrivate(props) + return self.tempRepoDir + def destDirUrl(self, props): return "http://quasarapp.ddns.net:3031" + self.destDirPrivate(props) @@ -157,6 +172,26 @@ class Make(BaseModule): 'release project', self.isRelease)] + if platform != BaseModule.P_Android: + + res += steps.DirectoryUpload( + workersrc=util.Interpolate('%(prop:repoFolder)s'), + masterdest=self.getWraper(self.tempDir), + doStepIf=self.getWraper(self.isRelease), + name='copy repository files', + description='copy repository files to temp folder', + ) + + @util.renderer + def tempDir(props): + return self.tempRepoDir + + res += [steps.Trigger(schedulerNames=['repogen'], + doStepIf=lambda step: self.isRelease(step), + set_properties={"tempPackage": self.tempDir, + "platform": platform} + )] + res += [self.generateStep(self.makeTarget('distclean'), platform, 'clear all data', @@ -224,5 +259,9 @@ class Make(BaseModule): label='Folder with buildet data', default="Distro" ), - + util.StringParameter( + name='repoFolder', + label='Folder with repository data', + default="Repo" + ), ] diff --git a/BuildBotLib/qifRepogen.py b/BuildBotLib/qifRepogen.py new file mode 100644 index 0000000..aa78720 --- /dev/null +++ b/BuildBotLib/qifRepogen.py @@ -0,0 +1,77 @@ +# This Python file uses the following encoding: utf-8 +from BuildBotLib.basemodule import BaseModule +from buildbot.plugins import util, steps + + +class QIFRepogen (BaseModule): + def __init__(self): + BaseModule.init(self, BaseModule.P_Linux) + self.repogen = "repogen" + + def getFactory(self): + factory = super().getFactory() + + def generateRepogenCmd(props): + repoLocation = props.getProperty('repoLocation') + "/" + repoLocation += props.getProperty('platform') + tempPackage = props.getProperty('tempPackage') + + cmd = [self.repogen, + "--update-new-components", + "-p", + tempPackage, + repoLocation + ] + + return cmd + + factory.addStep( + steps.ShellCommand( + command=self.getWraper(generateRepogenCmd), + haltOnFailure=True, + name='Generate repository', + description='Generate repository', + ) + ) + + def generateRemoveCmd(props): + tempPackage = props.getProperty('tempPackage') + + cmd = ["rm", + "-rdf", + tempPackage + ] + + return cmd + + factory.addStep( + steps.ShellCommand( + command=self.getWraper(generateRemoveCmd), + haltOnFailure=True, + name='Remove old Data', + description='Remove old Data', + ) + ) + + return factory + + def getPropertyes(self): + return [ + util.StringParameter( + name='tempPackage', + label='Folder with temp value for packing', + default="" + ), + + util.StringParameter( + name='platform', + label='target platform (linux of windows)', + default=BaseModule.P_Linux + ), + + util.StringParameter( + name='repoLocation', + label='repository location', + default=self.home + "/repo/" + ), + ]