class Danger::EnvironmentManager
Attributes
ci_source[RW]
danger_id[RW]
request_source[RW]
scm[RW]
ui[RW]
Public Class Methods
danger_base_branch()
click to toggle source
@return [String] danger’s default base branch
# File lib/danger/danger_core/environment_manager.rb, line 26 def self.danger_base_branch "danger_base".freeze end
danger_head_branch()
click to toggle source
@return [String] danger’s default head branch
# File lib/danger/danger_core/environment_manager.rb, line 21 def self.danger_head_branch "danger_head".freeze end
local_ci_source(env)
click to toggle source
Finds a Danger::CI
class based on the ENV
# File lib/danger/danger_core/environment_manager.rb, line 9 def self.local_ci_source(env) return Danger::LocalOnlyGitRepo if LocalOnlyGitRepo.validates_as_ci? env CI.available_ci_sources.find { |ci| ci.validates_as_ci? env } end
new(env, ui = nil, danger_id = "danger")
click to toggle source
# File lib/danger/danger_core/environment_manager.rb, line 30 def initialize(env, ui = nil, danger_id = "danger") ci_klass = self.class.local_ci_source(env) self.ci_source = ci_klass.new(env) self.ui = ui || Cork::Board.new(silent: false, verbose: false) self.danger_id = danger_id RequestSources::RequestSource.available_request_sources.each do |klass| next unless self.ci_source.supports?(klass) request_source = klass.new(self.ci_source, env) next unless request_source.validates_as_ci? next unless request_source.validates_as_api_source? self.request_source = request_source end raise_error_for_no_request_source(env, self.ui) unless self.request_source self.scm = self.request_source.scm end
pr?(env)
click to toggle source
Uses the current Danger::CI
subclass, and sees if it is a PR
# File lib/danger/danger_core/environment_manager.rb, line 16 def self.pr?(env) local_ci_source(env).validates_as_pr?(env) end
Public Instance Methods
clean_up()
click to toggle source
# File lib/danger/danger_core/environment_manager.rb, line 64 def clean_up [EnvironmentManager.danger_base_branch, EnvironmentManager.danger_head_branch].each do |branch| scm.exec("branch -D #{branch}") unless scm.exec("rev-parse --quiet --verify #{branch}").empty? end end
ensure_danger_branches_are_setup()
click to toggle source
# File lib/danger/danger_core/environment_manager.rb, line 58 def ensure_danger_branches_are_setup clean_up self.request_source.setup_danger_branches end
fill_environment_vars()
click to toggle source
# File lib/danger/danger_core/environment_manager.rb, line 54 def fill_environment_vars request_source.fetch_details end
meta_info_for_base()
click to toggle source
# File lib/danger/danger_core/environment_manager.rb, line 74 def meta_info_for_base scm.exec("--no-pager log #{EnvironmentManager.danger_base_branch} -n1") end
meta_info_for_head()
click to toggle source
# File lib/danger/danger_core/environment_manager.rb, line 70 def meta_info_for_head scm.exec("--no-pager log #{EnvironmentManager.danger_head_branch} -n1") end
pr?()
click to toggle source
# File lib/danger/danger_core/environment_manager.rb, line 50 def pr? self.ci_source != nil end
raise_error_for_no_request_source(env, ui)
click to toggle source
# File lib/danger/danger_core/environment_manager.rb, line 78 def raise_error_for_no_request_source(env, ui) title, subtitle = extract_title_and_subtitle_from_source(ci_source.repo_url) subtitle += travis_note if env["TRAVIS_SECURE_ENV_VARS"] == "true" ui_display_no_request_source_error_message(ui, env, title, subtitle) exit(1) end
Private Instance Methods
extract_title_and_subtitle_from_source(repo_url)
click to toggle source
# File lib/danger/danger_core/environment_manager.rb, line 101 def extract_title_and_subtitle_from_source(repo_url) source = get_repo_source(repo_url) if source title = "For your #{source.source_name} repo, you need to expose: " + source.env_vars.join(", ").yellow subtitle = "You may also need: #{source.optional_env_vars.join(', ')}" if source.optional_env_vars.any? else title = "For Danger to run on this project, you need to expose a set of following the ENV vars:\n#{RequestSources::RequestSource.available_source_names_and_envs.join("\n")}" end [title, subtitle || ""] end
get_repo_source(repo_url)
click to toggle source
# File lib/danger/danger_core/environment_manager.rb, line 89 def get_repo_source(repo_url) if repo_url =~ /github/i RequestSources::GitHub elsif repo_url =~ /gitlab/i RequestSources::GitLab elsif repo_url =~ /bitbucket\.(org|com)/i RequestSources::BitbucketCloud elsif repo_url =~ /\.visualstudio\.com/i || repo_url =~ /dev\.azure\.com/i RequestSources::VSTS end end
travis_note()
click to toggle source
# File lib/danger/danger_core/environment_manager.rb, line 123 def travis_note "\nTravis note: If you have an open source project, you should ensure 'Display value in build log' enabled for these flags, so that PRs from forks work." \ "\nThis also means that people can see this token, so this account should have no write access to repos." end
ui_display_no_request_source_error_message(ui, env, title, subtitle)
click to toggle source
# File lib/danger/danger_core/environment_manager.rb, line 114 def ui_display_no_request_source_error_message(ui, env, title, subtitle) ui.title "Could not set up API to Code Review site for Danger\n".freeze ui.puts title ui.puts subtitle ui.puts "\nFound these keys in your ENV: #{env.keys.join(', '.freeze)}." ui.puts "\nFailing the build, Danger cannot run without API access.".freeze ui.puts "You can see more information at https://danger.systems/guides/getting_started.html".freeze end