From 483bdcb8d827ec2af299714d22439720b116541d Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Thu, 7 Apr 2022 02:26:08 +0000 Subject: [PATCH] Support release iteration value for assemble workflow rpm Signed-off-by: Peter Zhu Signed-off-by: Peter Zhu --- .../opensearch-dashboards.rpm.spec | 1 + .../opensearch/opensearch.rpm.spec | 3 ++- src/assemble_workflow/assemble_args.py | 17 ++++++++++++++++- src/assemble_workflow/bundle.py | 2 +- src/assemble_workflow/bundle_recorder.py | 3 ++- src/assemble_workflow/bundle_rpm.py | 4 +++- src/assemble_workflow/dist.py | 8 ++++---- src/run_assemble.py | 2 ++ 8 files changed, 31 insertions(+), 9 deletions(-) diff --git a/scripts/pkg/build_templates/opensearch-dashboards/opensearch-dashboards.rpm.spec b/scripts/pkg/build_templates/opensearch-dashboards/opensearch-dashboards.rpm.spec index 164394f673..bb5dbd62c9 100644 --- a/scripts/pkg/build_templates/opensearch-dashboards/opensearch-dashboards.rpm.spec +++ b/scripts/pkg/build_templates/opensearch-dashboards/opensearch-dashboards.rpm.spec @@ -11,6 +11,7 @@ %define log_dir %{_localstatedir}/log/%{name} %define pid_dir %{_localstatedir}/run/%{name} %{!?_version: %define _version 0.0.0 } +%{!?_release: %define _release 1 } %{!?_architecture: %define _architecture x86_64 } Name: opensearch-dashboards diff --git a/scripts/pkg/build_templates/opensearch/opensearch.rpm.spec b/scripts/pkg/build_templates/opensearch/opensearch.rpm.spec index 1bb5209282..91d6d2ced7 100644 --- a/scripts/pkg/build_templates/opensearch/opensearch.rpm.spec +++ b/scripts/pkg/build_templates/opensearch/opensearch.rpm.spec @@ -11,11 +11,12 @@ %define log_dir %{_localstatedir}/log/%{name} %define pid_dir %{_localstatedir}/run/%{name} %{!?_version: %define _version 0.0.0 } +%{!?_release: %define _release 1 } %{!?_architecture: %define _architecture x86_64 } Name: opensearch Version: %{_version} -Release: 1 +Release: %{_release} License: Apache-2.0 Summary: An open source distributed and RESTful search engine URL: https://opensearch.org/ diff --git a/src/assemble_workflow/assemble_args.py b/src/assemble_workflow/assemble_args.py index 21c3cf794c..d8a9c54b22 100644 --- a/src/assemble_workflow/assemble_args.py +++ b/src/assemble_workflow/assemble_args.py @@ -8,15 +8,29 @@ import logging from typing import IO - class AssembleArgs: manifest: IO keep: bool def __init__(self) -> None: + + def check_positive(value) -> int: + int_value = int(value) + if int_value <= 0: + raise argparse.ArgumentTypeError(f"{value} is invalid, you must enter a positive integer") + return str(int_value) + parser = argparse.ArgumentParser(description="Assemble an OpenSearch Distribution") parser.add_argument("manifest", type=argparse.FileType("r"), help="Manifest file.") parser.add_argument("-b", "--base-url", dest="base_url", help="The base url to download the artifacts.") + parser.add_argument( + "-r", + "--release-iteration", + dest="release_iteration", + type=check_positive, + default="1", + help="The release/iteration number of deb/rpm packages, allow multiple revision of same package version (e.g. 2.0.0-1, 2.0.0-2, 2.0.0-3)" + ) parser.add_argument( "--keep", dest="keep", @@ -38,3 +52,4 @@ def __init__(self) -> None: self.manifest = args.manifest self.keep = args.keep self.base_url = args.base_url + self.release_iteration = args.release_iteration diff --git a/src/assemble_workflow/bundle.py b/src/assemble_workflow/bundle.py index f11ac7c5d2..168cfcc0f6 100644 --- a/src/assemble_workflow/bundle.py +++ b/src/assemble_workflow/bundle.py @@ -99,7 +99,7 @@ def install_plugin(self, plugin: BuildComponent) -> None: self._execute(install_command) def package(self, dest: str) -> None: - self.min_dist.build(self.bundle_recorder.package_name, dest) + self.min_dist.build(self.bundle_recorder.package_name, self.bundle_recorder.release_iteration, dest) def _execute(self, command: str) -> None: logging.info(f'Executing "{command}" in {self.min_dist.archive_path}') diff --git a/src/assemble_workflow/bundle_recorder.py b/src/assemble_workflow/bundle_recorder.py index c454c40977..f2a8411e92 100644 --- a/src/assemble_workflow/bundle_recorder.py +++ b/src/assemble_workflow/bundle_recorder.py @@ -16,11 +16,12 @@ class BundleRecorder: - def __init__(self, build: BuildManifest.Build, output_dir: str, artifacts_dir: str, bundle_location: BundleLocation) -> None: + def __init__(self, build: BuildManifest.Build, release_iteration: str, output_dir: str, artifacts_dir: str, bundle_location: BundleLocation) -> None: self.output_dir = output_dir self.build_id = build.id self.bundle_location = bundle_location self.version = build.version + self.release_iteration = release_iteration self.distribution = build.distribution self.package_name = self.__get_package_name(build) self.artifacts_dir = artifacts_dir diff --git a/src/assemble_workflow/bundle_rpm.py b/src/assemble_workflow/bundle_rpm.py index 2d771aaa94..cf4594a7d2 100644 --- a/src/assemble_workflow/bundle_rpm.py +++ b/src/assemble_workflow/bundle_rpm.py @@ -75,7 +75,7 @@ def extract(self, dest: str) -> None: with open(min_bin_env_path, 'wb') as fp: fp.write(min_bin_env_lines.replace('source', '#source').encode('ascii')) - def build(self, name: str, dest: str, archive_path: str, build_cls: BuildManifest.Build) -> None: + def build(self, name: str, dest: str, archive_path: str, build_cls: BuildManifest.Build, release_iteration: str) -> None: # extract dest and build dest are not the same, this is restoring the extract dest # mainly due to rpm requires several different setups compares to tarball and zip ext_dest = os.path.dirname(archive_path) @@ -102,11 +102,13 @@ def build(self, name: str, dest: str, archive_path: str, build_cls: BuildManifes '-bb', f"--define '_topdir {ext_dest}'", f"--define '_version {build_cls.version}'", + f"--define '_release {release_iteration}'", f"--define '_architecture {rpm_architecture(build_cls.architecture)}'", f"{self.filename}.rpm.spec", ] ) + logging.info(f"Generate {self.filename}-{build_cls.version}-{release_iteration}.{rpm_architecture(build_cls.architecture)}.rpm") logging.info(f"Execute {bundle_cmd} in {ext_dest}") subprocess.check_call(bundle_cmd, cwd=ext_dest, shell=True) diff --git a/src/assemble_workflow/dist.py b/src/assemble_workflow/dist.py index da20186920..67239b0df4 100644 --- a/src/assemble_workflow/dist.py +++ b/src/assemble_workflow/dist.py @@ -78,8 +78,8 @@ def extract(self, dest: str) -> str: ) return self.archive_path - def build(self, name: str, dest: str) -> None: - self.__build__(name, dest) + def build(self, name: str, release_iteration: str, dest: str) -> None: + self.__build__(name, release_iteration, dest) path = os.path.join(dest, name) shutil.copyfile(name, path) logging.info(f"Published {path}.") @@ -114,5 +114,5 @@ class DistRpm(Dist): def __extract__(self, dest: str) -> None: BundleRpm(self.filename, self.path, self.min_path).extract(dest) - def __build__(self, name: str, dest: str) -> None: - BundleRpm(self.filename, self.path, self.min_path).build(name, dest, self.archive_path, self.build_cls) + def __build__(self, name: str, release_iteration: str, dest: str) -> None: + BundleRpm(self.filename, self.path, self.min_path).build(name, dest, self.archive_path, self.build_cls, release_iteration) diff --git a/src/run_assemble.py b/src/run_assemble.py index a420a05f58..36e8eee9c9 100755 --- a/src/run_assemble.py +++ b/src/run_assemble.py @@ -27,6 +27,7 @@ def main() -> int: build_manifest = BuildManifest.from_file(args.manifest) build = build_manifest.build artifacts_dir = os.path.dirname(os.path.realpath(args.manifest.name)) + release_iteration = args.release_iteration output_dir = AssembleOutputDir(build.filename).dir @@ -34,6 +35,7 @@ def main() -> int: bundle_recorder = BundleRecorder( build, + release_iteration, output_dir, artifacts_dir, BundleLocations.from_path(args.base_url, os.getcwd(), build.filename)