osmith has uploaded this change for review.

View Change

obs: build_binpkg: add --run-shell-on-error arg

Allow easy inspection of the build dir inside docker on error.

Related: OS#5737
Change-Id: I218c3189d36d24c64cbd7b9eab379aff8ce2bee2
---
M scripts/obs/build_binpkg.py
A scripts/obs/data/build.sh
M scripts/obs/lib/docker.py
3 files changed, 32 insertions(+), 6 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/osmo-ci refs/changes/94/29994/1
diff --git a/scripts/obs/build_binpkg.py b/scripts/obs/build_binpkg.py
index 27817e2..a34a699 100755
--- a/scripts/obs/build_binpkg.py
+++ b/scripts/obs/build_binpkg.py
@@ -29,6 +29,8 @@
f" distro (default: {distro_default})")
parser.add_argument("-j", "--jobs", type=int, default=jobs_default,
help=f"parallel running jobs (default: {jobs_default})")
+ parser.add_argument("-r", "--run-shell-on-error", action="store_true",
+ help="run an interactive shell if the build fails")
parser.add_argument("-v", "--verbose", action="store_true",
help="always print shell commands and their output,"
" instead of only printing them on error")
@@ -52,11 +54,18 @@

env = {"JOBS": str(args.jobs),
"PACKAGE": args.package,
- "BUILDUSER": os.environ["USER"]}
+ "BUILDUSER": os.environ["USER"],
+ "PACKAGEFORMAT": "deb"}

- script_path = "data/build_deb.sh"
+ docker_args = []
+ if args.run_shell_on_error:
+ env["RUN_SHELL_ON_ERROR"] = "1"
+ docker_args += ["-i", "-t"]
+
+ script_path = "data/build.sh"
+
if not distro.startswith("debian:"):
- script_path = "data/build_rpm.sh"
+ env["PACKAGEFORMAT"] = "rpm"

if args.docker:
image_type = "build_binpkg"
@@ -71,7 +80,8 @@
lib.docker.run_in_docker_and_exit(script_path,
image_type=image_type,
distro=distro,
- pass_argv=False, env=env)
+ pass_argv=False, env=env,
+ docker_args=docker_args)
else:
lib.run_cmd(["sudo", "-E", script_path], env=env,
cwd=lib.config.path_top)
diff --git a/scripts/obs/data/build.sh b/scripts/obs/data/build.sh
new file mode 100755
index 0000000..7dfbda7
--- /dev/null
+++ b/scripts/obs/data/build.sh
@@ -0,0 +1,15 @@
+#!/bin/sh -e
+
+if ! data/build_"$PACKAGEFORMAT".sh; then
+ echo
+ echo "ERROR: build failed!"
+ echo
+ if [ -n "$RUN_SHELL_ON_ERROR" ]; then
+ bash
+ fi
+ exit 1
+fi
+
+echo
+echo "Build successful!"
+echo
diff --git a/scripts/obs/lib/docker.py b/scripts/obs/lib/docker.py
index 87611e3..6bcf024 100644
--- a/scripts/obs/lib/docker.py
+++ b/scripts/obs/lib/docker.py
@@ -51,7 +51,7 @@

def run_in_docker_and_exit(script_path, add_oscrc=False,
image_type="build_srcpkg", distro=None,
- pass_argv=True, env={}):
+ pass_argv=True, env={}, docker_args=[]):
"""
:param script_path: what to run inside docker, relative to scripts/obs/
:param add_oscrc: put user's oscrc in docker (contains obs credentials!)
@@ -59,6 +59,7 @@
:param distro: which Linux distribution to use, e.g. "debian:11"
:param pass_argv: pass arguments from sys.argv to the script
:param env: dict of environment variables
+ :param docker_args: extra arguments to pass to docker
"""
if "INSIDE_DOCKER" in os.environ:
return
@@ -92,13 +93,13 @@
"-e", "PYTHONUNBUFFERED=1",
"-v", f"{lib.config.path_top}:/obs"]

-
for env_key, env_val in env.items():
cmd += ["-e", f"{env_key}={env_val}"]

if oscrc:
cmd += ["-v", f"{oscrc}:/home/user/.oscrc"]

+ cmd += docker_args
cmd += [image_name, f"/obs/{script_path}"]

if pass_argv:

To view, visit change 29994. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: osmo-ci
Gerrit-Branch: master
Gerrit-Change-Id: I218c3189d36d24c64cbd7b9eab379aff8ce2bee2
Gerrit-Change-Number: 29994
Gerrit-PatchSet: 1
Gerrit-Owner: osmith <osmith@sysmocom.de>
Gerrit-MessageType: newchange