danger 8.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE +22 -0
- data/README.md +94 -0
- data/bin/danger +5 -0
- data/lib/assets/DangerfileTemplate +13 -0
- data/lib/danger.rb +44 -0
- data/lib/danger/ci_source/appcenter.rb +55 -0
- data/lib/danger/ci_source/appveyor.rb +60 -0
- data/lib/danger/ci_source/azure_pipelines.rb +44 -0
- data/lib/danger/ci_source/bamboo.rb +41 -0
- data/lib/danger/ci_source/bitbucket_pipelines.rb +37 -0
- data/lib/danger/ci_source/bitrise.rb +65 -0
- data/lib/danger/ci_source/buddybuild.rb +62 -0
- data/lib/danger/ci_source/buildkite.rb +51 -0
- data/lib/danger/ci_source/ci_source.rb +37 -0
- data/lib/danger/ci_source/circle.rb +94 -0
- data/lib/danger/ci_source/circle_api.rb +51 -0
- data/lib/danger/ci_source/cirrus.rb +31 -0
- data/lib/danger/ci_source/code_build.rb +57 -0
- data/lib/danger/ci_source/codefresh.rb +53 -0
- data/lib/danger/ci_source/codeship.rb +44 -0
- data/lib/danger/ci_source/dotci.rb +52 -0
- data/lib/danger/ci_source/drone.rb +71 -0
- data/lib/danger/ci_source/github_actions.rb +43 -0
- data/lib/danger/ci_source/gitlab_ci.rb +86 -0
- data/lib/danger/ci_source/jenkins.rb +149 -0
- data/lib/danger/ci_source/local_git_repo.rb +119 -0
- data/lib/danger/ci_source/local_only_git_repo.rb +47 -0
- data/lib/danger/ci_source/screwdriver.rb +47 -0
- data/lib/danger/ci_source/semaphore.rb +37 -0
- data/lib/danger/ci_source/support/commits.rb +17 -0
- data/lib/danger/ci_source/support/find_repo_info_from_logs.rb +35 -0
- data/lib/danger/ci_source/support/find_repo_info_from_url.rb +42 -0
- data/lib/danger/ci_source/support/local_pull_request.rb +14 -0
- data/lib/danger/ci_source/support/no_pull_request.rb +7 -0
- data/lib/danger/ci_source/support/no_repo_info.rb +5 -0
- data/lib/danger/ci_source/support/pull_request_finder.rb +179 -0
- data/lib/danger/ci_source/support/remote_pull_request.rb +15 -0
- data/lib/danger/ci_source/support/repo_info.rb +10 -0
- data/lib/danger/ci_source/surf.rb +37 -0
- data/lib/danger/ci_source/teamcity.rb +159 -0
- data/lib/danger/ci_source/travis.rb +51 -0
- data/lib/danger/ci_source/vsts.rb +73 -0
- data/lib/danger/ci_source/xcode_server.rb +48 -0
- data/lib/danger/clients/rubygems_client.rb +14 -0
- data/lib/danger/commands/dangerfile/gem.rb +43 -0
- data/lib/danger/commands/dangerfile/init.rb +30 -0
- data/lib/danger/commands/dry_run.rb +54 -0
- data/lib/danger/commands/init.rb +297 -0
- data/lib/danger/commands/init_helpers/interviewer.rb +92 -0
- data/lib/danger/commands/local.rb +83 -0
- data/lib/danger/commands/local_helpers/http_cache.rb +36 -0
- data/lib/danger/commands/local_helpers/local_setup.rb +46 -0
- data/lib/danger/commands/local_helpers/pry_setup.rb +31 -0
- data/lib/danger/commands/plugins/plugin_json.rb +46 -0
- data/lib/danger/commands/plugins/plugin_lint.rb +54 -0
- data/lib/danger/commands/plugins/plugin_readme.rb +45 -0
- data/lib/danger/commands/pr.rb +92 -0
- data/lib/danger/commands/runner.rb +94 -0
- data/lib/danger/commands/staging.rb +53 -0
- data/lib/danger/commands/systems.rb +43 -0
- data/lib/danger/comment_generators/bitbucket_server.md.erb +20 -0
- data/lib/danger/comment_generators/bitbucket_server_inline.md.erb +15 -0
- data/lib/danger/comment_generators/bitbucket_server_message_group.md.erb +12 -0
- data/lib/danger/comment_generators/github.md.erb +55 -0
- data/lib/danger/comment_generators/github_inline.md.erb +26 -0
- data/lib/danger/comment_generators/gitlab.md.erb +40 -0
- data/lib/danger/comment_generators/gitlab_inline.md.erb +26 -0
- data/lib/danger/comment_generators/vsts.md.erb +20 -0
- data/lib/danger/core_ext/file_list.rb +18 -0
- data/lib/danger/core_ext/string.rb +20 -0
- data/lib/danger/danger_core/dangerfile.rb +341 -0
- data/lib/danger/danger_core/dangerfile_dsl.rb +29 -0
- data/lib/danger/danger_core/dangerfile_generator.rb +11 -0
- data/lib/danger/danger_core/environment_manager.rb +123 -0
- data/lib/danger/danger_core/executor.rb +92 -0
- data/lib/danger/danger_core/message_aggregator.rb +49 -0
- data/lib/danger/danger_core/message_group.rb +68 -0
- data/lib/danger/danger_core/messages/base.rb +56 -0
- data/lib/danger/danger_core/messages/markdown.rb +42 -0
- data/lib/danger/danger_core/messages/violation.rb +54 -0
- data/lib/danger/danger_core/plugins/dangerfile_bitbucket_cloud_plugin.rb +144 -0
- data/lib/danger/danger_core/plugins/dangerfile_bitbucket_server_plugin.rb +211 -0
- data/lib/danger/danger_core/plugins/dangerfile_danger_plugin.rb +248 -0
- data/lib/danger/danger_core/plugins/dangerfile_git_plugin.rb +158 -0
- data/lib/danger/danger_core/plugins/dangerfile_github_plugin.rb +254 -0
- data/lib/danger/danger_core/plugins/dangerfile_gitlab_plugin.rb +240 -0
- data/lib/danger/danger_core/plugins/dangerfile_local_only_plugin.rb +42 -0
- data/lib/danger/danger_core/plugins/dangerfile_messaging_plugin.rb +218 -0
- data/lib/danger/danger_core/plugins/dangerfile_vsts_plugin.rb +191 -0
- data/lib/danger/danger_core/standard_error.rb +143 -0
- data/lib/danger/helpers/array_subclass.rb +61 -0
- data/lib/danger/helpers/comment.rb +32 -0
- data/lib/danger/helpers/comments_helper.rb +178 -0
- data/lib/danger/helpers/comments_parsing_helper.rb +70 -0
- data/lib/danger/helpers/emoji_mapper.rb +41 -0
- data/lib/danger/helpers/find_max_num_violations.rb +31 -0
- data/lib/danger/helpers/message_groups_array_helper.rb +31 -0
- data/lib/danger/plugin_support/gems_resolver.rb +77 -0
- data/lib/danger/plugin_support/plugin.rb +49 -0
- data/lib/danger/plugin_support/plugin_file_resolver.rb +30 -0
- data/lib/danger/plugin_support/plugin_linter.rb +161 -0
- data/lib/danger/plugin_support/plugin_parser.rb +199 -0
- data/lib/danger/plugin_support/templates/readme_table.html.erb +26 -0
- data/lib/danger/request_sources/bitbucket_cloud.rb +171 -0
- data/lib/danger/request_sources/bitbucket_cloud_api.rb +181 -0
- data/lib/danger/request_sources/bitbucket_server.rb +105 -0
- data/lib/danger/request_sources/bitbucket_server_api.rb +117 -0
- data/lib/danger/request_sources/github/github.rb +530 -0
- data/lib/danger/request_sources/github/github_review.rb +126 -0
- data/lib/danger/request_sources/github/github_review_resolver.rb +19 -0
- data/lib/danger/request_sources/github/github_review_unsupported.rb +25 -0
- data/lib/danger/request_sources/gitlab.rb +525 -0
- data/lib/danger/request_sources/local_only.rb +53 -0
- data/lib/danger/request_sources/request_source.rb +85 -0
- data/lib/danger/request_sources/support/get_ignored_violation.rb +17 -0
- data/lib/danger/request_sources/vsts.rb +118 -0
- data/lib/danger/request_sources/vsts_api.rb +138 -0
- data/lib/danger/scm_source/git_repo.rb +181 -0
- data/lib/danger/version.rb +4 -0
- metadata +339 -0
@@ -0,0 +1,37 @@
|
|
1
|
+
# http://github.com/surf-build/surf
|
2
|
+
require "danger/request_sources/github/github"
|
3
|
+
|
4
|
+
module Danger
|
5
|
+
# ### CI Setup
|
6
|
+
#
|
7
|
+
# You want to add `bundle exec danger` to your `build.sh` file to run Danger at the
|
8
|
+
# end of your build.
|
9
|
+
#
|
10
|
+
# ### Token Setup
|
11
|
+
#
|
12
|
+
# As this is self-hosted, you will need to add the `DANGER_GITHUB_API_TOKEN` to your build user's ENV. The alternative
|
13
|
+
# is to pass in the token as a prefix to the command `DANGER_GITHUB_API_TOKEN="123" bundle exec danger`.
|
14
|
+
#
|
15
|
+
class Surf < CI
|
16
|
+
def self.validates_as_ci?(env)
|
17
|
+
return ["SURF_REPO", "SURF_NWO"].all? { |x| env[x] && !env[x].empty? }
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.validates_as_pr?(env)
|
21
|
+
validates_as_ci?(env)
|
22
|
+
end
|
23
|
+
|
24
|
+
def supported_request_sources
|
25
|
+
@supported_request_sources ||= [Danger::RequestSources::GitHub]
|
26
|
+
end
|
27
|
+
|
28
|
+
def initialize(env)
|
29
|
+
self.repo_slug = env["SURF_NWO"]
|
30
|
+
if env["SURF_PR_NUM"].to_i > 0
|
31
|
+
self.pull_request_id = env["SURF_PR_NUM"]
|
32
|
+
end
|
33
|
+
|
34
|
+
self.repo_url = env["SURF_REPO"]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,159 @@
|
|
1
|
+
# https://www.jetbrains.com/teamcity/
|
2
|
+
require "danger/request_sources/github/github"
|
3
|
+
require "danger/request_sources/gitlab"
|
4
|
+
|
5
|
+
module Danger
|
6
|
+
# ### CI Setup
|
7
|
+
#
|
8
|
+
# You need to go to your project settings. Then depending on the type of your build settings, you may need
|
9
|
+
# to add a new build step for Danger. You want to be able to run the command `bundle exec danger`, so
|
10
|
+
# the "Simple Command Runner" should be all you need to do that.
|
11
|
+
#
|
12
|
+
# ### Token + Environment Setup
|
13
|
+
#
|
14
|
+
# #### GitHub
|
15
|
+
#
|
16
|
+
# As this is self-hosted, you will need to add the `DANGER_GITHUB_API_TOKEN` to your build user's ENV. The alternative
|
17
|
+
# is to pass in the token as a prefix to the command `DANGER_GITHUB_API_TOKEN="123" bundle exec danger`.
|
18
|
+
#
|
19
|
+
# However, you will need to find a way to add the environment vars: `GITHUB_REPO_SLUG`, `GITHUB_PULL_REQUEST_ID` and
|
20
|
+
# `GITHUB_REPO_URL`. These are not added by default. You can manually add `GITHUB_REPO_SLUG` and `GITHUB_REPO_URL`
|
21
|
+
# as build parameters or by exporting them inside your Simple Command Runner.
|
22
|
+
#
|
23
|
+
# As for `GITHUB_PULL_REQUEST_ID`, TeamCity provides the `%teamcity.build.branch%` variable which is in the format
|
24
|
+
# `PR_NUMBER/merge`. You can slice the Pull Request ID out by doing the following:
|
25
|
+
#
|
26
|
+
# ```sh
|
27
|
+
# branch="%teamcity.build.branch%"
|
28
|
+
# export GITHUB_PULL_REQUEST_ID=(${branch//\// })
|
29
|
+
# ```
|
30
|
+
#
|
31
|
+
# #### GitLab
|
32
|
+
#
|
33
|
+
# As this is self-hosted, you will need to add the `DANGER_GITLAB_API_TOKEN` to your build user's ENV. The alternative
|
34
|
+
# is to pass in the token as a prefix to the command `DANGER_GITLAB_API_TOKEN="123" bundle exec danger`.
|
35
|
+
#
|
36
|
+
# However, you will need to find a way to add the environment vars: `GITLAB_REPO_SLUG`, `GITLAB_PULL_REQUEST_ID` and
|
37
|
+
# `GITLAB_REPO_URL`. These are not added by default. You could do this via the GitLab API potentially.
|
38
|
+
#
|
39
|
+
# We would love some advice on improving this setup.
|
40
|
+
#
|
41
|
+
# #### BitBucket Cloud
|
42
|
+
#
|
43
|
+
# You will need to add the following environment variables as build parameters or by exporting them inside your
|
44
|
+
# Simple Command Runner.
|
45
|
+
#
|
46
|
+
#
|
47
|
+
# - `BITBUCKET_REPO_SLUG`
|
48
|
+
# - `BITBUCKET_REPO_URL`
|
49
|
+
#
|
50
|
+
# - `DANGER_BITBUCKETCLOUD_USERNAME`
|
51
|
+
# - `DANGER_BITBUCKETCLOUD_PASSWORD`
|
52
|
+
#
|
53
|
+
# or
|
54
|
+
#
|
55
|
+
# - `DANGER_BITBUCKETCLOUD_OAUTH_KEY`
|
56
|
+
# - `DANGER_BITBUCKETCLOUD_OAUTH_SECRET`
|
57
|
+
#
|
58
|
+
# You will also need to set the `BITBUCKET_BRANCH_NAME` environment variable.
|
59
|
+
# TeamCity provides `%teamcity.build.branch%`, which you can use at the top of your Simple Command Runner:
|
60
|
+
# ```sh
|
61
|
+
# export BITBUCKET_BRANCH_NAME="%teamcity.build.branch%"
|
62
|
+
# ```
|
63
|
+
#
|
64
|
+
# #### BitBucket Server
|
65
|
+
#
|
66
|
+
# You will need to add the following environment variables as build parameters or by exporting them inside your
|
67
|
+
# Simple Command Runner.
|
68
|
+
#
|
69
|
+
# - `DANGER_BITBUCKETSERVER_USERNAME`
|
70
|
+
# - `DANGER_BITBUCKETSERVER_PASSWORD`
|
71
|
+
# - `DANGER_BITBUCKETSERVER_HOST`
|
72
|
+
# - `BITBUCKETSERVER_REPO_SLUG`
|
73
|
+
# - `BITBUCKETSERVER_PULL_REQUEST_ID`
|
74
|
+
# - `BITBUCKETSERVER_REPO_URL`
|
75
|
+
#
|
76
|
+
class TeamCity < CI
|
77
|
+
class << self
|
78
|
+
def validates_as_github_pr?(env)
|
79
|
+
["GITHUB_PULL_REQUEST_ID", "GITHUB_REPO_URL"].all? { |x| env[x] && !env[x].empty? }
|
80
|
+
end
|
81
|
+
|
82
|
+
def validates_as_gitlab_pr?(env)
|
83
|
+
["GITLAB_REPO_SLUG", "GITLAB_PULL_REQUEST_ID", "GITLAB_REPO_URL"].all? { |x| env[x] && !env[x].empty? }
|
84
|
+
end
|
85
|
+
|
86
|
+
def validates_as_bitbucket_cloud_pr?(env)
|
87
|
+
["BITBUCKET_REPO_SLUG", "BITBUCKET_BRANCH_NAME", "BITBUCKET_REPO_URL"].all? { |x| env[x] && !env[x].empty? }
|
88
|
+
end
|
89
|
+
|
90
|
+
def validates_as_bitbucket_server_pr?(env)
|
91
|
+
["BITBUCKETSERVER_REPO_SLUG", "BITBUCKETSERVER_PULL_REQUEST_ID", "BITBUCKETSERVER_REPO_URL"].all? { |x| env[x] && !env[x].empty? }
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.validates_as_ci?(env)
|
96
|
+
env.key? "TEAMCITY_VERSION"
|
97
|
+
end
|
98
|
+
|
99
|
+
def self.validates_as_pr?(env)
|
100
|
+
validates_as_github_pr?(env) || validates_as_gitlab_pr?(env) || validates_as_bitbucket_cloud_pr?(env) || validates_as_bitbucket_server_pr?(env)
|
101
|
+
end
|
102
|
+
|
103
|
+
def supported_request_sources
|
104
|
+
@supported_request_sources ||= [Danger::RequestSources::GitHub, Danger::RequestSources::GitLab, Danger::RequestSources::BitbucketCloud, Danger::RequestSources::BitbucketServer]
|
105
|
+
end
|
106
|
+
|
107
|
+
def initialize(env)
|
108
|
+
# NB: Unfortunately TeamCity doesn't provide these variables
|
109
|
+
# automatically so you have to add these variables manually to your
|
110
|
+
# project or build configuration
|
111
|
+
if self.class.validates_as_github_pr?(env)
|
112
|
+
extract_github_variables!(env)
|
113
|
+
elsif self.class.validates_as_gitlab_pr?(env)
|
114
|
+
extract_gitlab_variables!(env)
|
115
|
+
elsif self.class.validates_as_bitbucket_cloud_pr?(env)
|
116
|
+
extract_bitbucket_variables!(env)
|
117
|
+
elsif self.class.validates_as_bitbucket_server_pr?(env)
|
118
|
+
extract_bitbucket_server_variables!(env)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
private
|
123
|
+
|
124
|
+
def extract_github_variables!(env)
|
125
|
+
self.repo_slug = env["GITHUB_REPO_SLUG"]
|
126
|
+
self.pull_request_id = env["GITHUB_PULL_REQUEST_ID"].to_i
|
127
|
+
self.repo_url = env["GITHUB_REPO_URL"]
|
128
|
+
end
|
129
|
+
|
130
|
+
def extract_gitlab_variables!(env)
|
131
|
+
self.repo_slug = env["GITLAB_REPO_SLUG"]
|
132
|
+
self.pull_request_id = env["GITLAB_PULL_REQUEST_ID"].to_i
|
133
|
+
self.repo_url = env["GITLAB_REPO_URL"]
|
134
|
+
end
|
135
|
+
|
136
|
+
def extract_bitbucket_variables!(env)
|
137
|
+
self.repo_slug = env["BITBUCKET_REPO_SLUG"]
|
138
|
+
self.pull_request_id = bitbucket_pr_from_env(env)
|
139
|
+
self.repo_url = env["BITBUCKET_REPO_URL"]
|
140
|
+
end
|
141
|
+
|
142
|
+
def extract_bitbucket_server_variables!(env)
|
143
|
+
self.repo_slug = env["BITBUCKETSERVER_REPO_SLUG"]
|
144
|
+
self.pull_request_id = env["BITBUCKETSERVER_PULL_REQUEST_ID"].to_i
|
145
|
+
self.repo_url = env["BITBUCKETSERVER_REPO_URL"]
|
146
|
+
end
|
147
|
+
|
148
|
+
# This is a little hacky, because Bitbucket doesn't provide us a PR id
|
149
|
+
def bitbucket_pr_from_env(env)
|
150
|
+
branch_name = env["BITBUCKET_BRANCH_NAME"]
|
151
|
+
repo_slug = env["BITBUCKET_REPO_SLUG"]
|
152
|
+
begin
|
153
|
+
Danger::RequestSources::BitbucketCloudAPI.new(repo_slug, nil, branch_name, env).pull_request_id
|
154
|
+
rescue
|
155
|
+
raise "Failed to find a pull request for branch \"#{branch_name}\" on Bitbucket."
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# http://docs.travis-ci.com/user/osx-ci-environment/
|
2
|
+
# http://docs.travis-ci.com/user/environment-variables/
|
3
|
+
require "danger/request_sources/github/github"
|
4
|
+
|
5
|
+
module Danger
|
6
|
+
# ### CI Setup
|
7
|
+
# You need to edit your `.travis.yml` to include `bundle exec danger`. If you already have
|
8
|
+
# a `script:` section then we recommend adding this command at the end of the script step: `- bundle exec danger`.
|
9
|
+
#
|
10
|
+
# Otherwise, add a `before_script` step to the root of the `.travis.yml` with `bundle exec danger`
|
11
|
+
#
|
12
|
+
# ```ruby
|
13
|
+
# before_script:
|
14
|
+
# - bundle exec danger
|
15
|
+
# ```
|
16
|
+
#
|
17
|
+
# Adding this to your `.travis.yml` allows Danger to fail your build, both on the TravisCI website and within your Pull Request.
|
18
|
+
# With that set up, you can edit your job to add `bundle exec danger` at the build action.
|
19
|
+
#
|
20
|
+
# _Note:_ Travis CI defaults to using an older version of Ruby, so you may need to add `rvm: 2.0.0` to the root your `.travis.yml`.
|
21
|
+
#
|
22
|
+
# ### Token Setup
|
23
|
+
#
|
24
|
+
# You need to add the `DANGER_GITHUB_API_TOKEN` environment variable, to do this,
|
25
|
+
# go to your repo's settings, which should look like: `https://travis-ci.org/[user]/[repo]/settings`.
|
26
|
+
#
|
27
|
+
# If you have an open source project, you should ensure "Display value in build log" enabled, so that PRs from forks work.
|
28
|
+
#
|
29
|
+
class Travis < CI
|
30
|
+
def self.validates_as_ci?(env)
|
31
|
+
env.key? "HAS_JOSH_K_SEAL_OF_APPROVAL"
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.validates_as_pr?(env)
|
35
|
+
exists = ["TRAVIS_PULL_REQUEST", "TRAVIS_REPO_SLUG"].all? { |x| env[x] && !env[x].empty? }
|
36
|
+
exists && env["TRAVIS_PULL_REQUEST"].to_i > 0
|
37
|
+
end
|
38
|
+
|
39
|
+
def supported_request_sources
|
40
|
+
@supported_request_sources ||= [Danger::RequestSources::GitHub]
|
41
|
+
end
|
42
|
+
|
43
|
+
def initialize(env)
|
44
|
+
self.repo_slug = env["TRAVIS_REPO_SLUG"]
|
45
|
+
if env["TRAVIS_PULL_REQUEST"].to_i > 0
|
46
|
+
self.pull_request_id = env["TRAVIS_PULL_REQUEST"]
|
47
|
+
end
|
48
|
+
self.repo_url = GitRepo.new.origins # Travis doesn't provide a repo url env variable :/
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require "danger/request_sources/github/github"
|
2
|
+
require "danger/request_sources/vsts"
|
3
|
+
|
4
|
+
module Danger
|
5
|
+
# ### CI Setup
|
6
|
+
#
|
7
|
+
# You need to go to your project's build definition. Then add a "Command Line" Task with the "Tool" field set to "bundle"
|
8
|
+
# and the "Arguments" field set to "exec danger".
|
9
|
+
#
|
10
|
+
# ### Token Setup
|
11
|
+
#
|
12
|
+
# #### GitHub
|
13
|
+
#
|
14
|
+
# You need to add the `DANGER_GITHUB_API_TOKEN` environment variable, to do this, go to your build definition's variables tab.
|
15
|
+
#
|
16
|
+
# Make sure that `DANGER_GITHUB_API_TOKEN` is not set to secret since vsts does not expose secret variables while building.
|
17
|
+
#
|
18
|
+
# #### VSTS
|
19
|
+
#
|
20
|
+
# You need to add the `DANGER_VSTS_API_TOKEN` and `DANGER_VSTS_HOST` environment variable, to do this,
|
21
|
+
# go to your build definition's variables tab. The `DANGER_VSTS_API_TOKEN` is your vsts personal access token.
|
22
|
+
# Instructions for creating a personal access token can be found [here](https://www.visualstudio.com/en-us/docs/setup-admin/team-services/use-personal-access-tokens-to-authenticate).
|
23
|
+
# For the `DANGER_VSTS_HOST` variable the suggested value is `$(System.TeamFoundationCollectionUri)$(System.TeamProject)`
|
24
|
+
# which will automatically get your vsts domain and your project name needed for the vsts api.
|
25
|
+
#
|
26
|
+
# Make sure that `DANGER_VSTS_API_TOKEN` is not set to secret since vsts does not expose secret variables while building.
|
27
|
+
#
|
28
|
+
class VSTS < CI
|
29
|
+
class << self
|
30
|
+
def github_slug(env)
|
31
|
+
env["BUILD_REPOSITORY_NAME"]
|
32
|
+
end
|
33
|
+
|
34
|
+
def vsts_slug(env)
|
35
|
+
project_name = env["SYSTEM_TEAMPROJECT"]
|
36
|
+
repo_name = env["BUILD_REPOSITORY_NAME"]
|
37
|
+
|
38
|
+
"#{project_name}/#{repo_name}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.validates_as_ci?(env)
|
43
|
+
has_all_variables = ["SYSTEM_TEAMFOUNDATIONCOLLECTIONURI", "BUILD_REPOSITORY_PROVIDER"].all? { |x| env[x] && !env[x].empty? }
|
44
|
+
|
45
|
+
is_support_source_control = ["GitHub", "TfsGit"].include?(env["BUILD_REPOSITORY_PROVIDER"])
|
46
|
+
|
47
|
+
has_all_variables && is_support_source_control
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.validates_as_pr?(env)
|
51
|
+
has_all_variables = ["BUILD_SOURCEBRANCH", "BUILD_REPOSITORY_URI", "BUILD_REASON", "BUILD_REPOSITORY_NAME"].all? { |x| env[x] && !env[x].empty? }
|
52
|
+
|
53
|
+
has_all_variables && env["BUILD_REASON"] == "PullRequest"
|
54
|
+
end
|
55
|
+
|
56
|
+
def supported_request_sources
|
57
|
+
@supported_request_sources ||= [Danger::RequestSources::GitHub, Danger::RequestSources::VSTS]
|
58
|
+
end
|
59
|
+
|
60
|
+
def initialize(env)
|
61
|
+
case env["BUILD_REPOSITORY_PROVIDER"]
|
62
|
+
when "GitHub"
|
63
|
+
self.repo_slug = self.class.github_slug(env)
|
64
|
+
when "TfsGit"
|
65
|
+
self.repo_slug = self.class.vsts_slug(env)
|
66
|
+
end
|
67
|
+
|
68
|
+
repo_matches = env["BUILD_SOURCEBRANCH"].match(%r{refs\/pull\/([0-9]+)\/merge})
|
69
|
+
self.pull_request_id = repo_matches[1] unless repo_matches.nil?
|
70
|
+
self.repo_url = env["BUILD_REPOSITORY_URI"]
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Following the advice from @czechboy0 https://github.com/danger/danger/issues/171
|
2
|
+
# https://github.com/czechboy0/Buildasaur
|
3
|
+
require "danger/request_sources/github/github"
|
4
|
+
|
5
|
+
module Danger
|
6
|
+
# ### CI Setup
|
7
|
+
#
|
8
|
+
# If you're bold enough to use Xcode Bots. You will need to use [Buildasaur](https://github.com/czechboy0/Buildasaur)
|
9
|
+
# in order to work with Danger. This will set up your build environment for you, as the name of the bot contains all
|
10
|
+
# of the environment variables that Danger needs to work.
|
11
|
+
#
|
12
|
+
# With Buildasaur set up, you can edit your job to add `bundle exec danger` as a post-action build script.
|
13
|
+
#
|
14
|
+
# ### Token Setup
|
15
|
+
#
|
16
|
+
# As this is self-hosted, you will need to add the `DANGER_GITHUB_API_TOKEN` to your build user's ENV. The alternative
|
17
|
+
# is to pass in the token as a prefix to the command `DANGER_GITHUB_API_TOKEN="123" bundle exec danger`.`.
|
18
|
+
#
|
19
|
+
class XcodeServer < CI
|
20
|
+
def self.validates_as_ci?(env)
|
21
|
+
env.key? "XCS_BOT_NAME"
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.validates_as_pr?(env)
|
25
|
+
value = env["XCS_BOT_NAME"]
|
26
|
+
!value.nil? && value.include?("BuildaBot")
|
27
|
+
end
|
28
|
+
|
29
|
+
def supported_request_sources
|
30
|
+
@supported_request_sources ||= [
|
31
|
+
Danger::RequestSources::GitHub,
|
32
|
+
Danger::RequestSources::BitbucketServer,
|
33
|
+
Danger::RequestSources::BitbucketCloud
|
34
|
+
]
|
35
|
+
end
|
36
|
+
|
37
|
+
def initialize(env)
|
38
|
+
bot_name = env["XCS_BOT_NAME"]
|
39
|
+
return if bot_name.nil?
|
40
|
+
|
41
|
+
repo_matches = bot_name.match(/\[(.+)\]/)
|
42
|
+
self.repo_slug = repo_matches[1] unless repo_matches.nil?
|
43
|
+
pull_request_id_matches = bot_name.match(/#(\d+)/)
|
44
|
+
self.pull_request_id = pull_request_id_matches[1] unless pull_request_id_matches.nil?
|
45
|
+
self.repo_url = GitRepo.new.origins # Xcode Server doesn't provide a repo url env variable :/
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Danger
|
2
|
+
class RubyGemsClient
|
3
|
+
API_URL = "https://rubygems.org/api/v1/versions/danger/latest.json".freeze
|
4
|
+
DUMMY_VERSION = "0.0.0".freeze
|
5
|
+
|
6
|
+
def self.latest_danger_version
|
7
|
+
require "json"
|
8
|
+
json = JSON.parse(Faraday.get(API_URL).body)
|
9
|
+
json.fetch("version") { DUMMY_VERSION }
|
10
|
+
rescue StandardError => _e
|
11
|
+
DUMMY_VERSION
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require "claide_plugin"
|
2
|
+
require "danger/commands/dangerfile/init"
|
3
|
+
|
4
|
+
module Danger
|
5
|
+
class DangerfileGem < DangerfileCommand
|
6
|
+
self.summary = "Create a gem-based Dangerfile quickly."
|
7
|
+
def self.description
|
8
|
+
<<-DESC
|
9
|
+
Creates a scaffold for the development of a new gem based Dangerfile
|
10
|
+
named `NAME` according to the best practices.
|
11
|
+
DESC
|
12
|
+
end
|
13
|
+
self.command = "gem"
|
14
|
+
self.arguments = [
|
15
|
+
CLAide::Argument.new("NAME", true)
|
16
|
+
]
|
17
|
+
|
18
|
+
def initialize(argv)
|
19
|
+
@name = argv.shift_argument
|
20
|
+
prefix = "dangerfile" + "-"
|
21
|
+
unless @name.nil? || @name.empty? || @name.start_with?(prefix)
|
22
|
+
@name = prefix + @name.dup
|
23
|
+
end
|
24
|
+
@template_url = argv.shift_argument
|
25
|
+
super
|
26
|
+
end
|
27
|
+
|
28
|
+
def validate!
|
29
|
+
super
|
30
|
+
if @name.nil? || @name.empty?
|
31
|
+
help! "A name for the plugin is required."
|
32
|
+
end
|
33
|
+
|
34
|
+
help! "The plugin name cannot contain spaces." if @name =~ /\s/
|
35
|
+
end
|
36
|
+
|
37
|
+
def run
|
38
|
+
runner = CLAide::TemplateRunner.new(@name, "https://github.com/danger/dangerfile-gem-template")
|
39
|
+
runner.clone_template
|
40
|
+
runner.configure_template
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "danger/danger_core/dangerfile_generator"
|
2
|
+
|
3
|
+
# Mainly so we can have a nice structure for commands
|
4
|
+
|
5
|
+
module Danger
|
6
|
+
class DangerfileCommand < Runner
|
7
|
+
self.summary = "Easily create you Dangerfiles."
|
8
|
+
self.command = "dangerfile"
|
9
|
+
|
10
|
+
self.abstract_command = true
|
11
|
+
def self.options
|
12
|
+
[]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# Just a less verbose way of doing the Dangerfile from `danger init`.
|
18
|
+
|
19
|
+
module Danger
|
20
|
+
class DangerfileInit < DangerfileCommand
|
21
|
+
self.summary = "Create an example Dangerfile."
|
22
|
+
self.command = "init"
|
23
|
+
|
24
|
+
def run
|
25
|
+
content = DangerfileGenerator.create_dangerfile(".", cork)
|
26
|
+
File.write("Dangerfile", content)
|
27
|
+
cork.puts "Created" + "./Dangerfile".green
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|