Added parent hook and some renderer #1

Merged
PeterSurda merged 7 commits from Ss_singh/buildbot_multibuild:hooks into master 2021-12-26 09:05:49 +01:00
2 changed files with 59 additions and 6 deletions
Showing only changes of commit 1432e510a1 - Show all commits

View File

@ -13,6 +13,7 @@ Requires docker
from os import walk
from os.path import exists, isfile, join, listdir
import requests
import re
ty = '/change_hook/base'
request_headers = {
@ -24,6 +25,39 @@ request_data = {
'comments': 'testcomment',
}
dockerfile_extra_contents_focal = '''
# Buildbot
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
RUN echo 'buildbot ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
USER buildbot
ENTRYPOINT /entrypoint.sh "$BUILDMASTER" "$WORKERNAME" "$WORKERPASS"
'''
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
# 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 /usr/local/bin/buildbot_entrypoint.sh "$BUILDMASTER" "$WORKERNAME" "$WORKERPASS"
'''
def list_jobs(directory=".buildbot"):
"""
@ -49,7 +83,19 @@ def find_artifacts(directory="out"):
continue
return join(directory, _)
def trigger_child_hooks(buildbotUrl:str, directory=".buildbot"):
def get_dockerfile_contents(path, os_codename):
'''
Read contents of a Dockerfile and add extra contents for the given 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)
return contents + eval("dockerfile_extra_contents_" + os_codename)
Ss_singh marked this conversation as resolved
Review

How about just

contents = re.sub(r"(?m)^(CMD|ENTRYFILE).*$", "", contents)
How about just ``` contents = re.sub(r"(?m)^(CMD|ENTRYFILE).*$", "", contents) ```
def trigger_child_hooks(buildbotUrl:str, os_codename:str, directory=".buildbot"):
request_url = buildbotUrl + ty
# List all jobs in the directory
@ -65,25 +111,26 @@ def trigger_child_hooks(buildbotUrl:str, directory=".buildbot"):
test_script_exists = True
# make a post request
request_data['dockerfile'] = open(join(directory, job, "Dockerfile"), "r").read()
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)
requests.post(request_url, headers=request_headers, data=request_data)
if __name__ == "__main__":
# expect jobname, repository, branch from command line args
# expect jobname, repository, branch, buildbotUrl, os_codename from command line args
import sys
if len(sys.argv) == 5:
if len(sys.argv) == 6:
jobname = sys.argv[1]
Ss_singh marked this conversation as resolved
Review

proxied properties are missing

proxied properties are missing
Review

I think they are still missing. Like repository and branch.

I think they are still missing. Like `repository` and `branch`.
Review

Well, they were already being added before the hook function was getting triggered but anyways, now I've them placed altogether.

Well, they were already being added before the hook function was getting triggered but anyways, now I've them placed altogether.
repository = sys.argv[2]
branch = sys.argv[3]
buildbotUrl = sys.argv[4]
os_codename = sys.argv[5]
# add these into the request_data
request_data['jobname'] = jobname
request_data['repository'] = repository
request_data['branch'] = branch
Review

I think repository and branch are a level higher.

I think `repository` and `branch` are a level higher.
trigger_child_hooks(buildbotUrl)
trigger_child_hooks(buildbotUrl, os_codename)
else:
print("Usage: python3 multibuild.py <jobname> <repository> <branch> <buildbotUrl>")
print("Usage: python3 multibuild.py <jobname> <repository> <branch> <buildbotUrl> <os_codename>")

View File

@ -61,6 +61,11 @@ travis_bash.addStep(
)
)
travis_bash.addStep(steps.SetPropertyFromCommand(
command="grep ^VERSION_CODENAME= /etc/os-release | cut -d= -f2",
property="os_codename"
))
# execute multibuild.py
travis_bash.addStep(
steps.ShellCommand(
@ -72,6 +77,7 @@ travis_bash.addStep(
util.Property("repository"),
util.Property("branch"),
"https://buildbot.bitmessage.org",
util.Interpolate("%(prop:os_codename)s"),
],
)
)