forked from exercism/swift
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Dangerfile
59 lines (53 loc) · 1.94 KB
/
Dangerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# Ensure a clean commits history
if git.commits.any? { |c| c.message =~ /^Merge branch '#{github.branch_for_base}'/ }
fail('Please rebase to get rid of the merge commits in this PR')
end
can_merge = github.pr_json["mergeable"]
is_merged = github.pr_json["merged"]
if is_merged
warn("This PR was merged before CI was done.", sticky: false)
else
warn("This PR cannot be merged yet.", sticky: false) unless can_merge
end
# Make it more obvious that a PR is a work in progress and shouldn't be merged yet
warn("PR is classed as Work in Progress") if github.pr_title.include? "[WIP]"
# Warn when there is a big PR
warn("Big PR") if git.lines_of_code > 500
#ENSURE THERE IS A SUMMARY FOR A PR
warn("Please provide a summary in the Pull Request description. See more info <a href=\"http\://tinyletter.com/exercism/letters/exercism-pull-requests\">here.</a>") if github.pr_body.length < 5
# Ensure that .gitignore is included in new exercises
(git.modified_files + git.added_files)
.map { |path|
match = %r{^(?<dir>exercises/[^/]+).*$}i.match(path) || {}
match[:dir]
}
.uniq
.reject(&:nil?)
.each { |dir|
warn "Missing `#{dir}/.gitignore`" unless File.exists? "#{dir}/.gitignore"
}
# LINT Comments in for each Line
jsonpath = "lintreport.json"
contents = File.read jsonpath
require "json"
if contents.to_s == ''
contents = "[]"
end
json = JSON.parse contents
json.each do |object|
shortFile = object["file"]
shortFile.sub! "/Users/travis/build/exercism/swift/", ''
shortFile = shortFile.to_s || ''
msg = object["reason"].to_s || ''
severity = object["severity"].to_s || ''
isError = severity == "Error"
line = object["line"] || 1
#only warn for files that were edited in this PR.
if isError
warn(msg, file: "/" + shortFile, line: line) if isError
elsif git.modified_files.include? shortFile
warn(msg, file: "/" + shortFile, line: line) unless isError
else
message(msg, file: shortFile, line: line)
end
end