From 6c57dda8f6d6b87a1671c8e17440de351289b1da Mon Sep 17 00:00:00 2001 From: Davanum Srinivas Date: Mon, 5 Dec 2016 15:16:46 -0500 Subject: [PATCH] Add links to the package signatures Since (and including) Ocata, Infra has been maintaining a signing system for artifacts and publishing the signatures: http://docs.openstack.org/infra/system-config/signing.html We should publish these signatures as part of the release web site. Change-Id: I06c099cdf9a2068f5d41f41f51176167374b577b --- openstack_releases/sphinxext.py | 46 ++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/openstack_releases/sphinxext.py b/openstack_releases/sphinxext.py index 61e1e131ea..d4747efd34 100644 --- a/openstack_releases/sphinxext.py +++ b/openstack_releases/sphinxext.py @@ -194,6 +194,26 @@ class DeliverableDirectiveBase(rst.Directive): return version raise ValueError('Unrecognized artifact-link-mode: %r' % mode) + @staticmethod + def _artifact_signature_link(mode, version, type, project): + if mode == 'tarball': + # Link the version number to the tarball for downloading. + repo_base = project['repo'].rsplit('/')[-1] + if 'tarball-base' in project: + base = project['tarball-base'] + else: + base = repo_base + return '`{t} <{s}/{r}/{n}-{v}.tar.gz.asc>`__'.format( + s='https://tarballs.openstack.org', + v=version, + t=type, + r=repo_base, + n=base, + ) + elif mode == 'none': + return "" + raise ValueError('Unrecognized artifact-link-mode: %r' % mode) + def _add_deliverables(self, type_tag, deliverables, series, app, result): source_name = '<' + __name__ + '>' @@ -287,14 +307,28 @@ class DeliverableDirectiveBase(rst.Directive): _add('Release Notes: %s' % notes_link) _add('') link_mode = deliverable_info.get('artifact-link-mode', 'tarball') + # We have signatures for artifacts only after newton + if series and series[0] >= 'o': + headers = ['Version', 'Signature', 'Repo', 'Git Commit'] + data = ((self._artifact_link(link_mode, r['version'], p), + self._artifact_signature_link(link_mode, r['version'], + 'pgp', p), + p['repo'], p['hash']) + for r in reversed(deliverable_info.get('releases', [])) + for p in r.get('projects', [])) + columns = [10, 10, 40, 50] + else: + headers = ['Version', 'Repo', 'Git Commit'] + data = ((self._artifact_link(link_mode, r['version'], p), + p['repo'], p['hash']) + for r in reversed(deliverable_info.get('releases', [])) + for p in r.get('projects', [])) + columns = [10, 40, 50] _list_table( _add, - ['Version', 'Repo', 'Git Commit'], - ((self._artifact_link(link_mode, r['version'], p), - p['repo'], p['hash']) - for r in reversed(deliverable_info.get('releases', [])) - for p in r.get('projects', [])), - columns=[10, 40, 50], + headers=headers, + data=data, + columns=columns, )