QuasarAppCI/BuildBotLib/asssetsinstaller.py

165 lines
3.6 KiB
Python
Raw Normal View History

2019-12-13 16:09:43 +03:00
# This Python file uses the following encoding: utf-8
import BuildBotLib.basemodule as base
from buildbot.plugins import util, steps
import os
2019-12-17 18:35:28 +03:00
from pathlib import Path
2019-12-13 16:09:43 +03:00
2019-12-13 17:05:49 +03:00
LAST_FORMAT = [""]
2019-12-17 18:35:28 +03:00
AndroidBaseDir = str(Path.home()) + "/Android"
2019-12-18 10:27:30 +03:00
MULTIPLE_SH_COMMAND = ["/bin/bash", "-c"]
2019-12-17 10:37:56 +03:00
def isInit(step):
return step.getProperty('module') == 'init'
2019-12-13 16:09:43 +03:00
@util.renderer
2019-12-16 15:48:24 +03:00
def RemoveOldData(props):
2019-12-13 16:09:43 +03:00
2019-12-18 10:17:00 +03:00
cmd = "mkdir -p " + AndroidBaseDir
2019-12-16 15:48:24 +03:00
2019-12-17 10:37:56 +03:00
if os.path.exists(AndroidBaseDir):
2019-12-18 10:27:30 +03:00
cmd = "rm -rdf " + AndroidBaseDir + " ; " + cmd
2019-12-16 15:48:24 +03:00
2019-12-18 10:12:49 +03:00
return MULTIPLE_SH_COMMAND + [cmd]
2019-12-16 15:48:24 +03:00
@util.renderer
def NDKDownloadCMD(props):
link = props.getProperty("link")
2019-12-13 16:09:43 +03:00
2019-12-13 17:00:59 +03:00
format = link[link.rfind('.'):].lower()
2019-12-13 17:05:49 +03:00
LAST_FORMAT[0] = format
2019-12-13 16:09:43 +03:00
2019-12-18 10:02:30 +03:00
return ["curl", link, "--output", AndroidBaseDir + "/temp" + format]
2019-12-13 16:09:43 +03:00
@util.renderer
def ExtractCMD(props):
2019-12-13 17:05:49 +03:00
format = LAST_FORMAT[0]
2019-12-13 16:09:43 +03:00
2019-12-18 10:02:30 +03:00
res = ["echo", "format '" + format + "' not supported"]
2019-12-13 16:09:43 +03:00
2019-12-13 16:48:52 +03:00
if format == ".zip":
2019-12-18 10:02:30 +03:00
res = ["unzip", AndroidBaseDir + "/temp" + format,
"-d", AndroidBaseDir]
2019-12-13 16:39:15 +03:00
2019-12-16 15:11:58 +03:00
return res
@util.renderer
2019-12-18 10:22:56 +03:00
def InstallCMD(props):
2019-12-16 15:11:58 +03:00
module = props.getProperty("module")
2019-12-17 10:37:56 +03:00
version = props.getProperty("version")
unit_to_multiplier = {
2019-12-18 10:54:01 +03:00
'SDK': 'platform-tools;tools;platforms;android-'+version,
'NDK': 'ndk-bundle'
2019-12-17 10:37:56 +03:00
}
2019-12-18 10:39:47 +03:00
return ["sdkmanager", unit_to_multiplier.get(module, "--list")]
2019-12-17 10:37:56 +03:00
@util.renderer
2019-12-18 10:22:56 +03:00
def ConfigureCMD(props):
2019-12-16 15:11:58 +03:00
2019-12-17 10:37:56 +03:00
format = LAST_FORMAT[0]
2019-12-18 10:02:30 +03:00
res = ["echo", "Configure failed"]
2019-12-16 15:11:58 +03:00
if format == ".zip":
2019-12-16 14:49:30 +03:00
2019-12-17 10:37:56 +03:00
all_subdirs = base.allSubdirsOf(AndroidBaseDir)
2019-12-13 18:08:57 +03:00
latest_subdir = max(all_subdirs, key=os.path.getmtime)
2019-12-18 09:42:47 +03:00
res = "mv " + latest_subdir + " " + AndroidBaseDir + "/tools"
2019-12-18 10:31:10 +03:00
res += " ; ln -sf " + AndroidBaseDir + "/tools/bin/sdkmanager "
res += str(Path.home()) + "/.local/bin/sdkmanager"
2019-12-18 10:47:36 +03:00
res += " ; yes | sdkmanager --licenses"
2019-12-16 15:11:58 +03:00
2019-12-18 10:22:56 +03:00
return MULTIPLE_SH_COMMAND + [res]
2019-12-13 16:09:43 +03:00
def getFactory():
2019-12-13 17:46:43 +03:00
factory = base.getFactory()
2019-12-13 16:09:43 +03:00
2019-12-16 15:48:24 +03:00
factory.addStep(
2019-12-17 19:01:01 +03:00
steps.ShellCommand(
2019-12-16 15:48:24 +03:00
command=RemoveOldData,
name='rm old item',
2019-12-17 10:37:56 +03:00
doStepIf=isInit,
2019-12-16 15:48:24 +03:00
description='rm old',
2019-12-16 15:54:35 +03:00
haltOnFailure=True,
2019-12-16 15:48:24 +03:00
)
)
2019-12-13 16:09:43 +03:00
factory.addStep(
2019-12-17 19:01:01 +03:00
steps.ShellCommand(
2019-12-13 17:46:43 +03:00
command=NDKDownloadCMD,
name='download new item',
2019-12-17 10:37:56 +03:00
doStepIf=isInit,
2019-12-13 17:46:43 +03:00
description='download new item',
2019-12-16 15:54:35 +03:00
haltOnFailure=True,
2019-12-13 16:09:43 +03:00
)
2019-12-13 17:46:43 +03:00
)
2019-12-13 16:09:43 +03:00
factory.addStep(
2019-12-17 19:01:01 +03:00
steps.ShellCommand(
2019-12-13 17:46:43 +03:00
command=ExtractCMD,
name='extract new item',
2019-12-17 10:37:56 +03:00
doStepIf=isInit,
2019-12-13 17:46:43 +03:00
description='extract new item',
2019-12-16 15:54:35 +03:00
haltOnFailure=True,
2019-12-13 16:09:43 +03:00
)
2019-12-13 17:46:43 +03:00
)
2019-12-13 16:09:43 +03:00
2019-12-16 15:11:58 +03:00
factory.addStep(
2019-12-17 19:01:01 +03:00
steps.ShellCommand(
2019-12-16 15:11:58 +03:00
command=ConfigureCMD,
name='configure new item',
2019-12-17 10:37:56 +03:00
doStepIf=isInit,
description='configure new item',
haltOnFailure=True,
)
)
factory.addStep(
2019-12-17 19:01:01 +03:00
steps.ShellCommand(
2019-12-17 10:37:56 +03:00
command=InstallCMD,
name='install module',
doStepIf=lambda step: not isInit(step),
2019-12-16 15:11:58 +03:00
description='configure new item',
2019-12-16 15:54:35 +03:00
haltOnFailure=True,
2019-12-16 15:11:58 +03:00
)
)
2019-12-13 16:09:43 +03:00
return factory
def getRepo():
2019-12-13 17:46:43 +03:00
return ""
2019-12-13 16:09:43 +03:00
def getPropertyes():
return [
util.ChoiceStringParameter(
2019-12-13 17:46:43 +03:00
name='module',
2019-12-18 10:54:01 +03:00
choices=["init", "SDK", "NDK"],
2019-12-17 10:37:56 +03:00
default="init"
2019-12-13 17:46:43 +03:00
),
util.StringParameter(
name='link',
label="url to download item",
default=""
2019-12-13 16:09:43 +03:00
),
2019-12-17 10:37:56 +03:00
util.StringParameter(
name='version',
label="Version",
default=""
),
2019-12-13 16:09:43 +03:00
]