From 3f6fc9a9660f686cae549eeb2d6f96ad56be564c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Veyret?= <stephane@neptura.org> Date: Tue, 12 May 2020 13:50:36 +0200 Subject: [PATCH] Publish links to the release binaries Closes #1411 --- .gitlab/releaser/releaselinks.py | 28 ++++++++++++++++++++++++++++ .gitlab/releaser/releaser.py | 9 ++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 .gitlab/releaser/releaselinks.py diff --git a/.gitlab/releaser/releaselinks.py b/.gitlab/releaser/releaselinks.py new file mode 100644 index 000000000..72800697e --- /dev/null +++ b/.gitlab/releaser/releaselinks.py @@ -0,0 +1,28 @@ +import json +import os +import urllib.request + +from projectapi import ProjectApi + +class ReleaseLinks(ProjectApi): + ''' + Release links API. + ''' + def __init__(self): + ProjectApi.__init__(self, '/releases/{}/assets/links'.format(os.environ['CI_COMMIT_TAG'])) + + def create_artifact(self, artifact): + ''' + Create the link for the given artifact. + :param artifact: The artifact data. + :type artifact: dict + ''' + send_data = { + 'name': '{} {} - {}'.format(artifact['category'], artifact['arch'], artifact['type']), + 'filepath': '/binaries/{}'.format(artifact['name']), + 'url': artifact['url'] + } + send_data_serialized = json.dumps(send_data).encode('utf-8') + request = self.build_request(data=send_data_serialized, method='POST') + request.add_header('Content-Type', 'application/json') + urllib.request.urlopen(request) diff --git a/.gitlab/releaser/releaser.py b/.gitlab/releaser/releaser.py index dca044561..34fb1e197 100644 --- a/.gitlab/releaser/releaser.py +++ b/.gitlab/releaser/releaser.py @@ -6,6 +6,7 @@ import os from binartifact import BinArtifact from job import Job from placeholder import PlaceHolder +from releaselinks import ReleaseLinks from releasenote import ReleaseNote from releasewikipage import ReleaseWikiPage from sourceartifact import SourceArtifact @@ -48,9 +49,11 @@ class Releaser: releaseNote = ReleaseNote() current_message = releaseNote.get_message() artifacts_list = [] + binArtifacts = self._get_bin_artifacts() + releaseLinks = ReleaseLinks() # Get releases - artifacts_list += self._get_bin_artifacts() + artifacts_list += binArtifacts artifacts_list.sort() artifacts_list += list(map(lambda e: SourceArtifact(e), self.source_ext)) @@ -65,6 +68,10 @@ class Releaser: }) releaseNote.send_note(title_line + note) + # Publish binaries as links + for binArtifact in binArtifacts: + releaseLinks.create_artifact(binArtifact.to_dict()) + print('Pre-release published') def publish_release(self): -- GitLab