diff options
| author | dd <dd@wx.tnyzeq.icu> | 2024-10-10 12:05:19 +0200 |
|---|---|---|
| committer | dd <dd@wx.tnyzeq.icu> | 2024-10-10 12:05:19 +0200 |
| commit | 8d06493b0ef6eb8477f21e60ec2b35cce161c200 (patch) | |
| tree | 4403f76dea1af983e596d5902da315a3a156f3b7 | |
| parent | 3a7acbc2c5d44edca9aeb512ca5d6b93d533b503 (diff) | |
| download | vyos-jenkins-8d06493b0ef6eb8477f21e60ec2b35cce161c200.tar.gz vyos-jenkins-8d06493b0ef6eb8477f21e60ec2b35cce161c200.zip | |
added circinus build scripting support
| -rwxr-xr-x | new/image_builder.py | 15 | ||||
| -rw-r--r-- | new/lib/scripting.py | 23 | ||||
| -rwxr-xr-x | new/package_builder.py | 14 |
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) |
