Class: Danger::TeamCity

Inherits:
CI
  • Object
show all
Defined in:
lib/danger/ci_source/teamcity.rb

Overview

CI Setup

You need to go to your project settings. Then depending on the type of your build settings, you may need to add a new build step for Danger. You want to be able to run the command bundle exec danger, so the "Simple Command Runner" should be all you need to do that.

Token + Environment Setup

GitHub

As this is self-hosted, you will need to add the DANGER_GITHUB_API_TOKEN to your build user's ENV. The alternative is to pass in the token as a prefix to the command DANGER_GITHUB_API_TOKEN="123" bundle exec danger.

However, you will need to find a way to add the environment vars: GITHUB_REPO_SLUG, GITHUB_PULL_REQUEST_ID and GITHUB_REPO_URL. These are not added by default. You can manually add GITHUB_REPO_SLUG and GITHUB_REPO_URL as build parameters or by exporting them inside your Simple Command Runner.

As for GITHUB_PULL_REQUEST_ID, TeamCity provides the %teamcity.build.branch% variable which is in the format PR_NUMBER/merge. You can slice the Pull Request ID out by doing the following:

branch="%teamcity.build.branch%"
export GITHUB_PULL_REQUEST_ID=(${branch//\// })

Or if you are using the pull request feature you can set an environment parameter called GITHUB_PULL_REQUEST_ID to the value of: %teamcity.pullRequest.number

GitLab

As this is self-hosted, you will need to add the DANGER_GITLAB_API_TOKEN to your build user's ENV. The alternative is to pass in the token as a prefix to the command DANGER_GITLAB_API_TOKEN="123" bundle exec danger.

However, you will need to find a way to add the environment vars: GITLAB_REPO_SLUG, GITLAB_PULL_REQUEST_ID and GITLAB_REPO_URL. These are not added by default. You could do this via the GitLab API potentially.

We would love some advice on improving this setup.

BitBucket Cloud

You will need to add the following environment variables as build parameters or by exporting them inside your Simple Command Runner.

  • BITBUCKET_REPO_SLUG

  • BITBUCKET_REPO_URL

  • DANGER_BITBUCKETCLOUD_USERNAME

  • DANGER_BITBUCKETCLOUD_PASSWORD

or

  • DANGER_BITBUCKETCLOUD_OAUTH_KEY
  • DANGER_BITBUCKETCLOUD_OAUTH_SECRET

You will also need to set the BITBUCKET_BRANCH_NAME environment variable. TeamCity provides %teamcity.build.branch%, which you can use at the top of your Simple Command Runner:

export BITBUCKET_BRANCH_NAME="%teamcity.build.branch%"

BitBucket Server

You will need to add the following environment variables as build parameters or by exporting them inside your Simple Command Runner.

  • DANGER_BITBUCKETSERVER_USERNAME
  • DANGER_BITBUCKETSERVER_PASSWORD
  • DANGER_BITBUCKETSERVER_HOST
  • BITBUCKETSERVER_REPO_SLUG
  • BITBUCKETSERVER_PULL_REQUEST_ID
  • BITBUCKETSERVER_REPO_URL

Instance Attribute Summary

Attributes inherited from CI

#pull_request_id, #repo_slug, #repo_url

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from CI

available_ci_sources, inherited, #supports?

Constructor Details

#initialize(env) ⇒ TeamCity



111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/danger/ci_source/teamcity.rb', line 111

def initialize(env)
  # NB: Unfortunately TeamCity doesn't provide these variables
  # automatically so you have to add these variables manually to your
  # project or build configuration
  if self.class.validates_as_github_pr?(env)
    extract_github_variables!(env)
  elsif self.class.validates_as_gitlab_pr?(env)
    extract_gitlab_variables!(env)
  elsif self.class.validates_as_bitbucket_cloud_pr?(env)
    extract_bitbucket_variables!(env)
  elsif self.class.validates_as_bitbucket_server_pr?(env)
    extract_bitbucket_server_variables!(env)
  end
end

Class Method Details

.validates_as_bitbucket_cloud_pr?(env) ⇒ Boolean



90
91
92
# File 'lib/danger/ci_source/teamcity.rb', line 90

def validates_as_bitbucket_cloud_pr?(env)
  ["BITBUCKET_REPO_SLUG", "BITBUCKET_BRANCH_NAME", "BITBUCKET_REPO_URL"].all? { |x| env[x] && !env[x].empty? }
end

.validates_as_bitbucket_server_pr?(env) ⇒ Boolean



94
95
96
# File 'lib/danger/ci_source/teamcity.rb', line 94

def validates_as_bitbucket_server_pr?(env)
  ["BITBUCKETSERVER_REPO_SLUG", "BITBUCKETSERVER_PULL_REQUEST_ID", "BITBUCKETSERVER_REPO_URL"].all? { |x| env[x] && !env[x].empty? }
end

.validates_as_ci?(env) ⇒ Boolean



99
100
101
# File 'lib/danger/ci_source/teamcity.rb', line 99

def self.validates_as_ci?(env)
  env.key? "TEAMCITY_VERSION"
end

.validates_as_github_pr?(env) ⇒ Boolean



82
83
84
# File 'lib/danger/ci_source/teamcity.rb', line 82

def validates_as_github_pr?(env)
  ["GITHUB_PULL_REQUEST_ID", "GITHUB_REPO_URL"].all? { |x| env[x] && !env[x].empty? }
end

.validates_as_gitlab_pr?(env) ⇒ Boolean



86
87
88
# File 'lib/danger/ci_source/teamcity.rb', line 86

def validates_as_gitlab_pr?(env)
  ["GITLAB_REPO_SLUG", "GITLAB_PULL_REQUEST_ID", "GITLAB_REPO_URL"].all? { |x| env[x] && !env[x].empty? }
end

.validates_as_pr?(env) ⇒ Boolean



103
104
105
# File 'lib/danger/ci_source/teamcity.rb', line 103

def self.validates_as_pr?(env)
  validates_as_github_pr?(env) || validates_as_gitlab_pr?(env) || validates_as_bitbucket_cloud_pr?(env) || validates_as_bitbucket_server_pr?(env)
end

Instance Method Details

#supported_request_sourcesObject



107
108
109
# File 'lib/danger/ci_source/teamcity.rb', line 107

def supported_request_sources
  @supported_request_sources ||= [Danger::RequestSources::GitHub, Danger::RequestSources::GitLab, Danger::RequestSources::BitbucketCloud, Danger::RequestSources::BitbucketServer]
end