From fa3c5aff637bf68ed944b9919c992ab7eda1ec04 Mon Sep 17 00:00:00 2001 From: Qixiang Wan Date: Fri, 4 Nov 2016 16:07:26 +0800 Subject: [PATCH] [ostree] Allow adding versioning metadata Added new option '--version' to pungi-make-ostree, and this can be enabled in ostree settings with 'version'. The version string will be added as versioning metadata if this is specified. Signed-off-by: Qixiang Wan --- doc/configuration.rst | 4 +++- pungi/checks.py | 1 + pungi/ostree.py | 18 ++++++++++++------ pungi/phases/ostree.py | 4 ++++ tests/test_ostree_phase.py | 31 +++++++++++++++++++++++++++++++ tests/test_ostree_script.py | 21 +++++++++++++++++++++ 6 files changed, 72 insertions(+), 7 deletions(-) diff --git a/doc/configuration.rst b/doc/configuration.rst index 5021b74d..6c5e4774 100644 --- a/doc/configuration.rst +++ b/doc/configuration.rst @@ -1090,6 +1090,7 @@ runroot environment. deliverable is not release blocking. * ``update_summary`` -- (*bool*) Update summary metadata after tree composing. Defaults to ``False``. + * ``version`` -- (*str*) Version string to be added as versioning metadata. Example config @@ -1103,7 +1104,8 @@ Example config "config_url": "https://git.fedorahosted.org/git/fedora-atomic.git", "source_repo_from": "Everything", "ostree_repo": "/mnt/koji/compose/atomic/Rawhide/", - "update_summary": True + "update_summary": True, + "version": "24" } }) ] diff --git a/pungi/checks.py b/pungi/checks.py index bf0aa90c..f3f0c2bf 100644 --- a/pungi/checks.py +++ b/pungi/checks.py @@ -678,6 +678,7 @@ def _make_schema(): "ostree_repo": {"type": "string"}, "failable": {"$ref": "#/definitions/list_of_strings"}, "update_summary": {"type": "boolean"}, + "version": {"type": "string"}, "config_branch": {"type": "string"}, "tag_ref": {"type": "boolean"}, }, diff --git a/pungi/ostree.py b/pungi/ostree.py index a04f6f8c..16e7fc2d 100644 --- a/pungi/ostree.py +++ b/pungi/ostree.py @@ -37,12 +37,16 @@ def init_ostree_repo(repo, log_dir=None): show_cmd=True, stdout=True, logfile=log_file) -def make_ostree_repo(repo, config, log_dir=None): +def make_ostree_repo(repo, config, version=None, log_dir=None): log_file = make_log_file(log_dir, 'create-ostree-repo') - shortcuts.run(['rpm-ostree', 'compose', 'tree', '--repo=%s' % repo, - '--write-commitid-to=%s' % make_log_file(log_dir, 'commitid'), - config], - show_cmd=True, stdout=True, logfile=log_file) + cmd = ['rpm-ostree', 'compose', 'tree', '--repo=%s' % repo, + '--write-commitid-to=%s' % make_log_file(log_dir, 'commitid')] + if version: + # Add versioning metadata + cmd.append('--add-metadata-string=version=%s' % version) + cmd.append(config) + + shortcuts.run(cmd, show_cmd=True, stdout=True, logfile=log_file) def update_ostree_summary(repo, log_dir=None): @@ -53,7 +57,7 @@ def update_ostree_summary(repo, log_dir=None): def run(opts): init_ostree_repo(opts.ostree_repo, log_dir=opts.log_dir) - make_ostree_repo(opts.ostree_repo, opts.treefile, log_dir=opts.log_dir) + make_ostree_repo(opts.ostree_repo, opts.treefile, version=opts.version, log_dir=opts.log_dir) if opts.update_summary: update_ostree_summary(opts.ostree_repo, log_dir=opts.log_dir) @@ -67,6 +71,8 @@ def main(args=None): help='where to put the ostree repo') parser.add_argument('--treefile', required=True, help='treefile for rpm-ostree') + parser.add_argument('--version', + help='version string to be added as versioning metadata') parser.add_argument('--update-summary', action='store_true', help='update summary metadata') diff --git a/pungi/phases/ostree.py b/pungi/phases/ostree.py index 64a6e1f3..4a52f2ff 100644 --- a/pungi/phases/ostree.py +++ b/pungi/phases/ostree.py @@ -105,6 +105,10 @@ class OSTreeThread(WorkerThread): '--treefile=%s' % os.path.join(config_repo, config['treefile']), ] + version = config.get('version', None) + if version: + cmd.append('--version=%s' % version) + if config.get('update_summary', False): cmd.append('--update-summary') diff --git a/tests/test_ostree_phase.py b/tests/test_ostree_phase.py index 6d63e171..7d3a8389 100644 --- a/tests/test_ostree_phase.py +++ b/tests/test_ostree_phase.py @@ -263,6 +263,37 @@ class OSTreeThreadTest(helpers.PungiTestCase): f.read()) self.assertTrue(os.path.isdir(self.repo)) + @mock.patch('pungi.wrappers.scm.get_dir_from_scm') + @mock.patch('pungi.wrappers.kojiwrapper.KojiWrapper') + def test_run_with_versioning_metadata(self, KojiWrapper, get_dir_from_scm): + self.cfg['version'] = '24' + + get_dir_from_scm.side_effect = self._dummy_config_repo + + koji = KojiWrapper.return_value + koji.run_runroot_cmd.side_effect = self._mock_runroot(0) + + t = ostree.OSTreeThread(self.pool) + + t.process((self.compose, self.compose.variants['Everything'], 'x86_64', self.cfg), 1) + + self.assertEqual(get_dir_from_scm.call_args_list, + [mock.call({'scm': 'git', 'repo': 'https://git.fedorahosted.org/git/fedora-atomic.git', + 'branch': 'f24', 'dir': '.'}, + self.topdir + '/work/ostree-1/config_repo', logger=self.pool._logger)]) + self.assertEqual(koji.get_runroot_cmd.call_args_list, + [mock.call('rrt', 'x86_64', + ['pungi-make-ostree', + '--log-dir=%s/logs/x86_64/Everything/ostree-1' % self.topdir, + '--treefile=%s/fedora-atomic-docker-host.json' % ( + self.topdir + '/work/ostree-1/config_repo'), + '--version=24', self.repo], + channel=None, mounts=[self.topdir, self.repo], + packages=['pungi', 'ostree', 'rpm-ostree'], + task_id=True, use_shell=True, new_chroot=True)]) + self.assertEqual(koji.run_runroot_cmd.call_args_list, + [mock.call(koji.get_runroot_cmd.return_value, + log_file=self.topdir + '/logs/x86_64/Everything/ostree-1/runroot.log')]) if __name__ == '__main__': unittest.main() diff --git a/tests/test_ostree_script.py b/tests/test_ostree_script.py index 197d2c8a..89b18268 100644 --- a/tests/test_ostree_script.py +++ b/tests/test_ostree_script.py @@ -102,6 +102,27 @@ class OstreeScriptTest(helpers.PungiTestCase): mock.call(['ostree', 'summary', '-u', '--repo=%s' % repo], logfile=self.topdir + '/logs/Atomic/ostree-summary.log', show_cmd=True, stdout=True)]), + @mock.patch('kobo.shortcuts.run') + def test_versioning_metadata(self, run): + repo = os.path.join(self.topdir, 'atomic') + + ostree.main([ + '--log-dir=%s' % os.path.join(self.topdir, 'logs', 'Atomic'), + '--treefile=%s/fedora-atomic-docker-host.json' % self.topdir, + '--version=24', + repo, + ]) + + self.maxDiff = None + self.assertItemsEqual( + run.call_args_list, + [mock.call(['ostree', 'init', '--repo=%s' % repo, '--mode=archive-z2'], + logfile=self.topdir + '/logs/Atomic/init-ostree-repo.log', show_cmd=True, stdout=True), + mock.call(['rpm-ostree', 'compose', 'tree', '--repo=%s' % repo, + '--write-commitid-to=%s' % (self.topdir + '/logs/Atomic/commitid.log'), + '--add-metadata-string=version=24', + self.topdir + '/fedora-atomic-docker-host.json'], + logfile=self.topdir + '/logs/Atomic/create-ostree-repo.log', show_cmd=True, stdout=True)]) if __name__ == '__main__': unittest.main()