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