Class: Danger::TeamCity
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
- .validates_as_ci?(env) ⇒ Boolean
- .validates_as_github_pr?(env) ⇒ Boolean
- .validates_as_gitlab_pr?(env) ⇒ Boolean
- .validates_as_pr?(env) ⇒ Boolean
Instance Method Summary collapse
-
#initialize(env) ⇒ TeamCity
constructor
A new instance of TeamCity.
- #supported_request_sources ⇒ Object
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
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
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
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
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_sources ⇒ Object
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 |