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//// }) “`

#### 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.

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.



64
65
66
67
68
69
70
71
72
73
74
# File 'lib/danger/ci_source/teamcity.rb', line 64

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)
  end
end

Class Method Details

.validates_as_ci?(env) ⇒ Boolean

Returns:

  • (Boolean)


52
53
54
# File 'lib/danger/ci_source/teamcity.rb', line 52

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

.validates_as_github_pr?(env) ⇒ Boolean

Returns:

  • (Boolean)


43
44
45
# File 'lib/danger/ci_source/teamcity.rb', line 43

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)


47
48
49
# File 'lib/danger/ci_source/teamcity.rb', line 47

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)


56
57
58
# File 'lib/danger/ci_source/teamcity.rb', line 56

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

Instance Method Details

#supported_request_sourcesObject



60
61
62
# File 'lib/danger/ci_source/teamcity.rb', line 60

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