class JenkinsPipelineBuilder::PullRequestGenerator

Attributes

application_name[RW]
open_prs[RW]

Public Class Methods

new(defaults = {}) click to toggle source
# File lib/jenkins_pipeline_builder/pull_request_generator.rb, line 27
def initialize(defaults = {})
  @application_name = defaults[:application_name] || raise('Please set "application_name" in your project!')
  @open_prs = active_prs defaults[:github_site], defaults[:git_org], defaults[:git_repo_name]
end

Public Instance Methods

convert!(job_collection, pr_number) click to toggle source
# File lib/jenkins_pipeline_builder/pull_request_generator.rb, line 32
def convert!(job_collection, pr_number)
  job_collection.defaults[:value][:application_name] = "#{application_name}-PR#{pr_number}"
  job_collection.defaults[:value][:pull_request_number] = pr_number.to_s
  job_collection.jobs.each { |j| override j[:value], pr_number }
end
delete_closed_prs() click to toggle source
# File lib/jenkins_pipeline_builder/pull_request_generator.rb, line 38
def delete_closed_prs
  return if JenkinsPipelineBuilder.debug

  jobs_to_delete = JenkinsPipelineBuilder.client.job.list "^#{application_name}-PR(\\d+)-(.*)$"
  open_prs.each do |pr|
    jobs_to_delete.reject! { |j| j.start_with? "#{application_name}-PR#{pr[:number]}" }
  end
  jobs_to_delete.each { |j| JenkinsPipelineBuilder.client.job.delete j }
end

Private Instance Methods

active_prs(git_url, git_org, git_repo) click to toggle source
# File lib/jenkins_pipeline_builder/pull_request_generator.rb, line 62
def active_prs(git_url, git_org, git_repo)
  (git_url && git_org && git_repo) || raise('Please set github_site, git_org and git_repo_name in your project.')
  # Build the Git URL
  url = "#{git_url}/api/v3/repos/#{git_org}/#{git_repo}/pulls"
  # Download the JSON Data from the API
  begin
    resp = Net::HTTP.get_response(URI.parse(url))
    pulls = JSON.parse(resp.body)
    pulls.map { |p| { number: p['number'], base: p['base']['ref'] } }
  rescue StandardError
    raise 'Failed connecting to github!'
  end
end
override(job, pr_number) click to toggle source
# File lib/jenkins_pipeline_builder/pull_request_generator.rb, line 50
def override(job, pr_number)
  git_version = JenkinsPipelineBuilder.registry.registry[:job][:scm_params].installed_version
  job[:scm_branch] = "origin/pr/#{pr_number}/head"
  job[:scm_params] ||= {}
  job[:scm_params][:refspec] = "refs/pull/#{pr_number}/head:refs/remotes/origin/pr/#{pr_number}/head"
  job[:scm_params][:changelog_to_branch] ||= {}
  if Gem::Version.new(2.0) < git_version
    job[:scm_params][:changelog_to_branch]
      .merge!(remote: 'origin', branch: "pr/#{pr_number}/head")
  end
end