Class: CircleStatus::Script
- Inherits:
-
Object
- Object
- CircleStatus::Script
- Defined in:
- lib/circle_status/script.rb
Instance Method Summary collapse
- #branch ⇒ Object
- #builds ⇒ Object
- #config ⇒ Object
- #failing_files ⇒ Object
- #failures ⇒ Object
- #git ⇒ Object
- #latest_build ⇒ Object
- #latest_build_status ⇒ Object
- #latest_build_url ⇒ Object
- #origin_remote ⇒ Object
- #pending_builds ⇒ Object
- #remote_url ⇒ Object
- #repo_name ⇒ Object
- #run ⇒ Object
- #split_tests ⇒ Object
- #successes ⇒ Object
- #tests ⇒ Object
- #user_name ⇒ Object
Instance Method Details
#branch ⇒ Object
92 93 94 |
# File 'lib/circle_status/script.rb', line 92 def branch git.current_branch end |
#builds ⇒ Object
28 29 30 31 32 33 34 |
# File 'lib/circle_status/script.rb', line 28 def builds @builds ||= begin builds = CircleCi::Project.recent_builds_branch(user_name, repo_name, branch).body fail ProjectError, 'no builds for this repository' if builds.empty? builds end end |
#config ⇒ Object
20 21 22 23 24 25 26 |
# File 'lib/circle_status/script.rb', line 20 def config token = ENV.fetch('CIRCLE_CI_TOKEN') raise ProjectError, 'no CIRCLE_CI_TOKEN ENV var' if token.nil? CircleCi.configure do |config| config.token = token end end |
#failing_files ⇒ Object
72 73 74 |
# File 'lib/circle_status/script.rb', line 72 def failing_files @failing_files ||= failures.map { |test| test['file'] }.uniq.sort end |
#failures ⇒ Object
64 65 66 |
# File 'lib/circle_status/script.rb', line 64 def failures @failures ||= split_tests.last end |
#git ⇒ Object
96 97 98 |
# File 'lib/circle_status/script.rb', line 96 def git @git ||= Git.open(Dir.pwd) end |
#latest_build ⇒ Object
36 37 38 39 40 41 42 |
# File 'lib/circle_status/script.rb', line 36 def latest_build @latest_build ||= begin build = builds.find { |build| %w(failed success).include?(build['status']) } fail ProjectError, 'no builds for this branch yet' if build.nil? build end end |
#latest_build_status ⇒ Object
48 49 50 |
# File 'lib/circle_status/script.rb', line 48 def latest_build_status latest_build['status'] end |
#latest_build_url ⇒ Object
52 53 54 |
# File 'lib/circle_status/script.rb', line 52 def latest_build_url latest_build['build_url'] end |
#origin_remote ⇒ Object
88 89 90 |
# File 'lib/circle_status/script.rb', line 88 def origin_remote @origin_remote ||= git.remotes.find { |r| r.name == 'origin' } end |
#pending_builds ⇒ Object
44 45 46 |
# File 'lib/circle_status/script.rb', line 44 def pending_builds @builds.select { |build| build['outcome'].nil? } end |
#remote_url ⇒ Object
84 85 86 |
# File 'lib/circle_status/script.rb', line 84 def remote_url origin_remote.url end |
#repo_name ⇒ Object
80 81 82 |
# File 'lib/circle_status/script.rb', line 80 def repo_name remote_url[/.+\/(?<repo>.+).git/, :repo] end |
#run ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/circle_status/script.rb', line 3 def run config puts "Status: #{latest_build_status.upcase.white}" puts "Successes: #{successes.size.to_s.green}" puts "Failures: #{failures.size.to_s.red}" puts "Failing specs: #{failing_files.join(' ').red}" puts "Details: #{latest_build_url}" puts puts "Pending builds: #{pending_builds.size}" pending_builds.map do |pending| puts " - #{pending['status']}: #{pending['build_url']}" end rescue ProjectError => e puts "Circle Status failure: #{e.message}" end |
#split_tests ⇒ Object
68 69 70 |
# File 'lib/circle_status/script.rb', line 68 def split_tests @split_tests ||= tests['tests'].partition { |test| test['result'] != 'failure' } end |
#successes ⇒ Object
60 61 62 |
# File 'lib/circle_status/script.rb', line 60 def successes @sucesses ||= split_tests.first end |
#tests ⇒ Object
56 57 58 |
# File 'lib/circle_status/script.rb', line 56 def tests @tests ||= CircleCi::Build.tests(user_name, repo_name, latest_build['build_num']).body end |
#user_name ⇒ Object
76 77 78 |
# File 'lib/circle_status/script.rb', line 76 def user_name remote_url[/github.com[\/:](?<user>.+)?\//, :user] end |