shipwright 1.1.0 → 1.1.1

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: f88149546b30331caf2fcf70d44d3a7e8382b85a
4
- data.tar.gz: 0841e894ef5a57f840612e2405b453563c3f6ee0
3
+ metadata.gz: 0a65b57439f067bc2629f11f268206e38ea2f693
4
+ data.tar.gz: aec4a8d622075879b06090477c0756be36977e98
5
5
  SHA512:
6
- metadata.gz: a7bc0c5d9ed82f8d441b3a2fe1043f28ea9eb5571777a6f396058a0ee21301da62577b8e50d01522e240db84fca2839ff4641812f20b941b2c7d70f572b631f0
7
- data.tar.gz: 4d9e7c758c36c6b54922e49ad25e1e3f0a498475672f11899926b2da82732c1aa88efbe36aff210162508d133cd57aa663ab51ca1da3a9f4db1d59c644507c8b
6
+ metadata.gz: 77f900e33b722b2df6c2ff62ab6d631529647b49960f547334fbe93f2d92b5c02d34b3de6404de0f10911d7eeac4df4c2ddf93b2fdafa5344a42e3a232c3ef9c
7
+ data.tar.gz: a14df74523c3345dfeafcecdc7af2840a3a615f03b6ae0b2c8fffee780e24f0d750e4c3d8ecb32352996fbd591fd4392c79f506205138e2018572878202c5705
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.0
1
+ 1.1.1
data/bin/shipwright ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "shipwright/cli"
4
+ Shipwright::CLI.start(ARGV)
@@ -0,0 +1,132 @@
1
+ module Shipwright
2
+ class Builder
3
+
4
+ BASE_VERSION = '1.0.0'
5
+ VERSION_FILE = 'VERSION'
6
+ DOCKERRUN = 'Dockerrun.aws.json'
7
+ COMMIT_MESSAGE = "new version %s built by Shipwright #{Shipwright::VERSION}\n
8
+ [ci skip]"
9
+
10
+ attr_accessor :path, :commit_message, :previous_version, :version
11
+
12
+ def self.build(path)
13
+ new(path).build
14
+ end
15
+
16
+ def self.bump
17
+ Bump::Bump.run('patch', bundle: false, tag: false)
18
+ Shipwright.info "Installed #{version} into #{VERSION_FILE}"
19
+ end
20
+
21
+ def self.init
22
+ return if version
23
+
24
+ Shipwright.info "Installing #{BASE_VERSION} into #{VERSION_FILE}"
25
+ File.open(VERSION_FILE, 'wb') { |f| f.write BASE_VERSION }
26
+ end
27
+
28
+ def self.version
29
+ Bump::Bump.version_from_version.tap { |v| return v.first if v }
30
+ end
31
+
32
+ def initialize(path)
33
+ self.path = path
34
+ shipyard
35
+ end
36
+
37
+ def build
38
+ self.class.init
39
+ Shipwright.info "Shipwright is building #{path} (at #{self.class.version})"
40
+
41
+ bump_version
42
+
43
+ build_image
44
+ push_image
45
+
46
+ update_dockerrun
47
+ generate_artifact
48
+ update_ebconfig
49
+
50
+ git_commit
51
+ git_push
52
+
53
+ Shipwright.info "VERSION #{version} built"
54
+ end
55
+
56
+ def bump_version
57
+ self.class.bump
58
+ end
59
+
60
+ def build_image
61
+ Shipwright.info "Building image with tag #{docker_tag}"
62
+ run_cmd "docker build -t #{docker_tag} #{path}"
63
+ # self.image = Docker::Image.build_from_dir(path, 'tag' => docker_tag)
64
+ end
65
+
66
+ def push_image
67
+ Shipwright.info "Pushing image to #{docker_tag}"
68
+ run_cmd "docker push #{docker_tag}"
69
+ # image.push
70
+ end
71
+
72
+ def run_cmd(cmd)
73
+ IO.popen(cmd).each { |line| Shipwright.info line }
74
+ end
75
+
76
+ def update_dockerrun
77
+ Shipwright.info "Updating Dockerrun.aws.json"
78
+ Shipwright::ElasticBeanstalk.update_dockerrun
79
+ end
80
+
81
+ def generate_artifact
82
+ Shipwright.info "Generating artifact"
83
+ Shipwright::ElasticBeanstalk.generate_artifact
84
+ end
85
+
86
+ def update_ebconfig
87
+ Shipwright.info "Updating .elasticbeanstalk/config.yml"
88
+ Shipwright::ElasticBeanstalk.update_ebconfig
89
+ end
90
+
91
+ def git_commit
92
+ Shipwright.info "Commiting to git"
93
+ git.add all: true
94
+ git.commit COMMIT_MESSAGE % version
95
+ git.add_tag git_tag
96
+ end
97
+
98
+ def git_push
99
+ Shipwright.info "Pushing to git"
100
+ git.push 'origin', git.current_branch, tags: true
101
+ end
102
+
103
+ def git_tag
104
+ "build-#{version}"
105
+ end
106
+
107
+ def docker_tag
108
+ "#{shipyard}/#{application}:#{version}"
109
+ end
110
+
111
+ def version
112
+ @version ||= self.class.version
113
+ end
114
+
115
+ def shipyard
116
+ ENV.fetch('SHIPYARD') { raise "set SHIPYARD= to your docker host/scope" }
117
+ end
118
+
119
+ def application
120
+ File.basename Dir.pwd
121
+ end
122
+
123
+ protected
124
+
125
+ attr_accessor :image
126
+
127
+ def git
128
+ @git ||= Git.open(Dir.pwd)
129
+ end
130
+
131
+ end
132
+ end
@@ -9,5 +9,9 @@ module Shipwright
9
9
  puts "shipwright version: #{Shipwright::VERSION}"
10
10
  end
11
11
 
12
+ desc "build", "Build and push docker image"
13
+ def build(base=Dir.pwd)
14
+ Shipwright::Builder.build(base)
15
+ end
12
16
  end
13
17
  end
@@ -0,0 +1,55 @@
1
+ require 'yaml'
2
+ require 'json'
3
+ require 'fileutils'
4
+ require 'zip'
5
+
6
+ module Shipwright
7
+ module ElasticBeanstalk
8
+
9
+ EB_CONFIG = ".elasticbeanstalk/config.yml"
10
+ EB_EXTENSIONS = '.ebextensions'
11
+ DOCKERRUN = 'Dockerrun.aws.json'
12
+
13
+ extend self
14
+
15
+ def update_dockerrun
16
+ dockerrun = JSON.parse(File.read DOCKERRUN)
17
+
18
+ dockerrun['containerDefinitions'].each do |container|
19
+ bits = container['image'].to_s.split(':').tap(&:pop)
20
+ container['image'] = bits.push(version).join(':')
21
+ end
22
+
23
+ File.open(DOCKERRUN, 'wb') { |file| file.write dockerrun.to_json }
24
+ end
25
+
26
+ def generate_artifact
27
+ FileUtils.mkdir_p File.dirname(artifact_path)
28
+ FileUtils.rm artifact_path, force: true
29
+ Zip::File.open(artifact_path, Zip::File::CREATE) do |zip|
30
+ zip.add DOCKERRUN, DOCKERRUN
31
+ ebexts = Dir.glob(File.join EB_EXTENSIONS, '*')
32
+ if ebexts.any?
33
+ zip.mkdir EB_EXTENSIONS
34
+ ebexts.each { |ext| zip.add ext, ext }
35
+ end
36
+ end
37
+ end
38
+
39
+ def update_ebconfig
40
+ config = YAML.load_file EB_CONFIG
41
+ config['deploy'] ||= {}
42
+ config['deploy']['artifact'] = artifact_path
43
+ File.open(EB_CONFIG, 'wb') { |f| f.write config.to_yaml[4..-1] } # skip ---\n
44
+ end
45
+
46
+ def artifact_path
47
+ File.join Dir.pwd, 'builds', "#{version}.zip"
48
+ end
49
+
50
+ def version
51
+ Builder.version
52
+ end
53
+
54
+ end
55
+ end
data/lib/shipwright.rb CHANGED
@@ -1,5 +1,29 @@
1
- require "shipwright/version"
1
+ require 'aws-sdk'
2
+ require 'bump'
3
+ require 'docker'
4
+ require 'git'
5
+ require 'forwardable'
6
+ require 'logger'
7
+
8
+ Docker.options.merge! ssl_verify_peer: false
2
9
 
3
10
  module Shipwright
4
- # Your code goes here...
11
+
12
+ VERSION = File.read(File.expand_path '../../VERSION', __FILE__).chomp
13
+
14
+ extend Forwardable
15
+ extend self
16
+
17
+ attr_accessor :infos
18
+ attr_accessor :errors
19
+
20
+ self.infos = Logger.new(STDOUT)
21
+ self.errors = Logger.new(STDERR)
22
+
23
+ def_delegator :infos, :info
24
+ def_delegator :error, :error
25
+
5
26
  end
27
+
28
+ require 'shipwright/builder'
29
+ require 'shipwright/elastic_beanstalk'
data/shipwright.gemspec CHANGED
@@ -1,11 +1,11 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'shipwright/version'
4
+ VERSION = File.read(File.expand_path '../VERSION', __FILE__).chomp
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "shipwright"
8
- spec.version = Shipwright::VERSION
8
+ spec.version = VERSION
9
9
  spec.authors = ["Adam Hunter"]
10
10
  spec.email = ["adamhunter@me.com"]
11
11
 
@@ -26,6 +26,14 @@ Gem::Specification.new do |spec|
26
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ["lib"]
28
28
 
29
+ spec.add_dependency 'aws-sdk', '~> 2'
30
+ spec.add_dependency 'thor', '~> 0.19.1'
31
+ spec.add_dependency 'bump', '~> 0.5'
32
+ spec.add_dependency 'docker-api', '~> 1.21.4'
33
+ spec.add_dependency 'git', '~> 1.2.9'
34
+ spec.add_dependency 'rubyzip', '~> 1.1.7'
35
+
29
36
  spec.add_development_dependency "bundler", "~> 1.9"
30
- spec.add_development_dependency "rake", "~> 10.0"
37
+ spec.add_development_dependency "rake", "~> 10.0"
38
+ spec.add_development_dependency "rspec", "~> 3.2.0"
31
39
  end
metadata CHANGED
@@ -1,15 +1,99 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shipwright
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Hunter
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-05-20 00:00:00.000000000 Z
11
+ date: 2015-05-29 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: aws-sdk
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: thor
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.19.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.19.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: bump
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.5'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: docker-api
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.21.4
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 1.21.4
69
+ - !ruby/object:Gem::Dependency
70
+ name: git
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 1.2.9
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.2.9
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubyzip
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 1.1.7
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 1.1.7
13
97
  - !ruby/object:Gem::Dependency
14
98
  name: bundler
15
99
  requirement: !ruby/object:Gem::Requirement
@@ -38,6 +122,20 @@ dependencies:
38
122
  - - "~>"
39
123
  - !ruby/object:Gem::Version
40
124
  version: '10.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 3.2.0
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 3.2.0
41
139
  description: CLI Client for implementing the harbor pattern on AWS Elastic Beanstalk
42
140
  email:
43
141
  - adamhunter@me.com
@@ -46,22 +144,19 @@ extensions: []
46
144
  extra_rdoc_files: []
47
145
  files:
48
146
  - ".gitignore"
147
+ - ".rspec"
49
148
  - ".travis.yml"
50
149
  - Gemfile
51
150
  - README.md
52
151
  - Rakefile
53
152
  - VERSION
54
153
  - bin/console
55
- - bin/harbor
56
- - bin/hoist
57
154
  - bin/setup
58
- - bin/ship
155
+ - bin/shipwright
59
156
  - lib/shipwright.rb
157
+ - lib/shipwright/builder.rb
60
158
  - lib/shipwright/cli.rb
61
- - lib/shipwright/cli/harbor.rb
62
- - lib/shipwright/cli/hoist.rb
63
- - lib/shipwright/cli/ship.rb
64
- - lib/shipwright/version.rb
159
+ - lib/shipwright/elastic_beanstalk.rb
65
160
  - shipwright.gemspec
66
161
  homepage: https://github.com/tma1/shipwright
67
162
  licenses: []
data/bin/harbor DELETED
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "shipwright/cli/harbor"
4
- Shipwright::CLI::Harbor.start(ARGV)
data/bin/hoist DELETED
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "shipwright/cli/hoist"
4
- Shipwright::CLI::Hoist.start(ARGV)
data/bin/ship DELETED
@@ -1,4 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "shipwright/cli/ship"
4
- Shipwright::CLI::Ship.start(ARGV)
@@ -1,9 +0,0 @@
1
- require 'shipwright/cli'
2
-
3
- module Shipwright
4
- class CLI
5
- class Harbor < CLI
6
-
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- require 'shipwright/cli'
2
-
3
- module Shipwright
4
- class CLI
5
- class Hoist < CLI
6
-
7
- end
8
- end
9
- end
@@ -1,9 +0,0 @@
1
- require 'shipwright/cli'
2
-
3
- module Shipwright
4
- class CLI
5
- class Ship < CLI
6
-
7
- end
8
- end
9
- end
@@ -1,3 +0,0 @@
1
- module Shipwright
2
- VERSION = File.read(File.expand_path '../../../VERSION', __FILE__).chomp
3
- end