Skip to content
This repository was archived by the owner on Jan 25, 2022. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion models/api.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
require_relative 'services/check_git_details'

java_import Java.org.jruby.exceptions.RaiseException
java_import Java.hudson.model.Action

module GitlabWebHook
class Api < Sinatra::Base
Expand Down Expand Up @@ -41,7 +42,11 @@ class Api < Sinatra::Base
cause_builder = GetBuildCause.new
actions_builder = GetBuildActions.new
details = parse_request
project.scheduleBuild2(project.getQuietPeriod(), cause_builder.with(details), actions_builder.with(project, details))
actions = [cause_builder.with(details)]
if project.multibranchProject?
actions.concat actions_builder.with(project, details)
end
project.scheduleBuild2(project.getQuietPeriod(), actions.to_java(Action))
end
end

Expand Down
3 changes: 2 additions & 1 deletion models/services/get_build_cause.rb
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
include Java

java_import Java.hudson.model.Cause
java_import Java.hudson.model.CauseAction

module GitlabWebHook
class GetBuildCause
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)
Expand Down
13 changes: 12 additions & 1 deletion models/services/get_jenkins_projects.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,13 @@
java_import Java.hudson.plugins.git.browser.GitLab
java_import Java.hudson.plugins.git.util.DefaultBuildChooser

MultiBranchPluginAvailable = true
begin
java_import Java.jenkins.branch.MultiBranchProject
rescue NameError
MultiBranchPluginAvailable = false
end

module GitlabWebHook
class GetJenkinsProjects
include Settings
Expand Down Expand Up @@ -51,7 +58,11 @@ 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|
temp = Java.jenkins.model.Jenkins.instance.getAllItems(AbstractProject.java_class).to_a
if MultiBranchPluginAvailable
temp.concat Java.jenkins.model.Jenkins.instance.getAllItems(MultiBranchProject.java_class).to_a
end
projects = temp.map do |jenkins_project|
Project.new(jenkins_project) unless jenkins_project.java_kind_of?(MatrixConfiguration)
end - [nil]
end
Expand Down
7 changes: 6 additions & 1 deletion models/use_cases/build_now.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -21,7 +22,11 @@ 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))
actions = [cause_builder.with(details)]
if project.multibranchProject?
actions.concat actions_builder.with(project, details)
end
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])
Expand Down
6 changes: 5 additions & 1 deletion models/use_cases/notify_commit.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,11 @@ def call
return "#{project} is not buildable (it is disabled or not saved), skipping polling" unless project.buildable?

begin
return "#{project} scheduled for polling" if project.schedulePolling
if project.multibranchProject?
return "#{project} scheduled for polling" if project.scheduleBuild
else
return "#{project} scheduled for polling" if project.schedulePolling
end
rescue java.lang.Exception => e
# avoid method signature warnings
severe = logger.java_method(:log, [Level, java.lang.String, java.lang.Throwable])
Expand Down
57 changes: 49 additions & 8 deletions models/values/project.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,18 @@
java_import Java.hudson.util.NullStream
java_import Java.hudson.plugins.git.GitSCM
java_import Java.hudson.plugins.git.util.InverseBuildChooser
java_import Java.hudson.plugins.git.util.DefaultBuildChooser
java_import Java.hudson.plugins.git.extensions.impl.PreBuildMerge
java_import Java.hudson.plugins.git.extensions.impl.RelativeTargetDirectory

MultiBranchPluginAvailable = true
begin
java_import Java.jenkins.branch.MultiBranchProject
java_import Java.jenkins.scm.api.SCMSource
rescue NameError
MultiBranchPluginAvailable = false
end

MultipleScmsPluginAvailable = true
begin
java_import Java.org.jenkinsci.plugins.multiplescms.MultiSCM
Expand All @@ -31,9 +40,8 @@ class Project
include Settings
extend Forwardable

def_delegators :@jenkins_project, :schedulePolling, :scheduleBuild2, :fullName, :isParameterized, :isBuildable, :getQuietPeriod, :getProperty, :delete, :description
def_delegators :@jenkins_project, :schedulePolling, :scheduleBuild, :scheduleBuild2, :fullName, :isParameterized, :isBuildable, :getProperty, :delete, :description

alias_method :parametrized?, :isParameterized
alias_method :buildable?, :isBuildable
alias_method :name, :fullName
alias_method :to_s, :fullName
Expand All @@ -58,13 +66,35 @@ def initialize(jenkins_project, env_vars = nil)
end
end

def multibranchProject?
if MultiBranchPluginAvailable
return jenkins_project.java_kind_of?(MultiBranchProject)
end
return false
end

def getQuietPeriod
if multibranchProject?
return 0
end
return jenkins_project.getQuietPeriod()
end

def parametrized?
if !multibranchProject?
return @jenkins_project.isParameterized
end
return false
end

def matches_uri?(details_uri)
return false unless scms.any?
matching_scms?(details_uri)
end

def matches?(details, branch = false, exactly = false)
return false unless buildable?
return true if multibranchProject?
if merge_to?( branch || details.branch )
logger.info("project #{self} merge target matches #{branch || details.branch}")
return true
Expand Down Expand Up @@ -214,12 +244,23 @@ 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 multibranchProject?
jenkins_project.getSCMSources.to_a.each { |scm_source|
scm_source.fetch(nil).to_a.each { |head|
scm = scm_source.build(head)
if scm.java_kind_of?(GitSCM)
@scms.push(scm)
end
}
}
else
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
end
end
Expand Down