argus-builder 0.0.2 → 0.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 493ccb46314486055d4caa0d2168bef4e69313b4
4
- data.tar.gz: 98457b166a0c082cb757ba44b28dccb39dbfbbd8
3
+ metadata.gz: 145c2ab7806fa9d79f972c7c7204fab58c7f991f
4
+ data.tar.gz: afbc50652c564cfd36b3de596c01d901072290c3
5
5
  SHA512:
6
- metadata.gz: 4c826fb33c67b41c83ccbe02863b2f5932ecf1c4f10c126d3405e0937164a7086ee9aed052fb7f7c3866ca355578a0374977ff71f58aced0ad9a887d5f4cc5ef
7
- data.tar.gz: 504c2d7180ed1f595893486444664c14c4b5be1b1578140398216208b5705e64d90d77e094695dbb7eed71fc0dfa1545f47b5a7b683c6b7b1c41327995d6886b
6
+ metadata.gz: 45bb8ebdb954fbff07336c80f870b0dd0a102a63256e11c541daf4f777ba9cad1801d54c4a34b1ccc4f4571defd2a76d965418bb2f95f46dbe421a354fb3ae4d
7
+ data.tar.gz: d9c5c2c0848dfd1be63a487deacd4db6993d7fe30d4c5ae0156498e9f26114cd596bf72d87c4d43f677655417ae0a91ac675666e9e91c149569826ca8a721268
data/README.md CHANGED
@@ -27,7 +27,13 @@ You will need:
27
27
  `GITHUB_TOKEN`
28
28
  - a repository created on ECR to push the docker image once built
29
29
 
30
- Create an SQS queue called `argus`, then:
30
+ If you have local docker, you can run a single build with:
31
+
32
+ ```
33
+ argus-build rlister/argus:master
34
+ ```
35
+
36
+ To run the builder daemon, create an SQS queue called `argus`, then:
31
37
 
32
38
  ```
33
39
  gem install argus-builder
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ ## run a single argus build directly
3
+
4
+ require 'argus'
5
+
6
+ usage = 'argus-build org/repo:branch [sha]'
7
+
8
+ if ARGV.empty?
9
+ puts "Usage: #{usage}"
10
+ exit
11
+ end
12
+
13
+ ## parse github repo
14
+ org, repo, branch = ARGV[0].split(/[\/:]+/, 3)
15
+ sha = ARGV[1] || nil
16
+
17
+ ## incoming message from sqs
18
+ msg = {
19
+ org: org,
20
+ repo: repo,
21
+ branch: branch,
22
+ sha: sha
23
+ }
24
+
25
+ ## prevent timeout on docker api operations (e.g. long bundle install during build)
26
+ Excon.defaults[:write_timeout] = ENV.fetch('DOCKER_WRITE_TIMEOUT', 1000)
27
+ Excon.defaults[:read_timeout] = ENV.fetch('DOCKER_READ_TIMEOUT', 1000)
28
+
29
+ Argus::Runner.new(msg)
@@ -3,7 +3,7 @@
3
3
  require 'aws-sdk'
4
4
 
5
5
  ## parse github repo
6
- org, repo, branch = ARGV[0].split(/[\/:]+/)
6
+ org, repo, branch = ARGV[0].split(/[\/:]+/, 3)
7
7
 
8
8
  ## format to send to argus
9
9
  msg = {
@@ -34,9 +34,15 @@ module Argus
34
34
 
35
35
  @build_time = Benchmark.realtime do
36
36
  @image = Docker::Image.build_from_dir('.', dockerfile: 'Dockerfile') do |chunk|
37
- stream = JSON.parse(chunk)['stream']
38
- unless (stream.nil? || stream.match(/^[\s\.]+$/)) # very verbose about build progress
39
- puts stream.chomp
37
+ chunk.split(/[\r\n]+/).each do |line| # latest docker jams multiple streams into chunk
38
+ begin
39
+ stream = JSON.parse(line)['stream']
40
+ unless (stream.nil? || stream.match(/^[\s\.]+$/)) # very verbose about build progress
41
+ puts stream.chomp
42
+ end
43
+ rescue => e # be robust to json parse errors
44
+ puts e.message
45
+ end
40
46
  end
41
47
  end
42
48
  end
@@ -2,11 +2,11 @@ module Argus
2
2
  class Git
3
3
  attr_reader :org, :repo, :branch, :sha
4
4
 
5
- def initialize(org, repo, branch = 'master')
5
+ def initialize(org, repo, branch = 'master', sha = nil)
6
6
  @org = org
7
7
  @repo = repo
8
8
  @branch = branch
9
- @sha = nil
9
+ @sha = sha
10
10
  end
11
11
 
12
12
  def to_s
@@ -34,7 +34,8 @@ module Argus
34
34
  else
35
35
  clone
36
36
  end
37
- @sha = rev_parse # return SHA
37
+ reset if sha # specific sha was requested
38
+ @sha = rev_parse # return sha
38
39
  end
39
40
 
40
41
  ## checkout branch of an existing repo
@@ -51,6 +52,12 @@ module Argus
51
52
  raise ArgusError, "git clone failed for #{self}" unless $? == 0
52
53
  end
53
54
 
55
+ ## get a specific commit
56
+ def reset
57
+ puts "specific sha requested, resetting to #{sha}"
58
+ %x[git fetch && git reset --hard #{sha}]
59
+ end
60
+
54
61
  ## get current sha
55
62
  def rev_parse
56
63
  %x[git rev-parse #{branch} ].chomp
@@ -52,7 +52,7 @@ module Argus
52
52
  FileUtils.mkdir_p(dir)
53
53
 
54
54
  ## github repo to get
55
- git = Git.new(msg[:org], msg[:repo], msg[:branch])
55
+ git = Git.new(msg[:org], msg[:repo], msg[:branch], msg.fetch(:sha, nil))
56
56
 
57
57
  ## authenticate to registry
58
58
  registry = authenticate_ecr
@@ -1,3 +1,3 @@
1
1
  module Argus
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: argus-builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Lister
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-19 00:00:00.000000000 Z
11
+ date: 2016-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -84,6 +84,7 @@ description:
84
84
  email:
85
85
  - rlister+gh@gmail.com
86
86
  executables:
87
+ - argus-build
87
88
  - argus-send
88
89
  - argus-worker
89
90
  - console
@@ -100,6 +101,7 @@ files:
100
101
  - README.md
101
102
  - Rakefile
102
103
  - argus.gemspec
104
+ - bin/argus-build
103
105
  - bin/argus-send
104
106
  - bin/argus-worker
105
107
  - bin/console