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:

“‘sh 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:

“‘sh 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

Returns a new instance of 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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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