From 7b61b011b8fd37b195a0c3d40b63fc187638a8b5 Mon Sep 17 00:00:00 2001 From: Christian Fetzer Date: Sun, 31 Jul 2016 15:21:59 +0200 Subject: gitlab trigger: Update Gitlab to >=1.3.0 Related config changes: 1.1.26: Change triggerOpenMergeRequestOnPush to enum (721fcfdbf81493c8c05893f87048d458524d684d) 1.1.27: Adds addVoteOnMergeRequest and acceptMergeRequestOnSuccess 1.1.28<1.2.0: Adds addCiMessage 1.1.29: Change allowAllBranches to branchFilterName (4da58e696b03273a2c48a3b8c223512bd70bbc80) 1.2.0: Change branchFilterName to branchFilterType (92b79677d2ee4e592686fa39f9d3e253486e40fc) 1.2.4: Adds triggerOnNoteRequest, noteRegex and skipWorkInProgressMergeRequest Change-Id: Ic3b29cfe43a37554b7e0ae5432ddaf8ef987793e --- jenkins_jobs/modules/triggers.py | 74 +++++++++++++++++++--- tests/triggers/fixtures/gitlab001.xml | 6 ++ tests/triggers/fixtures/gitlab002.xml | 6 ++ tests/triggers/fixtures/gitlab003.xml | 6 ++ tests/triggers/fixtures/gitlab004.xml | 6 ++ tests/triggers/fixtures/gitlab005.xml | 6 ++ .../triggers/fixtures/gitlab006.plugins_info.yaml | 3 + tests/triggers/fixtures/gitlab006.xml | 25 ++++++++ tests/triggers/fixtures/gitlab006.yaml | 22 +++++++ 9 files changed, 145 insertions(+), 9 deletions(-) create mode 100644 tests/triggers/fixtures/gitlab006.plugins_info.yaml create mode 100644 tests/triggers/fixtures/gitlab006.xml create mode 100644 tests/triggers/fixtures/gitlab006.yaml diff --git a/jenkins_jobs/modules/triggers.py b/jenkins_jobs/modules/triggers.py index 89140b3c..f4519ed6 100644 --- a/jenkins_jobs/modules/triggers.py +++ b/jenkins_jobs/modules/triggers.py @@ -1066,13 +1066,13 @@ def gitlab_merge_request(parser, xml_parent, data): def gitlab(parser, xml_parent, data): """yaml: gitlab - Makes Jenkins act like a GitlabCI server + Makes Jenkins act like a GitLab CI server. Requires the Jenkins :jenkins-wiki:`GitLab Plugin `. :arg bool trigger-push: Build on Push Events (default true) :arg bool trigger-merge-request: Build on Merge Request Events (default - True) + true) :arg str trigger-open-merge-request-push: Rebuild open Merge Requests on Push Events. @@ -1083,20 +1083,56 @@ def gitlab(parser, xml_parent, data): * **never** (default) * **source** * **both** - :arg bool ci-skip: Enable [ci-skip] (default true) + :arg bool trigger-note: Build when comment is added with defined phrase + (>= 1.2.4) (default true) + :arg str note-regex: Phrase that triggers the build (>= 1.2.4) (default + 'Jenkins please retry a build') + :arg bool ci-skip: Enable skipping builds of commits that contain + [ci-skip] in the commit message (default true) + :arg bool wip-skip: Enable skipping builds of WIP Merge Requests (>= 1.2.4) + (default false) :arg bool set-build-description: Set build description to build cause - (eg. Merge request or Git Push ) (default true) + (eg. Merge request or Git Push) (default true) :arg bool add-note-merge-request: Add note with build status on merge requests (default true) :arg bool add-vote-merge-request: Vote added to note with build status - on merge requests (default true) - :arg bool add-ci-message: Add CI build status (default false) + on merge requests (>= 1.1.27) (default true) + :arg bool accept-merge-request-on-success: Automatically accept the Merge + Request if the build is successful (>= 1.1.27) (default false) + :arg bool add-ci-message: Add CI build status (1.1.28 - 1.2.0) (default + false) :arg bool allow-all-branches: Allow all branches (Ignoring Filtered - Branches) (default false) + Branches) (< 1.1.29) (default false) + :arg str branch-filter-type: Filter branches that can trigger a build. + Valid values and their additional attributes are described in the + `branch filter type`_ table (>= 1.1.29) (default 'All'). :arg list include-branches: Defined list of branches to include (default []) :arg list exclude-branches: Defined list of branches to exclude (default []) + :arg str target-branch-regex: Regular expression to select branches + + .. _`branch filter type`: + + ================== ==================================================== + Branch filter type Description + ================== ==================================================== + All All branches are allowed to trigger this job. + NameBasedFilter Filter branches by name. + List source branches that are allowed to trigger a + build from a Push event or a Merge Request event. If + both fields are left empty, all branches are allowed + to trigger this job. For Merge Request events only + the target branch name is filtered out by the + **include-branches** and **exclude-branches** lists. + + RegexBasedFilter Filter branches by regex + The target branch regex allows to limit the + execution of this job to certain branches. Any + branch matching the specified pattern in + **target-branch-regex** triggers the job. No + filtering is performed if the field is left empty. + ================== ==================================================== Example (version < 1.1.26): @@ -1134,22 +1170,42 @@ def gitlab(parser, xml_parent, data): 'triggerOpenMergeRequestOnPush', True)] convert_mapping_to_xml(gitlab, data, mapping, fail_required=True) + if plugin_ver == pkg_resources.parse_version('1.1.29'): + if data.get('branch-filter-type', '') == 'All': + data['branch-filter-type'] = '' + valid_filters = ['', 'NameBasedFilter', 'RegexBasedFilter'] + mapping = [ + ('branch-filter-type', 'branchFilterName', '', valid_filters)] + convert_mapping_to_xml(gitlab, data, mapping, fail_required=True) + else: + valid_filters = ['All', 'NameBasedFilter', 'RegexBasedFilter'] + mapping = [ + ('branch-filter-type', 'branchFilterType', 'All', valid_filters)] + convert_mapping_to_xml(gitlab, data, mapping, fail_required=True) + XML.SubElement(gitlab, 'spec').text = '' - bool_mapping = [ + mapping = [ ('trigger-push', 'triggerOnPush', True), ('trigger-merge-request', 'triggerOnMergeRequest', True), + ('trigger-note', 'triggerOnNoteRequest', True), + ('note-regex', 'noteRegex', 'Jenkins please retry a build'), ('ci-skip', 'ciSkip', True), + ('wip-skip', 'skipWorkInProgressMergeRequest', True), ('set-build-description', 'setBuildDescription', True), ('add-note-merge-request', 'addNoteOnMergeRequest', True), ('add-vote-merge-request', 'addVoteOnMergeRequest', True), + ('accept-merge-request-on-success', 'acceptMergeRequestOnSuccess', + False), ('add-ci-message', 'addCiMessage', False), ('allow-all-branches', 'allowAllBranches', False), + ('target-branch-regex', 'targetBranchRegex', '') ] + list_mapping = ( ('include-branches', 'includeBranchesSpec', []), ('exclude-branches', 'excludeBranchesSpec', []), ) - convert_mapping_to_xml(gitlab, data, bool_mapping, fail_required=True) + convert_mapping_to_xml(gitlab, data, mapping, fail_required=True) for yaml_name, xml_name, default_val in list_mapping: value = ', '.join(data.get(yaml_name, default_val)) diff --git a/tests/triggers/fixtures/gitlab001.xml b/tests/triggers/fixtures/gitlab001.xml index effd75ea..2b199809 100644 --- a/tests/triggers/fixtures/gitlab001.xml +++ b/tests/triggers/fixtures/gitlab001.xml @@ -3,15 +3,21 @@ true + All true true + true + Jenkins please retry a build true + true true true true + false true true + master, master2, local-test broken-test, master-foo diff --git a/tests/triggers/fixtures/gitlab002.xml b/tests/triggers/fixtures/gitlab002.xml index 603b4e19..e82157ec 100644 --- a/tests/triggers/fixtures/gitlab002.xml +++ b/tests/triggers/fixtures/gitlab002.xml @@ -3,15 +3,21 @@ true + All true true + true + Jenkins please retry a build true + true true true true + false false false + master feature diff --git a/tests/triggers/fixtures/gitlab003.xml b/tests/triggers/fixtures/gitlab003.xml index feb8ab0c..7e85278a 100644 --- a/tests/triggers/fixtures/gitlab003.xml +++ b/tests/triggers/fixtures/gitlab003.xml @@ -3,15 +3,21 @@ true + All true true + true + Jenkins please retry a build true + true true true true + false false false + master baz, foo, fnord diff --git a/tests/triggers/fixtures/gitlab004.xml b/tests/triggers/fixtures/gitlab004.xml index 5b64ddf0..94d8f4fd 100644 --- a/tests/triggers/fixtures/gitlab004.xml +++ b/tests/triggers/fixtures/gitlab004.xml @@ -3,15 +3,21 @@ both + All false false + true + Jenkins please retry a build false + true false false false + false true true + master, master2, local-test broken-test, master-foo diff --git a/tests/triggers/fixtures/gitlab005.xml b/tests/triggers/fixtures/gitlab005.xml index 393d4f90..7870ff70 100644 --- a/tests/triggers/fixtures/gitlab005.xml +++ b/tests/triggers/fixtures/gitlab005.xml @@ -3,15 +3,21 @@ never + All true true + true + Jenkins please retry a build true + true true true true + false false false + diff --git a/tests/triggers/fixtures/gitlab006.plugins_info.yaml b/tests/triggers/fixtures/gitlab006.plugins_info.yaml new file mode 100644 index 00000000..4ba0b897 --- /dev/null +++ b/tests/triggers/fixtures/gitlab006.plugins_info.yaml @@ -0,0 +1,3 @@ +- longName: 'GitLab Plugin' + shortName: 'gitlab-plugin' + version: "1.2.4" diff --git a/tests/triggers/fixtures/gitlab006.xml b/tests/triggers/fixtures/gitlab006.xml new file mode 100644 index 00000000..af5fdac2 --- /dev/null +++ b/tests/triggers/fixtures/gitlab006.xml @@ -0,0 +1,25 @@ + + + + + both + RegexBasedFilter + + false + false + true + Retrigger + false + false + false + false + false + true + true + false + (.*debug.*|.*release.*) + include1, include2 + exclude1, exclude2 + + + diff --git a/tests/triggers/fixtures/gitlab006.yaml b/tests/triggers/fixtures/gitlab006.yaml new file mode 100644 index 00000000..bb84e73d --- /dev/null +++ b/tests/triggers/fixtures/gitlab006.yaml @@ -0,0 +1,22 @@ +triggers: + - gitlab: + trigger-push: false + trigger-merge-request: false + trigger-open-merge-request-push: both + trigger-note-request: false + note-regex: Retrigger + ci-skip: false + wip-skip: false + set-build-description: false + add-note-merge-request: false + add-vote-merge-request: false + accept-merge-request-on-success: true + add-ci-message: true + branch-filter-type: RegexBasedFilter + include-branches: + - include1 + - include2 + exclude-branches: + - exclude1 + - exclude2 + target-branch-regex: '(.*debug.*|.*release.*)' -- cgit