diff --git a/models/services/get_build_actions.rb b/models/services/get_build_actions.rb index bac638c..107ec25 100644 --- a/models/services/get_build_actions.rb +++ b/models/services/get_build_actions.rb @@ -13,9 +13,9 @@ def with(project, details) return [] unless project.parametrized? # no need to process if not parameterized if details.kind == 'merge_request' - ParametersAction.new( java.util.ArrayList.new(GetParametersValues.new.with_mr(project, details)) ) + [ ParametersAction.new( java.util.ArrayList.new(GetParametersValues.new.with_mr(project, details)) ) ] else - ParametersAction.new( java.util.ArrayList.new(GetParametersValues.new.with(project, details)) ) + [ ParametersAction.new( java.util.ArrayList.new(GetParametersValues.new.with(project, details)) ) ] end end end diff --git a/models/services/get_build_cause.rb b/models/services/get_build_cause.rb index 7bbc8d9..294e797 100644 --- a/models/services/get_build_cause.rb +++ b/models/services/get_build_cause.rb @@ -1,6 +1,7 @@ include Java java_import Java.hudson.model.Cause +java_import Java.hudson.model.CauseAction module GitlabWebHook class GetBuildCause @@ -8,7 +9,7 @@ def with(details) raise ArgumentError.new('details are required') unless details notes = details.payload ? from_payload(details) : 'no payload available' - Cause::RemoteCause.new(details.repository_uri.host, notes) + CauseAction.new(Cause::RemoteCause.new(details.repository_uri.host, notes)) end def from_payload(details) diff --git a/models/services/get_jenkins_projects.rb b/models/services/get_jenkins_projects.rb index 1307ce3..fe5e2c4 100644 --- a/models/services/get_jenkins_projects.rb +++ b/models/services/get_jenkins_projects.rb @@ -5,7 +5,7 @@ include Java -java_import Java.hudson.model.AbstractProject +java_import Java.hudson.model.Job java_import Java.hudson.matrix.MatrixConfiguration java_import Java.hudson.plugins.git.GitSCM @@ -51,7 +51,7 @@ def master(details) def all projects = nil Security.impersonate(ACL::SYSTEM) do - projects = Java.jenkins.model.Jenkins.instance.getAllItems(AbstractProject.java_class).map do |jenkins_project| + projects = Java.jenkins.model.Jenkins.instance.getAllItems(Job.java_class).map do |jenkins_project| Project.new(jenkins_project) unless jenkins_project.java_kind_of?(MatrixConfiguration) end - [nil] end diff --git a/models/use_cases/build_now.rb b/models/use_cases/build_now.rb index 0aeeeba..8c4132f 100644 --- a/models/use_cases/build_now.rb +++ b/models/use_cases/build_now.rb @@ -8,6 +8,7 @@ class BuildNow java_import Java.java.util.logging.Logger java_import Java.java.util.logging.Level + java_import Java.hudson.model.Action def initialize(project, logger = Logger.getLogger(self.class.name)) raise ArgumentError.new('project is required') unless project @@ -21,7 +22,9 @@ def with(details, cause_builder = GetBuildCause.new, actions_builder = GetBuildA raise ArgumentError.new('details are required') unless details begin - return "#{project} scheduled for build" if project.scheduleBuild2(project.getQuietPeriod(), cause_builder.with(details), actions_builder.with(project, details)) + causeAction = cause_builder.with(details) + actions = [ causeAction ] + actions_builder.with(project, details) + return "#{project} scheduled for build" if project.scheduleBuild2(project.getQuietPeriod(), actions.to_java(Action) ) rescue java.lang.Exception => e # avoid method signature warnings severe = logger.java_method(:log, [Level, java.lang.String, java.lang.Throwable]) diff --git a/models/use_cases/create_project_for_branch.rb b/models/use_cases/create_project_for_branch.rb index ea844d8..3147452 100644 --- a/models/use_cases/create_project_for_branch.rb +++ b/models/use_cases/create_project_for_branch.rb @@ -6,6 +6,7 @@ require_relative '../util/settings' require_relative '../services/security' +java_import Java.hudson.model.AbstractProject java_import Java.hudson.plugins.git.GitSCM java_import Java.hudson.plugins.git.BranchSpec java_import Java.hudson.plugins.git.UserRemoteConfig @@ -32,7 +33,7 @@ def with(details) Security.impersonate(ACL::SYSTEM) do branch_project = Java.jenkins.model.Jenkins.instance.copy(copy_from.jenkins_project, new_project_name) - branch_project.scm = new_project_scm + set_scm(branch_project, new_project_scm) branch_project.makeDisabled(false) branch_project.description = settings.description branch_project.save @@ -44,15 +45,15 @@ def with(details) def from_template(template, details) return if details.branch.empty? copy_from = get_template_project(template) - raise ConfigurationException.new("Templates with multiples-scms plugin not supported") if copy_from.multiscm? new_project_name = details.repository_name raise ConfigurationException.new("project #{new_project_name} already created from #{template}") unless @get_jenkins_projects.named(new_project_name).empty? - modified_scm = @build_scm.with(copy_from.jenkins_project.scm, details, true) + @logger.warning( "Multiple-SCMs project #{copy_from} incompletelly copied onto #{new_project_name}" ) if copy_from.multiscm? + modified_scm = @build_scm.with(copy_from.jenkins_project.getSCMs().find.first, details, true) branch_project = nil Security.impersonate(ACL::SYSTEM) do branch_project = Java.jenkins.model.Jenkins.instance.copy(copy_from.jenkins_project, new_project_name) - branch_project.scm = modified_scm + set_scm(branch_project, modified_scm) branch_project.makeDisabled(false) branch_project.save end @@ -72,7 +73,7 @@ def for_merge(details) Security.impersonate(ACL::SYSTEM) do new_project = Java.jenkins.model.Jenkins.instance.copy(copy_from.jenkins_project, new_project_name) - new_project.scm = cloned_scm + set_scm(new_project, cloned_scm) new_project.makeDisabled(false) new_project.description = settings.description new_project.save @@ -107,6 +108,15 @@ def get_new_project_name(copy_from, details) raise ConfigurationException.new("project #{new_project_name} already exists") unless @get_jenkins_projects.named(new_project_name).empty? new_project_name end - + + def set_scm(project, scm) + if project.java_kind_of?(AbstractProject) + project.scm = scm + else + definition = Java.org.jenkinsci.plugins.workflow.cps.CpsScmFlowDefinition.new(scm, project.definition.getScriptPath()) + project.definition = definition + end + end + end end diff --git a/models/values/project.rb b/models/values/project.rb index 294213f..1d12d3a 100644 --- a/models/values/project.rb +++ b/models/values/project.rb @@ -7,6 +7,7 @@ include Java +java_import Java.hudson.model.AbstractProject java_import Java.hudson.model.ParametersDefinitionProperty java_import Java.hudson.model.StringParameterDefinition java_import Java.hudson.model.ChoiceParameterDefinition @@ -214,12 +215,18 @@ def matches_branch?(details, branch = false, exactly = false) def setup_scms @scms = [] - if jenkins_project.scm - if jenkins_project.scm.java_kind_of?(GitSCM) - @scms << jenkins_project.scm - elsif MultipleScmsPluginAvailable && jenkins_project.scm.java_kind_of?(MultiSCM) - @multiscm = true - @scms.concat(jenkins_project.scm.getConfiguredSCMs().select { |scm| scm.java_kind_of?(GitSCM) }) + if jenkins_project.java_kind_of?(AbstractProject) + if jenkins_project.scm + if jenkins_project.scm.java_kind_of?(GitSCM) + @scms << jenkins_project.scm + elsif MultipleScmsPluginAvailable && jenkins_project.scm.java_kind_of?(MultiSCM) + @multiscm = true + @scms.concat(jenkins_project.scm.getConfiguredSCMs().select { |scm| scm.java_kind_of?(GitSCM) }) + end + end + else + if jenkins_project.getSCMs() + @scms.concat(jenkins_project.getSCMs().select { |scm| scm.java_kind_of?(GitSCM) }) end end end