From 3680545a01513ed044eb888151d2e2c635cea255 Mon Sep 17 00:00:00 2001 From: Kris Gambirazzi Date: Wed, 27 Mar 2019 12:13:18 +0000 Subject: [PATCH 1/2] add project releases api --- docs/gl_objects/projects.rst | 33 +++++++++++++++++++++++++++++++++ gitlab/v4/objects.py | 12 ++++++++++++ 2 files changed, 45 insertions(+) diff --git a/docs/gl_objects/projects.rst b/docs/gl_objects/projects.rst index b91f5f24e..c1518895d 100644 --- a/docs/gl_objects/projects.rst +++ b/docs/gl_objects/projects.rst @@ -663,6 +663,39 @@ Delete project push rules:: pr.delete() +Project releases +================ + +Reference +--------- + +* v4 API: + + + :class:`gitlab.v4.objects.ProjectRelease` + + :class:`gitlab.v4.objects.ProjectReleaseManager` + + :attr:`gitlab.v4.objects.Project.releases` + +* Gitlab API: https://docs.gitlab.com/ee/api/releases/index.html + +Examples +-------- + +Get a list of releases from a project:: + + release = project.releases.list() + +Get a single release:: + + release = project.releases.get('v1.2.3') + +Create a release for a project tag:: + + release = project.releases.create({'name':'Demo Release', 'tag_name':'v1.2.3', 'description':'release notes go here'}) + +Delete a release:: + + release = p.releases.delete('v1.2.3') + Project protected tags ====================== diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py index 2175e0c3c..6dfd80248 100644 --- a/gitlab/v4/objects.py +++ b/gitlab/v4/objects.py @@ -1993,6 +1993,17 @@ class ProjectPagesDomainManager(CRUDMixin, RESTManager): _update_attrs = (tuple(), ('certificate', 'key')) +class ProjectRelease(RESTObject): + _id_attr = 'tag_name' + + +class ProjectReleaseManager(CRUDMixin, RESTManager): + _path = '/projects/%(project_id)s/releases' + _obj_cls = ProjectRelease + _from_parent_attrs = {'project_id': 'id'} + _create_attrs = (('name', 'tag_name', 'description', ), ('ref', 'assets', )) + + class ProjectTag(ObjectDeleteMixin, RESTObject): _id_attr = 'name' _short_print_attr = 'name' @@ -3273,6 +3284,7 @@ class Project(SaveMixin, ObjectDeleteMixin, RESTObject): ('protectedtags', 'ProjectProtectedTagManager'), ('pipelineschedules', 'ProjectPipelineScheduleManager'), ('pushrules', 'ProjectPushRulesManager'), + ('releases', 'ProjectReleaseManager'), ('runners', 'ProjectRunnerManager'), ('services', 'ProjectServiceManager'), ('snippets', 'ProjectSnippetManager'), From 8e55a3c85f3537e2be1032bf7d28080a4319ec89 Mon Sep 17 00:00:00 2001 From: Kris Gambirazzi Date: Wed, 27 Mar 2019 12:20:30 +0000 Subject: [PATCH 2/2] Use NoUpdateMixin for now --- gitlab/v4/objects.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gitlab/v4/objects.py b/gitlab/v4/objects.py index 6dfd80248..da46e9aef 100644 --- a/gitlab/v4/objects.py +++ b/gitlab/v4/objects.py @@ -1997,7 +1997,7 @@ class ProjectRelease(RESTObject): _id_attr = 'tag_name' -class ProjectReleaseManager(CRUDMixin, RESTManager): +class ProjectReleaseManager(NoUpdateMixin, RESTManager): _path = '/projects/%(project_id)s/releases' _obj_cls = ProjectRelease _from_parent_attrs = {'project_id': 'id'}