Added functions to add more steps to a buildFactory

This commit is contained in:
Shashi 2021-12-25 10:19:17 +05:30
parent 1432e510a1
commit 9a55687ec6
Signed by untrusted user: Ss_singh
GPG Key ID: C1A296E379639C12

View File

@ -14,18 +14,19 @@ from os import walk
from os.path import exists, isfile, join, listdir
import requests
import re
from buildbot.plugins import steps, util
ty = '/change_hook/base'
ty = "/change_hook/base"
request_headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'text/plain'
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "text/plain",
}
request_data = {
'project': 'testproject',
'comments': 'testcomment',
"project": "testproject",
"comments": "testcomment",
}
dockerfile_extra_contents_focal = '''
dockerfile_extra_contents_focal = """
# Buildbot
RUN apt-get install -yq --no-install-suggests --no-install-recommends \
@ -38,9 +39,9 @@ USER buildbot
ENTRYPOINT /entrypoint.sh "$BUILDMASTER" "$WORKERNAME" "$WORKERPASS"
'''
"""
dockerfile_extra_contents_bionic = '''
dockerfile_extra_contents_bionic = """
# Buildbot
RUN apt-get install -yq --no-install-suggests --no-install-recommends \
@ -57,7 +58,8 @@ USER buildbot
ENTRYPOINT /usr/local/bin/buildbot_entrypoint.sh "$BUILDMASTER" "$WORKERNAME" "$WORKERPASS"
'''
"""
def list_jobs(directory=".buildbot"):
"""
@ -65,10 +67,10 @@ def list_jobs(directory=".buildbot"):
"""
results = []
for _ in next(walk(directory))[1]:
if exists(join(directory, _, "Dockerfile")) \
and (exists(join(directory, _, "build.sh"))
or exists(join(directory, _, "test.sh"))
):
if exists(join(directory, _, "Dockerfile")) and (
exists(join(directory, _, "build.sh"))
or exists(join(directory, _, "test.sh"))
):
results.append(_)
return results
@ -83,21 +85,23 @@ def find_artifacts(directory="out"):
continue
return join(directory, _)
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:
"""
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)
contents = re.sub(r"(?m)^CMD.*$", "", contents)
contents = re.sub(r"(?m)^ENTRYFILE.*$", "", contents)
return contents + eval("dockerfile_extra_contents_" + os_codename)
def trigger_child_hooks(buildbotUrl:str, os_codename:str, directory=".buildbot"):
def trigger_child_hooks(buildbotUrl: str, os_codename: str, directory=".buildbot"):
request_url = buildbotUrl + ty
# List all jobs in the directory
jobs = list_jobs(directory)
@ -109,16 +113,72 @@ def trigger_child_hooks(buildbotUrl:str, os_codename:str, directory=".buildbot")
build_script_exists = True
if exists(join(directory, job, "test.sh")):
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["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)
def add_parent_step(build_factory, jobname, repository, branch):
"""
Add a step to the parent build factory that will trigger the child hooks
"""
build_factory.addStep(
steps.SetPropertyFromCommand(
name="Get OS codename",
command="grep ^VERSION_CODENAME= /etc/os-release | cut -d= -f2",
property="os_codename",
)
)
build_factory.addStep(
steps.ShellCommand(
name="Execute multibuild script",
command=[
"python",
"multibuild.py",
jobname,
repository,
branch,
"https://buildbot.bitmessage.org",
util.Interpolate("%(prop:os_codename)s"),
],
)
)
def add_child_build_sh_step(build_factory, job, directory=".buildbot"):
"""
Add a step to the build factory
"""
build_factory.addStep(
steps.ShellCommand(
name="build_" + job,
command=["bash", "-c", "cd " + join(directory, job) + " && ./build.sh"],
)
)
def add_child_test_sh_step(build_factory, job, directory=".buildbot"):
"""
Add a step to the build factory
"""
build_factory.addStep(
steps.ShellCommand(
name="test_" + job,
command=["bash", "-c", "cd " + join(directory, job) + " && ./test.sh"],
)
)
if __name__ == "__main__":
# expect jobname, repository, branch, buildbotUrl, os_codename from command line args
import sys
if len(sys.argv) == 6:
jobname = sys.argv[1]
repository = sys.argv[2]
@ -127,10 +187,12 @@ if __name__ == "__main__":
os_codename = sys.argv[5]
# add these into the request_data
request_data['jobname'] = jobname
request_data['repository'] = repository
request_data['branch'] = branch
request_data["jobname"] = jobname
request_data["repository"] = repository
request_data["branch"] = branch
trigger_child_hooks(buildbotUrl, os_codename)
else:
print("Usage: python3 multibuild.py <jobname> <repository> <branch> <buildbotUrl> <os_codename>")
print(
"Usage: python3 multibuild.py <jobname> <repository> <branch> <buildbotUrl> <os_codename>"
)