osmith has submitted this change. ( https://gerrit.osmocom.org/c/osmo-ci/+/29598 )
Change subject: obs: prepare for multiple dockerfiles ......................................................................
obs: prepare for multiple dockerfiles
Rename Dockerfile to build_srcpkg.Dockerfile and adjust related code to allow using a different Dockerfile for building the binary packages in a future patch.
Related: OS#2385 Change-Id: I8ef7944a4a81acd6c915998f37139eebad2b2d3e --- R scripts/obs/data/build_srcpkg.Dockerfile M scripts/obs/lib/config.py M scripts/obs/lib/docker.py 3 files changed, 27 insertions(+), 7 deletions(-)
Approvals: fixeria: Looks good to me, approved pespin: Looks good to me, but someone else must approve Jenkins Builder: Verified
diff --git a/scripts/obs/data/Dockerfile b/scripts/obs/data/build_srcpkg.Dockerfile similarity index 100% rename from scripts/obs/data/Dockerfile rename to scripts/obs/data/build_srcpkg.Dockerfile diff --git a/scripts/obs/lib/config.py b/scripts/obs/lib/config.py index 79a7849..52b84fb 100644 --- a/scripts/obs/lib/config.py +++ b/scripts/obs/lib/config.py @@ -111,4 +111,4 @@ "open5gs": "^v[0-9]*\.[0-9]*\.[0-9]*$", }
-docker_image_name = "debian-bullseye-osmocom-obs" +docker_distro_default = "debian:11" diff --git a/scripts/obs/lib/docker.py b/scripts/obs/lib/docker.py index 629f239..0a1f748 100644 --- a/scripts/obs/lib/docker.py +++ b/scripts/obs/lib/docker.py @@ -8,11 +8,20 @@ import lib.config
-def build_image(): - print(f"docker: building image {lib.config.docker_image_name}") +def get_image_name(distro, image_type): + ret = f"{distro}-osmocom-obs-{image_type}" + ret = ret.replace(":","-").replace("_","-") + return ret + + +def build_image(distro, image_type): + image_name = get_image_name(distro, image_type), + print(f"docker: building image {image_name}") lib.run_cmd(["docker", "build", + "--build-arg", f"DISTRO={distro}", "--build-arg", f"UID={os.getuid()}", - "-t", lib.config.docker_image_name, + "-t", get_image_name(distro, image_type), + "-f", f"{lib.config.path_top}/data/{image_type}.Dockerfile", f"{lib.config.path_top}/data"])
@@ -28,7 +37,14 @@ exit(1)
-def run_in_docker_and_exit(script_path, add_oscrc=False): +def run_in_docker_and_exit(script_path, add_oscrc=False, + image_type="build_srcpkg", distro=None): + """ + :param script_path: what to run inside docker + :param add_oscrc: put user's oscrc in docker (contains obs credentials!) + :param image_type: which Dockerfile to use (data/{image_type}.Dockerfile) + :param distro: which Linux distribution to use, e.g. "debian:11" + """ if "INSIDE_DOCKER" in os.environ: return
@@ -36,6 +52,10 @@ print("ERROR: docker is not installed") exit(1)
+ if not distro: + distro = lib.config.docker_distro_default + image_name = get_image_name(distro, image_type) + oscrc = None if add_oscrc: oscrc = get_oscrc() @@ -44,7 +64,7 @@ # minutes or so, therefore print the output. No need to restore # set_cmds_verbose, as we use subprocess.run() below and exit afterwards. lib.set_cmds_verbose(True) - build_image() + build_image(distro, image_type)
cmd = ["docker", "run", "--rm", @@ -56,7 +76,7 @@ cmd += ["-v", f"{oscrc}:/home/user/.oscrc"]
script_path = f"/obs/{os.path.basename(script_path)}" - cmd += [lib.config.docker_image_name, script_path] + sys.argv[1:] + cmd += [image_name, script_path] + sys.argv[1:]
print(f"docker: running: {os.path.basename(script_path)} inside docker") ret = subprocess.run(cmd)