class Danger::DangerfileBitbucketServerPlugin
Handles interacting with Bitbucket Server inside a Dangerfile
. Provides a few functions which wrap ‘pr_json` and also through a few standard functions to simplify your code.
@example Warn when a PR
is classed as work in progress
warn "PR is classed as Work in Progress" if bitbucket_server.pr_title.include? "[WIP]"
@example Declare a PR
to be simple to avoid specific Danger
rules
declared_trivial = (bitbucket_server.pr_title + bitbucket_server.pr_body).include?("#trivial")
@example Ensure that labels have been used on the PR
failure "Please add labels to this PR" if bitbucket_server.pr_labels.empty?
@example Ensure there is a summary for a PR
failure "Please provide a summary in the Pull Request description" if bitbucket_server.pr_body.length < 5
@example Only accept PRs to the develop branch
failure "Please re-submit this PR to develop, we may have already fixed your issue." if bitbucket_server.branch_for_base != "develop"
@example Highlight when a celebrity makes a pull request
message "Welcome, Danger." if bitbucket_server.pr_author == "dangermcshane"
@example Ensure that all PRs have an assignee
warn "This PR does not have any assignees yet." if bitbucket_server.pr_json[:reviewers].length == 0
@example Send a message with links to a collection of specific files
if git.modified_files.include? "config/*.js" config_files = git.modified_files.select { |path| path.include? "config/" } message "This PR changes #{ bitbucket_server.html_link(config_files) }" end
@example Highlight with a clickable link if a Package.json is changed
warn "#{bitbucket_server.html_link("Package.json")} was edited." if git.modified_files.include? "Package.json"
@see danger/danger @tags core, bitbucket_server
Public Class Methods
The instance name used in the Dangerfile
@return [String]
# File lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb, line 60 def self.instance_name "bitbucket_server" end
So that this init can fail.
# File lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb, line 51 def self.new(dangerfile) return nil if dangerfile.env.request_source.class != Danger::RequestSources::BitbucketServer super end
# File lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb, line 64 def initialize(dangerfile) super(dangerfile) @bs = dangerfile.env.request_source end
Public Instance Methods
@!group Bitbucket Server Misc Returns a list of Markdown
links for a file, or files in the head repository. It returns a string of multiple anchors if passed an array. @note Atlassian [disabled inline HTML support](jira.atlassian.com/browse/BSERV-7147).
This method method left for backward compatibility.
@param [String or Array<String>] paths
A list of strings to convert to github anchors
@param [Bool] full_path
Shows the full path as the link's text, defaults to `true`.
@return [String]
# File lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb, line 154 def html_link(paths, full_path: true) markdown_link(paths, full_path: full_path) end
@!group Bitbucket Server Misc Returns a list of Markdown
links for a file, or files in the head repository. It returns a string of multiple links if passed an array. @param [String or Array<String>] paths
A list of strings to convert to Markdown links
@param [Bool] full_path
Shows the full path as the link's text, defaults to `true`.
@return [String]
# File lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb, line 168 def markdown_link(paths, full_path: true) create_link(paths, full_path) { |href, text| create_markdown_link(href, text) } end
@!group PR
Metadata The body text of the Pull Request. @return [String]
# File lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb, line 89 def pr_description @bs.pr_json[:description].to_s end
@!group Bitbucket Server Misc The hash that represents the PR’s JSON. For an example of what this looks like see the [Danger Fixture’d one](raw.githubusercontent.com/danger/danger/master/spec/fixtures/bitbucket_server_api/pr_response.json). @return [Hash]
# File lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb, line 73 def pr_json @bs.pr_json end
@!group PR
Metadata The title of the Pull Request. @return [String]
# File lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb, line 81 def pr_title @bs.pr_json[:title].to_s end
@!group Bitbucket Server Misc Updates the PR
with build status and build server job link. @param [String] status
SUCCESSFUL, FAILED and INPROGRESS
@param [String] build_job_link
Build server job link
@param [String] description
Build status description
@return [String]
# File lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb, line 182 def update_pr_build_status(status, build_job_link, description) @bs.update_pr_build_status(status, build_job_link, description) end
Private Instance Methods
# File lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb, line 188 def create_link(paths, full_path) paths = [paths] unless paths.kind_of?(Array) commit = head_commit repo = pr_json[:fromRef][:repository][:links][:self].flat_map { |l| l[:href] }.first paths = paths.map do |path| path, line = path.split("#") url_path = path.start_with?("/") ? path : "/#{path}" text = full_path ? path : File.basename(path) url_path.gsub!(" ", "%20") line_ref = line ? "##{line}" : "" yield("#{repo}#{url_path}?at=#{commit}#{line_ref}", text) end return paths.first if paths.count < 2 paths.first(paths.count - 1).join(", ") + " & " + paths.last end
# File lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb, line 207 def create_markdown_link(href, text) "[#{text}](#{href})" end