codebuild-tail 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/codebuild-tail +7 -0
- data/lib/code_build_tail/build.rb +37 -0
- data/lib/code_build_tail/logs.rb +34 -0
- data/lib/code_build_tail/main.rb +64 -0
- data/lib/code_build_tail/version.rb +5 -0
- data/lib/code_build_tail.rb +5 -0
- metadata +108 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 725f46b3de3bd6b62ec3103f2f9dfb250b36a40d
|
4
|
+
data.tar.gz: d3c99c52a294767bfdf85bb108461a36950a213a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 220fcf23d5428dd8c95ea796f1a9eff3e36b343c368aaf3382bd5f6cafb9637a46a3c7bbfb3472172fbc045f14efb0dbfb6920662b5fd7898be7aad6d09349bf
|
7
|
+
data.tar.gz: 4a2c100af5a95112bcae79fa01a19e339543acd2816547eefd938134f5daf1630dd82dff7d1282422b7f4459a8d9f1285fb377ab2beacf61c363808e5c733a72
|
data/bin/codebuild-tail
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
module CodeBuildTail
|
3
|
+
class Build
|
4
|
+
attr_reader :build_id, :build, :refresh_count
|
5
|
+
def initialize(client, build_id)
|
6
|
+
@refresh_count = 0
|
7
|
+
@client = client
|
8
|
+
@build_id = build_id
|
9
|
+
end
|
10
|
+
|
11
|
+
def logs
|
12
|
+
@build.logs
|
13
|
+
end
|
14
|
+
|
15
|
+
def missing?
|
16
|
+
@build.nil?
|
17
|
+
end
|
18
|
+
|
19
|
+
def running?
|
20
|
+
@build.build_status == "IN_PROGRESS"
|
21
|
+
end
|
22
|
+
|
23
|
+
def successful?
|
24
|
+
@build.build_status == "SUCCEEDED"
|
25
|
+
end
|
26
|
+
|
27
|
+
def refresh
|
28
|
+
response = @client.batch_get_builds({ ids: [@build_id] })
|
29
|
+
@refresh_count += 1
|
30
|
+
@build = if response[:builds].empty?
|
31
|
+
nil
|
32
|
+
else
|
33
|
+
response[:builds][0]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
module CodeBuildTail
|
3
|
+
class Logs
|
4
|
+
def initialize(_cloudwatch_client, poll_from_start, log_limit)
|
5
|
+
@log_limit = log_limit
|
6
|
+
@next_forward_token = nil
|
7
|
+
@poll_from_start = poll_from_start
|
8
|
+
@cloudwatch_client = Aws::CloudWatchLogs::Client.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def get_latest_logs(group_name, stream_name)
|
12
|
+
params = {
|
13
|
+
log_group_name: group_name,
|
14
|
+
log_stream_name: stream_name,
|
15
|
+
next_token: @next_forward_token,
|
16
|
+
start_from_head: @poll_from_start,
|
17
|
+
limit: @log_limit
|
18
|
+
}
|
19
|
+
resp = @cloudwatch_client.get_log_events(params)
|
20
|
+
@next_forward_token = resp.next_forward_token
|
21
|
+
resp.events
|
22
|
+
end
|
23
|
+
|
24
|
+
def poll_and_show_logs(group_name, stream_name)
|
25
|
+
log_events = get_latest_logs(group_name, stream_name)
|
26
|
+
until log_events.empty?
|
27
|
+
log_events.each do |event|
|
28
|
+
print event.message
|
29
|
+
end
|
30
|
+
log_events = get_latest_logs(group_name, stream_name)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
|
2
|
+
require 'json'
|
3
|
+
require 'aws-sdk-codebuild'
|
4
|
+
require 'aws-sdk-cloudwatchlogs'
|
5
|
+
require 'code_build_tail/logs'
|
6
|
+
require 'code_build_tail/build'
|
7
|
+
|
8
|
+
module CodeBuildTail
|
9
|
+
class Main
|
10
|
+
def initialize(source)
|
11
|
+
@source = source
|
12
|
+
@logs = CodeBuildTail::Logs.new(Aws::CloudWatchLogs::Client.new, true, 100)
|
13
|
+
end
|
14
|
+
|
15
|
+
def read_build
|
16
|
+
build_str = @source.read
|
17
|
+
JSON.parse(build_str)
|
18
|
+
rescue JSON::ParserError => e
|
19
|
+
puts e
|
20
|
+
nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def run
|
24
|
+
build_hash = read_build
|
25
|
+
if build_hash.nil?
|
26
|
+
puts "Unable to parse build"
|
27
|
+
return 1
|
28
|
+
end
|
29
|
+
unless build_hash.key?("build") && build_hash["build"].key?("id")
|
30
|
+
puts "Parsed build json, but no id field"
|
31
|
+
return 1
|
32
|
+
end
|
33
|
+
@build = CodeBuildTail::Build.new(Aws::CodeBuild::Client.new, build_hash["build"]["id"])
|
34
|
+
follow_build
|
35
|
+
end
|
36
|
+
|
37
|
+
def follow_build
|
38
|
+
@build.refresh
|
39
|
+
if @build.missing?
|
40
|
+
puts "No build found for id #{@build.build_id}"
|
41
|
+
return 1
|
42
|
+
end
|
43
|
+
|
44
|
+
loop do
|
45
|
+
@logs.poll_and_show_logs(@build.logs.group_name, @build.logs.stream_name) unless @build.logs.nil?
|
46
|
+
@build.refresh
|
47
|
+
break unless @build.running?
|
48
|
+
|
49
|
+
# Prevent us from getting rate limitted.
|
50
|
+
sleep(sleep_time)
|
51
|
+
end
|
52
|
+
@logs.poll_and_show_logs(@build.logs.group_name, @build.logs.stream_name) unless @build.logs.nil?
|
53
|
+
if @build.successful?
|
54
|
+
0
|
55
|
+
else
|
56
|
+
1
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def sleep_time
|
61
|
+
5 + @build.refresh_count
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
metadata
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: codebuild-tail
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mark Roddy
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-08-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.8'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.8'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rubocop
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.43.0
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.43.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: aws-sdk-cloudwatchlogs
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.23'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.23'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: aws-sdk-codebuild
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.38'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.38'
|
69
|
+
description: codebuild-tail lets you follow the progress of running AWS CodeBuild
|
70
|
+
jobs
|
71
|
+
email:
|
72
|
+
- mroddy@primary.com
|
73
|
+
executables:
|
74
|
+
- codebuild-tail
|
75
|
+
extensions: []
|
76
|
+
extra_rdoc_files: []
|
77
|
+
files:
|
78
|
+
- bin/codebuild-tail
|
79
|
+
- lib/code_build_tail.rb
|
80
|
+
- lib/code_build_tail/build.rb
|
81
|
+
- lib/code_build_tail/logs.rb
|
82
|
+
- lib/code_build_tail/main.rb
|
83
|
+
- lib/code_build_tail/version.rb
|
84
|
+
homepage: https://github.com/PrimaryKids/codebuild-tail
|
85
|
+
licenses:
|
86
|
+
- Apache
|
87
|
+
metadata: {}
|
88
|
+
post_install_message:
|
89
|
+
rdoc_options: []
|
90
|
+
require_paths:
|
91
|
+
- lib
|
92
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
|
+
requirements:
|
99
|
+
- - ">="
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
requirements: []
|
103
|
+
rubyforge_project:
|
104
|
+
rubygems_version: 2.4.5.1
|
105
|
+
signing_key:
|
106
|
+
specification_version: 4
|
107
|
+
summary: Follow the status of CodeBuild jobs
|
108
|
+
test_files: []
|