Implement pipeline requirement of github labels
Projects that do not use github reviews may wish to instead use github
labels as a way to trigger pipelines. As such, these projects may also
wish to require labels exist on a pull request when processing other
events.
Change-Id: I8f73c438c58db38790ea7e5bf435fbda01324e77
Story: 2000774
Task: 4632
diff --git a/tests/base.py b/tests/base.py
index 93b5785..4a66de6 100755
--- a/tests/base.py
+++ b/tests/base.py
@@ -936,7 +936,8 @@
'full_name': pr.project
}
},
- 'files': pr.files
+ 'files': pr.files,
+ 'labels': pr.labels
}
return data
diff --git a/tests/fixtures/layouts/requirements-github.yaml b/tests/fixtures/layouts/requirements-github.yaml
index 9933f27..891a366 100644
--- a/tests/fixtures/layouts/requirements-github.yaml
+++ b/tests/fixtures/layouts/requirements-github.yaml
@@ -168,6 +168,21 @@
github:
comment: true
+- pipeline:
+ name: require_label
+ manager: independent
+ require:
+ github:
+ label: approved
+ trigger:
+ github:
+ - event: pull_request
+ action: comment
+ comment: 'test me'
+ success:
+ github:
+ comment: true
+
- job:
name: project1-pipeline
- job:
@@ -186,6 +201,8 @@
name: project8-requireopen
- job:
name: project9-requirecurrent
+- job:
+ name: project10-label
- project:
name: org/project1
@@ -243,3 +260,9 @@
require_current:
jobs:
- project9-requirecurrent
+
+- project:
+ name: org/project10
+ require_label:
+ jobs:
+ - project10-label
diff --git a/tests/unit/test_github_requirements.py b/tests/unit/test_github_requirements.py
index 43bdfc2..135f7ab 100644
--- a/tests/unit/test_github_requirements.py
+++ b/tests/unit/test_github_requirements.py
@@ -350,3 +350,28 @@
self.waitUntilSettled()
# Event hash is not current, should not trigger
self.assertEqual(len(self.history), 1)
+
+ @simple_layout('layouts/requirements-github.yaml', driver='github')
+ def test_pipeline_require_label(self):
+ "Test pipeline requirement: label"
+ A = self.fake_github.openFakePullRequest('org/project10', 'master',
+ 'A')
+ # A comment event that we will keep submitting to trigger
+ comment = A.getCommentAddedEvent('test me')
+ self.fake_github.emitEvent(comment)
+ self.waitUntilSettled()
+ # No label so should not be enqueued
+ self.assertEqual(len(self.history), 0)
+
+ # A derp label should not cause it to be enqueued
+ A.addLabel('derp')
+ self.fake_github.emitEvent(comment)
+ self.waitUntilSettled()
+ self.assertEqual(len(self.history), 0)
+
+ # An approved label goes in
+ A.addLabel('approved')
+ self.fake_github.emitEvent(comment)
+ self.waitUntilSettled()
+ self.assertEqual(len(self.history), 1)
+ self.assertEqual(self.history[0].name, 'project10-label')