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
93 94 95 |
# File 'lib/circle_status/script.rb', line 93 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
73 74 75 |
# File 'lib/circle_status/script.rb', line 73 def failing_files @failing_files ||= failures.map { |test| test['file'] }.uniq.sort end |
#failures ⇒ Object
65 66 67 |
# File 'lib/circle_status/script.rb', line 65 def failures @failures ||= split_tests.last end |
#git ⇒ Object
97 98 99 |
# File 'lib/circle_status/script.rb', line 97 def git @git ||= Git.open(Dir.pwd) end |
#latest_build ⇒ Object
36 37 38 39 40 41 42 43 |
# File 'lib/circle_status/script.rb', line 36 def latest_build @latest_build ||= begin completed_build_statii = %w(fixed failed success) build = builds.find { |build| completed_build_statii.include?(build['status']) } fail ProjectError, 'no completed builds for this branch yet' if build.nil? build end end |
#latest_build_status ⇒ Object
49 50 51 |
# File 'lib/circle_status/script.rb', line 49 def latest_build_status latest_build['status'] end |
#latest_build_url ⇒ Object
53 54 55 |
# File 'lib/circle_status/script.rb', line 53 def latest_build_url latest_build['build_url'] end |
#origin_remote ⇒ Object
89 90 91 |
# File 'lib/circle_status/script.rb', line 89 def origin_remote @origin_remote ||= git.remotes.find { |r| r.name == 'origin' } end |
#pending_builds ⇒ Object
45 46 47 |
# File 'lib/circle_status/script.rb', line 45 def pending_builds @builds.select { |build| build['outcome'].nil? } end |
#remote_url ⇒ Object
85 86 87 |
# File 'lib/circle_status/script.rb', line 85 def remote_url origin_remote.url end |
#repo_name ⇒ Object
81 82 83 |
# File 'lib/circle_status/script.rb', line 81 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.}" end |
#split_tests ⇒ Object
69 70 71 |
# File 'lib/circle_status/script.rb', line 69 def split_tests @split_tests ||= tests['tests'].partition { |test| test['result'] != 'failure' } end |
#successes ⇒ Object
61 62 63 |
# File 'lib/circle_status/script.rb', line 61 def successes @sucesses ||= split_tests.first end |
#tests ⇒ Object
57 58 59 |
# File 'lib/circle_status/script.rb', line 57 def tests @tests ||= CircleCi::Build.tests(user_name, repo_name, latest_build['build_num']).body end |
#user_name ⇒ Object
77 78 79 |
# File 'lib/circle_status/script.rb', line 77 def user_name remote_url[/github.com[\/:](?<user>.+)?\//, :user] end |