diff --git a/lib/renderers.py b/lib/renderers.py index c12d036..f3aff34 100644 --- a/lib/renderers.py +++ b/lib/renderers.py @@ -1,38 +1,24 @@ from buildbot.plugins import util import re -def _is_github(props): - if re.search(r'[/@]github.com', props.getProperty('repository')): - return True - return False - -@util.renderer -def is_github(props): - return _is_github(props) - -@util.renderer -def isnt_github(props): - return not _is_github(props) - -def _is_gitea(props): - if re.search(r'[/@]git.bitmessage.org', props.getProperty('repository'), re.I): - return True - return False - -@util.renderer -def is_gitea(props): - return _is_gitea(props) - -@util.renderer -def isnt_gitea(props): - return not _is_gitea(props) @util.renderer def is_build_script_available(props): # Actual check will got here - return props.getProperty('jobname', default='') != '' + return props.getProperty("jobname", default="") != "" + + +@util.renderer +def isnt_build_script_available(props): + return not is_build_script_available(props) + @util.renderer def is_test_script_available(props): # Actual check will got here - return props.getProperty('jobname', default='') != '' \ No newline at end of file + return props.getProperty("jobname", default="") != "" + + +@util.renderer +def isnt_test_script_available(props): + return not is_test_script_available(props) diff --git a/multibuild.py b/multibuild.py index 94bf1b2..d1a8f3c 100644 --- a/multibuild.py +++ b/multibuild.py @@ -16,6 +16,8 @@ import requests import re from buildbot.plugins import steps, util +from .lib.renderers import * + ty = "/change_hook/base" request_headers = { "Content-Type": "application/x-www-form-urlencoded", @@ -33,11 +35,15 @@ RUN apt-get install -yq --no-install-suggests --no-install-recommends \ buildbot-worker git subversion python3-dev libffi-dev python3-setuptools \ python3-pip dumb-init curl openssh-client wget +# buildbot entrypoint +RUN wget -O /usr/local/bin/buildbot_entrypoint.sh https://git.bitmessage.org/Bitmessage/buildbot-scripts/raw/branch/master/docker/bionic/entrypoint.sh +RUN chmod +x /usr/local/bin/buildbot_entrypoint.sh + RUN echo 'buildbot ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers USER buildbot -ENTRYPOINT /entrypoint.sh "$BUILDMASTER" "$WORKERNAME" "$WORKERPASS" +ENTRYPOINT /usr/local/bin/buildbot_entrypoint.sh "$BUILDMASTER" "$WORKERNAME" "$WORKERPASS" """ @@ -46,7 +52,7 @@ dockerfile_extra_contents_bionic = """ # Buildbot RUN apt-get install -yq --no-install-suggests --no-install-recommends \ buildbot-slave git subversion python3-dev libffi-dev python3-setuptools \ - python3-pip dumb-init curl openssh-client + python3-pip dumb-init curl openssh-client wget # buildbot entrypoint RUN wget -O /usr/local/bin/buildbot_entrypoint.sh https://git.bitmessage.org/Bitmessage/buildbot-scripts/raw/branch/master/docker/bionic/entrypoint.sh @@ -93,10 +99,12 @@ def get_dockerfile_contents(path, os_codename): with open(path, "r") as file: contents = file.read() # remove any line containing CMD or ENTRYFILE keywords - contents = re.sub(r"(?m)^CMD.*$", "", contents) - contents = re.sub(r"(?m)^ENTRYFILE.*$", "", contents) + re.sub(r"(?m)^(CMD|ENTRYFILE).*$", "", contents) - return contents + eval("dockerfile_extra_contents_" + os_codename) + return contents + { + "focal": dockerfile_extra_contents_focal, + "bionic": dockerfile_extra_contents_bionic, + }[os_codename] def trigger_child_hooks(buildbotUrl: str, os_codename: str, directory=".buildbot"): @@ -115,11 +123,13 @@ def trigger_child_hooks(buildbotUrl: str, os_codename: str, directory=".buildbot test_script_exists = True # make a post request - request_data["dockerfile"] = get_dockerfile_contents( - join(directory, job, "Dockerfile"), os_codename - ) - request_data["build_script_available"] = str(build_script_exists) - request_data["test_script_available"] = str(test_script_exists) + request_data["properties"] = { + "dockerfile": get_dockerfile_contents( + join(directory, job, "Dockerfile"), os_codename + ), + "build_script_available": is_build_script_available(build_script_exists), + "test_script_available": is_test_script_available(test_script_exists), + } requests.post(request_url, headers=request_headers, data=request_data) @@ -158,7 +168,9 @@ def add_child_build_sh_step(build_factory, job, directory=".buildbot"): build_factory.addStep( steps.ShellCommand( name="build_" + job, - command=["bash", "-c", "cd " + join(directory, job) + " && ./build.sh"], + command=["bash", "-c", join(directory, job, "build.sh")], + doStepIf=is_build_script_available, + hideStepIf=isnt_build_script_available, ) ) @@ -170,7 +182,9 @@ def add_child_test_sh_step(build_factory, job, directory=".buildbot"): build_factory.addStep( steps.ShellCommand( name="test_" + job, - command=["bash", "-c", "cd " + join(directory, job) + " && ./test.sh"], + command=["bash", "-c", join(directory, job, "test.sh")], + doStepIf=is_test_script_available, + hideStepIf=isnt_test_script_available, ) )