From 667c617b5307376cd5ae162059243abeca2040bc Mon Sep 17 00:00:00 2001 From: Ondřej Nosek Date: Oct 25 2019 13:16:05 +0000 Subject: Backporting some fixes and features - container-build: add --isolated and --koji-parent-build arguments - Pass skip_build option to buildContainer - Reuse koji_cli.lib.unique_path Signed-off-by: Ondřej Nosek --- diff --git a/0001-Reuse-koji_cli.lib.unique_path.patch b/0001-Reuse-koji_cli.lib.unique_path.patch new file mode 100644 index 0000000..45d3bb4 --- /dev/null +++ b/0001-Reuse-koji_cli.lib.unique_path.patch @@ -0,0 +1,48 @@ +From 0ee52cf747e218008984d604c468f9e1515f1ef9 Mon Sep 17 00:00:00 2001 +From: Chenxiong Qi +Date: Mon, 15 Apr 2019 11:17:21 +0800 +Subject: [PATCH 1/5] Reuse koji_cli.lib.unique_path + +Call this method instead of constructing the path by rpkg itself. + +Merges: https://pagure.io/rpkg/pull-request/336 + +Signed-off-by: Chenxiong Qi +--- + pyrpkg/cli.py | 11 +++-------- + 1 file changed, 3 insertions(+), 8 deletions(-) + +diff --git a/pyrpkg/cli.py b/pyrpkg/cli.py +index 6b584ae..7ab146d 100644 +--- a/pyrpkg/cli.py ++++ b/pyrpkg/cli.py +@@ -18,11 +18,8 @@ import argparse + import getpass + import logging + import os +-import random + import re +-import string + import sys +-import time + from gettext import gettext as _ # For `_ArgumentParser' + + import requests +@@ -1646,11 +1643,9 @@ see API KEY section of copr-cli(1) man page. + callback = None + if not self.args.q: + callback = koji_cli.lib._progress_callback +- # define a unique path for this upload. Stolen from /usr/bin/koji +- uniquepath = 'cli-build/%r.%s' % ( +- time.time(), +- ''.join([random.choice(string.ascii_letters) for i in range(8)]) +- ) ++ # Define a unique path for this upload. Learned from koji to use prefix ++ # cli-build. ++ uniquepath = koji_cli.lib.unique_path('cli-build') + if not name: + name = os.path.basename(file) + # Should have a try here, not sure what errors we'll get yet though +-- +2.21.0 + diff --git a/0002-Pass-skip_build-option-to-buildContainer.patch b/0002-Pass-skip_build-option-to-buildContainer.patch new file mode 100644 index 0000000..55580a1 --- /dev/null +++ b/0002-Pass-skip_build-option-to-buildContainer.patch @@ -0,0 +1,29 @@ +From 48e3ce2f754ba9b30b195a3c48ffdfb2b147d1ab Mon Sep 17 00:00:00 2001 +From: Robert Cerven +Date: Mon, 7 Oct 2019 21:32:46 +0200 +Subject: [PATCH 2/5] Pass skip_build option to buildContainer + +* OSBS-7711 + +Signed-off-by: Robert Cerven +--- + pyrpkg/__init__.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py +index 68aceb2..8e0960b 100644 +--- a/pyrpkg/__init__.py ++++ b/pyrpkg/__init__.py +@@ -3126,7 +3126,8 @@ class Commands(object): + + task_opts = {} + for key in ('scratch', 'name', 'version', 'release', +- 'yum_repourls', 'git_branch', 'signing_intent', 'compose_ids'): ++ 'yum_repourls', 'git_branch', 'signing_intent', 'compose_ids', ++ 'skip_build'): + if key in opts: + task_opts[key] = opts[key] + +-- +2.21.0 + diff --git a/0003-container-build-add-isolated-argument.patch b/0003-container-build-add-isolated-argument.patch new file mode 100644 index 0000000..ddc9f71 --- /dev/null +++ b/0003-container-build-add-isolated-argument.patch @@ -0,0 +1,112 @@ +From 174f61ce13d47c84a1a9f697c7c6b7c817db73f7 Mon Sep 17 00:00:00 2001 +From: Ken Dreyer +Date: Wed, 25 Sep 2019 11:56:21 -0600 +Subject: [PATCH 3/5] container-build: add --isolated argument + +Add support for a new "--isolated" argument to the container-build +sub-command. + +Isolated builds will only update the {version}-{release} unique tag and +the primary tag in target container registry. Also, OSBS's bump_release +plugin will ignore isolated builds. + +Users must specify a --build-release argument when the use the +--isolated argument. + +Signed-off-by: Ken Dreyer +--- + pyrpkg/__init__.py | 2 +- + pyrpkg/cli.py | 13 +++++++++++++ + tests/test_cli.py | 4 ++++ + 3 files changed, 18 insertions(+), 1 deletion(-) + +diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py +index 8e0960b..1aa1c2b 100644 +--- a/pyrpkg/__init__.py ++++ b/pyrpkg/__init__.py +@@ -3125,7 +3125,7 @@ class Commands(object): + source = self.construct_build_url() + + task_opts = {} +- for key in ('scratch', 'name', 'version', 'release', ++ for key in ('scratch', 'name', 'version', 'release', 'isolated', + 'yum_repourls', 'git_branch', 'signing_intent', 'compose_ids', + 'skip_build'): + if key in opts: +diff --git a/pyrpkg/cli.py b/pyrpkg/cli.py +index 7ab146d..0845d99 100644 +--- a/pyrpkg/cli.py ++++ b/pyrpkg/cli.py +@@ -1544,6 +1544,13 @@ see API KEY section of copr-cli(1) man page. + default=None, + help="Specify a release value for this build's NVR") + ++ parser.add_argument( ++ '--isolated', ++ help='Do not auto-increment the release value or update' ++ ' additional tags in the registry. You must use the' ++ ' --build-release argument', ++ action="store_true") ++ + parser.add_argument( + '--scratch', + help='Scratch build', +@@ -1981,6 +1988,7 @@ see API KEY section of copr-cli(1) man page. + opts = {"scratch": self.args.scratch, + "quiet": self.args.q, + "release": self.args.build_release, ++ "isolated": self.args.isolated, + "git_branch": self.cmd.branch_merge, + "arches": self.args.arches, + "skip_build": self.args.skip_build} +@@ -1995,6 +2003,11 @@ see API KEY section of copr-cli(1) man page. + "signing_intent": self.args.signing_intent, + }) + ++ if self.args.isolated and not self.args.build_release: ++ self.container_build_parser.error( ++ 'missing --build-release: using --isolated requires' ++ ' --build-release option') ++ + section_name = "%s.container-build" % self.name + err_msg = "Missing %(option)s option in [%(plugin.section)s] section. " \ + "Using %(option)s from [%(root.section)s]" +diff --git a/tests/test_cli.py b/tests/test_cli.py +index ae87030..35b37d6 100644 +--- a/tests/test_cli.py ++++ b/tests/test_cli.py +@@ -224,6 +224,7 @@ class TestContainerBuildWithKoji(CliTestCase): + 'scratch': False, + 'quiet': False, + 'release': None, ++ 'isolated': False, + 'yum_repourls': None, + 'git_branch': 'eng-rhel-7', + 'arches': None, +@@ -254,6 +255,7 @@ class TestContainerBuildWithKoji(CliTestCase): + 'scratch': False, + 'quiet': False, + 'release': None, ++ 'isolated': False, + 'yum_repourls': None, + 'git_branch': 'eng-rhel-7', + 'arches': None, +@@ -293,6 +295,7 @@ class TestContainerBuildWithKoji(CliTestCase): + 'scratch': False, + 'quiet': False, + 'release': None, ++ 'isolated': False, + 'yum_repourls': None, + 'git_branch': 'eng-rhel-7', + 'arches': None, +@@ -350,6 +353,7 @@ class TestContainerBuildWithKoji(CliTestCase): + 'scratch': False, + 'quiet': False, + 'release': None, ++ 'isolated': False, + 'git_branch': 'eng-rhel-7', + 'arches': None, + 'skip_build': False +-- +2.21.0 + diff --git a/0004-tests-add-container-build-isolated-test.patch b/0004-tests-add-container-build-isolated-test.patch new file mode 100644 index 0000000..d3994b3 --- /dev/null +++ b/0004-tests-add-container-build-isolated-test.patch @@ -0,0 +1,56 @@ +From 10de8c40d2f2964ce0c4f643a143c59e5fa11f94 Mon Sep 17 00:00:00 2001 +From: Ken Dreyer +Date: Fri, 11 Oct 2019 09:42:22 -0600 +Subject: [PATCH 4/5] tests: add container-build --isolated test + +Verify the behavior of the container-build "--isolated" option. + +Signed-off-by: Ken Dreyer +--- + tests/test_cli.py | 30 ++++++++++++++++++++++++++++++ + 1 file changed, 30 insertions(+) + +diff --git a/tests/test_cli.py b/tests/test_cli.py +index 35b37d6..fa18647 100644 +--- a/tests/test_cli.py ++++ b/tests/test_cli.py +@@ -271,6 +271,36 @@ class TestContainerBuildWithKoji(CliTestCase): + flatpak=False + ) + ++ def test_isolated(self): ++ cli_cmd = ['rpkg', '--path', self.cloned_repo_path, 'container-build', ++ '--isolated', '--build-release', '99'] ++ ++ with patch('sys.argv', new=cli_cmd): ++ cli = self.new_cli() ++ cli.container_build_koji() ++ ++ self.mock_container_build_koji.assert_called_once_with( ++ False, ++ opts={ ++ 'scratch': False, ++ 'quiet': False, ++ 'release': '99', ++ 'isolated': True, ++ 'yum_repourls': None, ++ 'git_branch': 'eng-rhel-7', ++ 'arches': None, ++ 'signing_intent': None, ++ 'compose_ids': None, ++ 'skip_build': False ++ }, ++ kojiconfig=None, ++ kojiprofile='koji', ++ build_client=utils.build_client, ++ koji_task_watcher=koji_cli.lib.watch_tasks, ++ nowait=False, ++ flatpak=False ++ ) ++ + def test_using_deprecated_kojiconfig(self): + """test_build_using_deprecated_kojiconfig + +-- +2.21.0 + diff --git a/0005-container-build-add-koji-parent-build-argument.patch b/0005-container-build-add-koji-parent-build-argument.patch new file mode 100644 index 0000000..4efcb65 --- /dev/null +++ b/0005-container-build-add-koji-parent-build-argument.patch @@ -0,0 +1,106 @@ +From 4b48dbcba45bf3ad44a3179380972b3ad6997616 Mon Sep 17 00:00:00 2001 +From: Ken Dreyer +Date: Fri, 11 Oct 2019 09:42:08 -0600 +Subject: [PATCH 5/5] container-build: add --koji-parent-build argument + +Add support for a new "--koji-parent-build" argument to the +container-build sub-command. + +OSBS allows users to dynamically override the Dockerfile's "FROM" image +at build time. This allows you to build your container against a +specific parent image without pushing changes to dist-git. + +Signed-off-by: Ken Dreyer +--- + pyrpkg/__init__.py | 4 ++-- + pyrpkg/cli.py | 7 +++++++ + tests/test_cli.py | 5 +++++ + 3 files changed, 14 insertions(+), 2 deletions(-) + +diff --git a/pyrpkg/__init__.py b/pyrpkg/__init__.py +index 1aa1c2b..b139fe0 100644 +--- a/pyrpkg/__init__.py ++++ b/pyrpkg/__init__.py +@@ -3126,8 +3126,8 @@ class Commands(object): + + task_opts = {} + for key in ('scratch', 'name', 'version', 'release', 'isolated', +- 'yum_repourls', 'git_branch', 'signing_intent', 'compose_ids', +- 'skip_build'): ++ 'koji_parent_build', 'yum_repourls', 'git_branch', ++ 'signing_intent', 'compose_ids', 'skip_build'): + if key in opts: + task_opts[key] = opts[key] + +diff --git a/pyrpkg/cli.py b/pyrpkg/cli.py +index 0845d99..0036136 100644 +--- a/pyrpkg/cli.py ++++ b/pyrpkg/cli.py +@@ -1551,6 +1551,12 @@ see API KEY section of copr-cli(1) man page. + ' --build-release argument', + action="store_true") + ++ parser.add_argument( ++ '--koji-parent-build', ++ default=None, ++ help='Specify a Koji NVR for the parent container image. This' ++ ' will override the "FROM" value in your Dockerfile.') ++ + parser.add_argument( + '--scratch', + help='Scratch build', +@@ -1989,6 +1995,7 @@ see API KEY section of copr-cli(1) man page. + "quiet": self.args.q, + "release": self.args.build_release, + "isolated": self.args.isolated, ++ "koji_parent_build": self.args.koji_parent_build, + "git_branch": self.cmd.branch_merge, + "arches": self.args.arches, + "skip_build": self.args.skip_build} +diff --git a/tests/test_cli.py b/tests/test_cli.py +index fa18647..0868a30 100644 +--- a/tests/test_cli.py ++++ b/tests/test_cli.py +@@ -225,6 +225,7 @@ class TestContainerBuildWithKoji(CliTestCase): + 'quiet': False, + 'release': None, + 'isolated': False, ++ 'koji_parent_build': None, + 'yum_repourls': None, + 'git_branch': 'eng-rhel-7', + 'arches': None, +@@ -256,6 +257,7 @@ class TestContainerBuildWithKoji(CliTestCase): + 'quiet': False, + 'release': None, + 'isolated': False, ++ 'koji_parent_build': None, + 'yum_repourls': None, + 'git_branch': 'eng-rhel-7', + 'arches': None, +@@ -286,6 +288,7 @@ class TestContainerBuildWithKoji(CliTestCase): + 'quiet': False, + 'release': '99', + 'isolated': True, ++ 'koji_parent_build': None, + 'yum_repourls': None, + 'git_branch': 'eng-rhel-7', + 'arches': None, +@@ -326,6 +329,7 @@ class TestContainerBuildWithKoji(CliTestCase): + 'quiet': False, + 'release': None, + 'isolated': False, ++ 'koji_parent_build': None, + 'yum_repourls': None, + 'git_branch': 'eng-rhel-7', + 'arches': None, +@@ -384,6 +388,7 @@ class TestContainerBuildWithKoji(CliTestCase): + 'quiet': False, + 'release': None, + 'isolated': False, ++ 'koji_parent_build': None, + 'git_branch': 'eng-rhel-7', + 'arches': None, + 'skip_build': False +-- +2.21.0 + diff --git a/rpkg.spec b/rpkg.spec index a05c6f7..67ab561 100644 --- a/rpkg.spec +++ b/rpkg.spec @@ -4,7 +4,7 @@ Name: rpkg Version: 1.59 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Python library for interacting with rpm+git License: GPLv2+ and LGPLv2 @@ -21,6 +21,11 @@ Source0: https://pagure.io/releases/rpkg/%{name}-%{version}.tar.gz # and there is only old rpm-python package in EL6 and 7, so just simply to # remove rpm-py-installer for now. Patch0: remove-koji-and-rpm-py-installer-from-requires.patch +Patch1: 0001-Reuse-koji_cli.lib.unique_path.patch +Patch2: 0002-Pass-skip_build-option-to-buildContainer.patch +Patch3: 0003-container-build-add-isolated-argument.patch +Patch4: 0004-tests-add-container-build-isolated-test.patch +Patch5: 0005-container-build-add-koji-parent-build-argument.patch %if 0%{?fedora} || 0%{?rhel} > 7 # Enable python3 build by default @@ -271,6 +276,11 @@ nosetests tests %changelog +* Fri Oct 25 2019 Ondrej Nosek - 1.59-2 +- Backport: container-build: add --isolated and --koji-parent-build arguments +- Backport: Pass skip_build option to buildContainer +- Backport: Reuse koji_cli.lib.unique_path + * Mon Sep 16 2019 Ondřej Nosek - 1.59-1 - Add argument to skip build option for container-build (rcerven) - Sorting imports (onosek)