summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGauvain Pocentek <gauvain@pocentek.net>2016-08-27 22:21:49 +0200
committerGauvain Pocentek <gauvain@pocentek.net>2016-08-27 22:21:49 +0200
commit8257400fd78e0fdc26fdcb207dbc6e923332e209 (patch)
tree5984672107fc68f0f9b6f7889b3b26f2393efe23
parentef2dbf7034aee21ecf225be5cfefee8ab4379bbe (diff)
downloadgitlab-8257400fd78e0fdc26fdcb207dbc6e923332e209.tar.gz
Add support for project pipelines
-rw-r--r--docs/gl_objects/projects.py20
-rw-r--r--docs/gl_objects/projects.rst31
-rw-r--r--gitlab/__init__.py3
-rw-r--r--gitlab/exceptions.py20
-rw-r--r--gitlab/objects.py38
5 files changed, 110 insertions, 2 deletions
diff --git a/docs/gl_objects/projects.py b/docs/gl_objects/projects.py
index 0143e31..2695747 100644
--- a/docs/gl_objects/projects.py
+++ b/docs/gl_objects/projects.py
@@ -382,3 +382,23 @@ service.save()
# service delete
service.delete()
# end service delete
+
+# pipeline list
+pipelines = gl.project_pipelines.list(project_id=1)
+# or
+pipelines = project.pipelines.list()
+# end pipeline list
+
+# pipeline get
+pipeline = gl.project_pipelines.get(pipeline_id, project_id=1)
+# or
+pipeline = project.pipelines.get(pipeline_id)
+# end pipeline get
+
+# pipeline retry
+pipeline.retry()
+# end pipeline retry
+
+# pipeline cancel
+pipeline.cancel()
+# end pipeline cancel
diff --git a/docs/gl_objects/projects.rst b/docs/gl_objects/projects.rst
index 5d8e61f..387ba34 100644
--- a/docs/gl_objects/projects.rst
+++ b/docs/gl_objects/projects.rst
@@ -395,6 +395,37 @@ Delete a project hook:
:start-after: # hook delete
:end-before: # end hook delete
+Pipelines
+---------
+
+Use :class:`~gitlab.objects.ProjectPipeline` objects to manipulate projects
+pipelines. The :attr:`gitlab.Gitlab.project_pipelines` and
+:attr:`Project.services <gitlab.objects.Projects.pipelines>` manager objects
+provide helper functions.
+
+List pipelines for a project:
+
+.. literalinclude:: projects.py
+ :start-after: # pipeline list
+ :end-before: # end pipeline list
+
+Get a pipeline for a project:
+
+.. literalinclude:: projects.py
+ :start-after: # pipeline get
+ :end-before: # end pipeline get
+
+Retry the failed builds for a pipeline:
+
+.. literalinclude:: projects.py
+ :start-after: # pipeline retry
+ :end-before: # end pipeline retry
+
+Cancel builds in a pipeline:
+
+.. literalinclude:: projects.py
+ :start-after: # pipeline cancel
+ :end-before: # end pipeline cancel
Services
--------
diff --git a/gitlab/__init__.py b/gitlab/__init__.py
index 70991b2..82f4918 100644
--- a/gitlab/__init__.py
+++ b/gitlab/__init__.py
@@ -102,6 +102,8 @@ class Gitlab(object):
project_members (ProjectMemberManager): Manager for GitLab projects
members
project_notes (ProjectNoteManager): Manager for GitLab projects notes
+ project_pipelines (ProjectPipelineManager): Manager for GitLab projects
+ pipelines
project_tags (ProjectTagManager): Manager for GitLab projects tags
project_mergerequest_notes (ProjectMergeRequestNoteManager): Manager
for GitLab notes on merge requests
@@ -179,6 +181,7 @@ class Gitlab(object):
self.project_issues = ProjectIssueManager(self)
self.project_members = ProjectMemberManager(self)
self.project_notes = ProjectNoteManager(self)
+ self.project_pipelines = ProjectPipelineManager(self)
self.project_tags = ProjectTagManager(self)
self.project_mergerequest_notes = ProjectMergeRequestNoteManager(self)
self.project_mergerequests = ProjectMergeRequestManager(self)
diff --git a/gitlab/exceptions.py b/gitlab/exceptions.py
index e07f0cc..7b0f7f0 100644
--- a/gitlab/exceptions.py
+++ b/gitlab/exceptions.py
@@ -75,11 +75,27 @@ class GitlabTransferProjectError(GitlabOperationError):
pass
-class GitlabBuildCancelError(GitlabOperationError):
+class GitlabCancelError(GitlabOperationError):
pass
-class GitlabBuildRetryError(GitlabOperationError):
+class GitlabBuildCancelError(GitlabCancelError):
+ pass
+
+
+class GitlabPipelineCancelError(GitlabCancelError):
+ pass
+
+
+class GitlabRetryError(GitlabOperationError):
+ pass
+
+
+class GitlabBuildRetryError(GitlabRetryError):
+ pass
+
+
+class GitlabPipelineRetryError(GitlabRetryError):
pass
diff --git a/gitlab/objects.py b/gitlab/objects.py
index 96eab66..a3f5277 100644
--- a/gitlab/objects.py
+++ b/gitlab/objects.py
@@ -1610,6 +1610,43 @@ class ProjectFileManager(BaseManager):
obj_cls = ProjectFile
+class ProjectPipeline(GitlabObject):
+ _url = '/projects/%(project_id)s/pipelines'
+ canCreate = False
+ canUpdate = False
+ canDelete = False
+
+ def retry(self, **kwargs):
+ """Retries failed builds in a pipeline.
+
+ Raises:
+ GitlabConnectionError: If the server cannot be reached.
+ GitlabPipelineRetryError: If the retry cannot be done.
+ """
+ url = ('/projects/%(project_id)s/pipelines/%(id)s/retry' %
+ {'project_id': self.project_id, 'id': self.id})
+ r = self.gitlab._raw_post(url, data=None, content_type=None, **kwargs)
+ raise_error_from_response(r, GitlabPipelineRetryError, 201)
+ self._set_from_dict(r.json())
+
+ def cancel(self, **kwargs):
+ """Cancel builds in a pipeline.
+
+ Raises:
+ GitlabConnectionError: If the server cannot be reached.
+ GitlabPipelineCancelError: If the retry cannot be done.
+ """
+ url = ('/projects/%(project_id)s/pipelines/%(id)s/cancel' %
+ {'project_id': self.project_id, 'id': self.id})
+ r = self.gitlab._raw_post(url, data=None, content_type=None, **kwargs)
+ raise_error_from_response(r, GitlabPipelineRetryError, 200)
+ self._set_from_dict(r.json())
+
+
+class ProjectPipelineManager(BaseManager):
+ obj_cls = ProjectPipeline
+
+
class ProjectSnippetNote(GitlabObject):
_url = '/projects/%(project_id)s/snippets/%(snippet_id)s/notes'
_constructorTypes = {'author': 'User'}
@@ -1804,6 +1841,7 @@ class Project(GitlabObject):
('mergerequests', ProjectMergeRequestManager, [('project_id', 'id')]),
('milestones', ProjectMilestoneManager, [('project_id', 'id')]),
('notes', ProjectNoteManager, [('project_id', 'id')]),
+ ('pipelines', ProjectPipelineManager, [('project_id', 'id')]),
('services', ProjectServiceManager, [('project_id', 'id')]),
('snippets', ProjectSnippetManager, [('project_id', 'id')]),
('tags', ProjectTagManager, [('project_id', 'id')]),