shipwright 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
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