summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordd <dd@wx.tnyzeq.icu>2024-10-10 12:05:19 +0200
committerdd <dd@wx.tnyzeq.icu>2024-10-10 12:05:19 +0200
commit8d06493b0ef6eb8477f21e60ec2b35cce161c200 (patch)
tree4403f76dea1af983e596d5902da315a3a156f3b7
parent3a7acbc2c5d44edca9aeb512ca5d6b93d533b503 (diff)
downloadvyos-jenkins-8d06493b0ef6eb8477f21e60ec2b35cce161c200.tar.gz
vyos-jenkins-8d06493b0ef6eb8477f21e60ec2b35cce161c200.zip
added circinus build scripting support
-rwxr-xr-xnew/image_builder.py15
-rw-r--r--new/lib/scripting.py23
-rwxr-xr-xnew/package_builder.py14
3 files changed, 50 insertions, 2 deletions
diff --git a/new/image_builder.py b/new/image_builder.py
index 2659ea5..79b22be 100755
--- a/new/image_builder.py
+++ b/new/image_builder.py
@@ -17,6 +17,7 @@ from lib.debranding import Debranding
from lib.docker import Docker
from lib.git import Git
from lib.helpers import setup_logging, refuse_root, get_my_log_file, apt_dir, build_dir
+from lib.scripting import Scripting
class ImageBuilder:
@@ -28,7 +29,7 @@ class ImageBuilder:
docker = None
def __init__(self, branch, vyos_build_git, vyos_build_docker, vyos_mirror, extra_options, flavor, build_by,
- version, bind_addr, bind_port, keep_build, debranding: Debranding):
+ version, bind_addr, bind_port, keep_build, pre_build_hook, debranding: Debranding):
self.branch = branch
self.vyos_build_git = vyos_build_git
self.vyos_build_docker = vyos_build_docker
@@ -40,9 +41,11 @@ class ImageBuilder:
self.bind_addr = bind_addr
self.bind_port = bind_port
self.keep_build = keep_build
+ self.pre_build_hook = pre_build_hook
self.debranding = debranding
self.cwd = os.getcwd()
+ self.scripting = Scripting()
def build(self):
begin = monotonic()
@@ -86,6 +89,13 @@ class ImageBuilder:
now = datetime.now().astimezone().strftime("%Y-%m-%d")
version = "%s-%s" % (self.branch, now)
+ if self.pre_build_hook:
+ self.scripting.run(self.pre_build_hook, cwd=self.vyos_build_repo, vars={
+ "BRANCH": self.branch,
+ "VERSION": version,
+ "FLAVOR": self.flavor,
+ })
+
# build image
build_image_pieces = [
"sudo --preserve-env ./build-vyos-image",
@@ -223,6 +233,9 @@ if __name__ == "__main__":
parser.add_argument("--bind-addr", help="Bind local webserver to static address instead of automatic")
parser.add_argument("--bind-port", type=int, help="Bind local webserver to static port instead of random")
parser.add_argument("--keep-build", action="store_true", help="Keep previous vyos-build repository")
+ scripting_info = "the current working directory is the vyos-build repo used to build the image"
+ scripting_info += ", available environment variables: VYOS_BUILD_BRANCH, VYOS_BUILD_VERSION, VYOS_BUILD_FLAVOR"
+ parser.add_argument("--pre-build-hook", help="Script to execute before build, %s" % scripting_info)
debranding.populate_cli_parser(parser)
diff --git a/new/lib/scripting.py b/new/lib/scripting.py
new file mode 100644
index 0000000..22191aa
--- /dev/null
+++ b/new/lib/scripting.py
@@ -0,0 +1,23 @@
+import logging
+import os
+
+from lib.helpers import execute, ProcessException
+
+
+class Scripting:
+ def run(self, command, cwd, vars):
+ vars_formatted = {}
+ for name, value in vars.items():
+ variable_name = "VYOS_BUILD_%s" % name.upper()
+ vars_formatted[variable_name] = str(value)
+
+ env = os.environ.copy()
+ env.update(vars_formatted)
+
+ logging.info("Executing script '%s' with variables: %s" % (command, vars_formatted))
+ try:
+ execute(command, cwd=cwd, env=env, passthrough=True)
+ except ProcessException as e:
+ logging.exception(e)
+ logging.error("The user script '%s' failed, reason: %s" % (command, str(e)))
+ exit(1)
diff --git a/new/package_builder.py b/new/package_builder.py
index 7438519..b50f59f 100755
--- a/new/package_builder.py
+++ b/new/package_builder.py
@@ -13,6 +13,7 @@ from lib.docker import Docker
from lib.git import Git
from lib.github import GitHub
from lib.helpers import setup_logging, ProcessException, refuse_root, get_my_log_file, data_dir, build_dir, scripts_dir
+from lib.scripting import Scripting
class PackageBuilder:
@@ -23,7 +24,7 @@ class PackageBuilder:
docker = None
def __init__(self, branch, single_package, dirty_build, ignore_missing_binaries, skip_build, skip_apt,
- force_build, vyos_build_docker, rescan_packages, debranding: Debranding):
+ force_build, vyos_build_docker, rescan_packages, pre_build_hook, debranding: Debranding):
self.branch = branch
self.single_package = single_package
self.dirty_build = dirty_build
@@ -33,10 +34,12 @@ class PackageBuilder:
self.force_build = force_build
self.vyos_build_docker = vyos_build_docker
self.rescan_packages = rescan_packages
+ self.pre_build_hook = pre_build_hook
self.debranding = debranding
self.github = GitHub()
self.cache = Cache(os.path.join(data_dir, "builder-cache-%s.json" % self.branch), dict, {})
+ self.scripting = Scripting()
def build(self):
begin = monotonic()
@@ -129,6 +132,12 @@ class PackageBuilder:
self.debranding.remove_package_branding(repo_path, package["package_name"])
+ if self.pre_build_hook:
+ self.scripting.run(self.pre_build_hook, repo_path, vars={
+ "BRANCH": self.branch,
+ "PACKAGE_NAME": package["package_name"],
+ })
+
if package["build_type"] == "build.py":
my_directory = os.path.join(self.my_build_dir, "vyos-build", package["path"])
if not self.skip_build or new:
@@ -218,6 +227,9 @@ if __name__ == "__main__":
parser.add_argument("--rescan-packages", action="store_true")
parser.add_argument("--vyos-build-docker", default="vyos/vyos-build",
help="Default option uses vyos/vyos-build from dockerhub")
+ scripting_info = "the current working directory is the repo of given package"
+ scripting_info += ", available environment variables: VYOS_BUILD_BRANCH, VYOS_BUILD_PACKAGE_NAME"
+ parser.add_argument("--pre-build-hook", help="Script to execute before build, %s" % scripting_info)
debranding.populate_cli_parser(parser)