diff --git a/jenkins_jobs/modules/triggers.py b/jenkins_jobs/modules/triggers.py index 7b3b81d7d..65674d9a2 100644 --- a/jenkins_jobs/modules/triggers.py +++ b/jenkins_jobs/modules/triggers.py @@ -1200,11 +1200,14 @@ def github_pull_request(registry, xml_parent, data): def gitlab_merge_request(registry, xml_parent, data): """yaml: gitlab-merge-request Build merge requests in gitlab and report results. - Requires the Jenkins :jenkins-wiki:`Gitlab MergeRequest Builder Plugin. + Requires the Jenkins :jenkins-wiki:`Gitlab MergeRequest Builder Plugin `. :arg string cron: Cron syntax of when to run (required) :arg string project-path: Gitlab-relative path to project (required) + :arg string target-branch-regex: Allow execution of this job for certain + branches only (default ''). Requires Gitlab MergeRequest Builder + Plugin >= 2.0.0 :arg string use-http-url: Use the HTTP(S) URL to fetch/clone repository (default false) :arg string assignee-filter: Only MRs with this assigned user will @@ -1215,36 +1218,66 @@ def gitlab_merge_request(registry, xml_parent, data): in merge reguest (default '') :arg string publish-build-progress-messages: Publish build progress messages (except build failed) (default true) + + .. deprecated:: 2.0.0 + :arg string auto-close-failed: On failure, auto close the request (default false) :arg string auto-merge-passed: On success, auto merge the request (default false) - Example: + Example (version < 2.0.0): .. literalinclude:: \ - /../../tests/triggers/fixtures/gitlab-merge-request.yaml + /../../tests/triggers/fixtures/gitlab-merge-request001.yaml + + Example (version >= 2.0.0): + + .. literalinclude:: \ + /../../tests/triggers/fixtures/gitlab-merge-request002.yaml """ ghprb = XML.SubElement(xml_parent, 'org.jenkinsci.plugins.gitlab.' 'GitlabBuildTrigger') - # Because of a design limitation in the GitlabBuildTrigger Jenkins plugin - # both 'spec' and '__cron' have to be set to the same value to have them - # take effect. Also, cron and projectPath are prefixed with underscores - # in the plugin, but spec is not. - mapping = [ - ('cron', 'spec', None), - ('cron', '__cron', None), - ('project-path', '__projectPath', None), - ('use-http-url', '__useHttpUrl', False), - ('assignee-filter', '__assigneeFilter', 'jenkins'), - ('tag-filter', '__tagFilter', 'Build'), - ('trigger-comment', '__triggerComment', ''), - ('publish-build-progress-messages', '__publishBuildProgressMessages', - True), - ('auto-close-failed', '__autoCloseFailed', False), - ('auto-merge-passed', '__autoMergePassed', False), - ] + plugin_info = registry.get_plugin_info('Gitlab Merge Request Builder') + + # Note: Assume latest version of plugin is preferred config format + plugin_ver = pkg_resources.parse_version( + plugin_info.get('version', str(sys.maxsize))) + + if plugin_ver >= pkg_resources.parse_version("2.0.0"): + mapping = [ + ('cron', 'spec', None), + ('project-path', 'projectPath', None), + ('target-branch-regex', 'targetBranchRegex', ''), + ('use-http-url', 'useHttpUrl', False), + ('assignee-filter', 'assigneeFilter', 'jenkins'), + ('tag-filter', 'tagFilter', 'Build'), + ('trigger-comment', 'triggerComment', ''), + ('auto-close-failed', 'autoCloseFailed', False), + ('auto-merge-passed', 'autoMergePassed', False), + ] + else: + # The plugin version is < 2.0.0 + + # Because of a design limitation in the GitlabBuildTrigger Jenkins + # plugin both 'spec' and '__cron' have to be set to the same value to + # have them take effect. Also, cron and projectPath are prefixed with + # underscores in the plugin, but spec is not. + mapping = [ + ('cron', 'spec', None), + ('cron', '__cron', None), + ('project-path', '__projectPath', None), + ('use-http-url', '__useHttpUrl', False), + ('assignee-filter', '__assigneeFilter', 'jenkins'), + ('tag-filter', '__tagFilter', 'Build'), + ('trigger-comment', '__triggerComment', ''), + ('publish-build-progress-messages', + '__publishBuildProgressMessages', True), + ('auto-close-failed', '__autoCloseFailed', False), + ('auto-merge-passed', '__autoMergePassed', False), + ] + helpers.convert_mapping_to_xml(ghprb, data, mapping, True) diff --git a/tests/triggers/fixtures/gitlab-merge-request001.plugins_info.yaml b/tests/triggers/fixtures/gitlab-merge-request001.plugins_info.yaml new file mode 100644 index 000000000..7e8ffa42c --- /dev/null +++ b/tests/triggers/fixtures/gitlab-merge-request001.plugins_info.yaml @@ -0,0 +1,3 @@ +- longName: 'Gitlab Merge Request Builder' + shortName: 'gitlab-merge-request-jenkins' + version: '0' diff --git a/tests/triggers/fixtures/gitlab-merge-request.xml b/tests/triggers/fixtures/gitlab-merge-request001.xml similarity index 100% rename from tests/triggers/fixtures/gitlab-merge-request.xml rename to tests/triggers/fixtures/gitlab-merge-request001.xml diff --git a/tests/triggers/fixtures/gitlab-merge-request.yaml b/tests/triggers/fixtures/gitlab-merge-request001.yaml similarity index 100% rename from tests/triggers/fixtures/gitlab-merge-request.yaml rename to tests/triggers/fixtures/gitlab-merge-request001.yaml diff --git a/tests/triggers/fixtures/gitlab-merge-request002.plugins_info.yaml b/tests/triggers/fixtures/gitlab-merge-request002.plugins_info.yaml new file mode 100644 index 000000000..723f3c7a0 --- /dev/null +++ b/tests/triggers/fixtures/gitlab-merge-request002.plugins_info.yaml @@ -0,0 +1,3 @@ +- longName: 'Gitlab Merge Request Builder' + shortName: 'gitlab-merge-request-jenkins' + version: '2' diff --git a/tests/triggers/fixtures/gitlab-merge-request002.xml b/tests/triggers/fixtures/gitlab-merge-request002.xml new file mode 100644 index 000000000..63f0c65a0 --- /dev/null +++ b/tests/triggers/fixtures/gitlab-merge-request002.xml @@ -0,0 +1,16 @@ + + + + + * * * * * + test/project + (.*release.*|.*hotfix.*) + false + jenkinsbot + fix + rebuild + false + false + + + diff --git a/tests/triggers/fixtures/gitlab-merge-request002.yaml b/tests/triggers/fixtures/gitlab-merge-request002.yaml new file mode 100644 index 000000000..f8a9a6a32 --- /dev/null +++ b/tests/triggers/fixtures/gitlab-merge-request002.yaml @@ -0,0 +1,11 @@ +triggers: + - gitlab-merge-request: + cron: '* * * * *' + project-path: 'test/project' + target-branch-regex: '(.*release.*|.*hotfix.*)' + use-http-url: false + assignee-filter: 'jenkinsbot' + tag-filter: 'fix' + trigger-comment: 'rebuild' + auto-close-failed: false + auto-merge-passed: false