horatio 0.1.7
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/.gitignore +24 -0
- data/.rubocop.yml +169 -0
- data/.ruby-version +1 -0
- data/.travis.yml +25 -0
- data/Gemfile +10 -0
- data/Guardfile +10 -0
- data/LICENSE.txt +22 -0
- data/README.md +73 -0
- data/Rakefile +13 -0
- data/bin/horatio +33 -0
- data/horatio.gemspec +30 -0
- data/lib/horatio.rb +64 -0
- data/lib/horatio/detector.rb +14 -0
- data/lib/horatio/detector/docker.rb +39 -0
- data/lib/horatio/detector/dynamic.rb +33 -0
- data/lib/horatio/detector/io_handler.rb +44 -0
- data/lib/horatio/detector/json_reader.rb +15 -0
- data/lib/horatio/detector/json_writer.rb +26 -0
- data/lib/horatio/detector/maven.rb +48 -0
- data/lib/horatio/detector/node_package.rb +30 -0
- data/lib/horatio/detector/null_writer.rb +11 -0
- data/lib/horatio/detector/rubygem.rb +32 -0
- data/lib/horatio/detector/validator.rb +20 -0
- data/lib/horatio/helper/vcs.rb +12 -0
- data/lib/horatio/releaser.rb +45 -0
- data/lib/horatio/vcs.rb +11 -0
- data/lib/horatio/vcs/git.rb +41 -0
- data/lib/horatio/vcs/subversion.rb +23 -0
- data/lib/horatio/version.rb +3 -0
- data/spec/fixtures/dynamic +10 -0
- data/spec/fixtures/package.json +105 -0
- data/spec/fixtures/pom.xml +822 -0
- data/spec/fixtures/test.gemspec +32 -0
- data/spec/horatio/detector/docker_spec.rb +30 -0
- data/spec/horatio/detector/dynamic_spec.rb +19 -0
- data/spec/horatio/detector/maven_spec.rb +27 -0
- data/spec/horatio/detector/node_package_spec.rb +19 -0
- data/spec/horatio/detector/rubygem_spec.rb +28 -0
- data/spec/horatio/releaser_spec.rb +25 -0
- data/spec/horatio/vcs/git_spec.rb +22 -0
- data/spec/horatio/vcs/subversion_spec.rb +15 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/support/fixture_copy.rb +28 -0
- data/spec/support/reporters.rb +3 -0
- metadata +232 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 810e9dd10448c938b943a08cb2d298a08424625e
|
4
|
+
data.tar.gz: d01dbe1c2ccf868cc5a0334afbb084863b1dae2e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: adb636fd02c7d411b1a0e39d99ba4bd9d7965a458438b2a46d0be73a0167e32e25983770d82ebbb791ea7a58beb97f39a17bf42e9f0db00628d40fd97cf45d63
|
7
|
+
data.tar.gz: 3eb7f85ccc942473c595161bec6d7e62ac2003718f6ee26529b9643dab2d19abc0a5e057e5fddb26f9a9489ff209571a1ab57be0e0fd866994082e6b64ebc7b8
|
data/.gitignore
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
Gemfile.lock
|
2
|
+
*.gem
|
3
|
+
*.rbc
|
4
|
+
.bundle
|
5
|
+
.config
|
6
|
+
.yardoc
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
test
|
19
|
+
docker-image.json
|
20
|
+
docker-build.json
|
21
|
+
horatio.json
|
22
|
+
*.gems
|
23
|
+
*.bin
|
24
|
+
*.swp
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,169 @@
|
|
1
|
+
Lint/DeprecatedClassMethods:
|
2
|
+
Exclude:
|
3
|
+
- 'lib/horatio/detector/io_handler.rb'
|
4
|
+
|
5
|
+
Lint/RescueException:
|
6
|
+
Exclude:
|
7
|
+
- 'bin/horatio'
|
8
|
+
|
9
|
+
Lint/UselessAssignment:
|
10
|
+
Exclude:
|
11
|
+
- 'lib/horatio.rb'
|
12
|
+
|
13
|
+
Metrics/AbcSize:
|
14
|
+
Max: 20
|
15
|
+
|
16
|
+
Metrics/LineLength:
|
17
|
+
Max: 201
|
18
|
+
|
19
|
+
Metrics/MethodLength:
|
20
|
+
Max: 11
|
21
|
+
|
22
|
+
Performance/RedundantMatch:
|
23
|
+
Exclude:
|
24
|
+
- 'lib/horatio/detector/validator.rb'
|
25
|
+
|
26
|
+
Style/BracesAroundHashParameters:
|
27
|
+
Exclude:
|
28
|
+
- 'lib/horatio/releaser.rb'
|
29
|
+
- 'spec/horatio/releaser_spec.rb'
|
30
|
+
- 'spec/horatio/vcs/git_spec.rb'
|
31
|
+
|
32
|
+
Style/CommentAnnotation:
|
33
|
+
Exclude:
|
34
|
+
- 'spec/horatio/releaser_spec.rb'
|
35
|
+
- 'spec/horatio/vcs/git_spec.rb'
|
36
|
+
|
37
|
+
Style/CommentIndentation:
|
38
|
+
Exclude:
|
39
|
+
- 'spec/horatio/detector/rubygem_spec.rb'
|
40
|
+
|
41
|
+
Style/Documentation:
|
42
|
+
Exclude:
|
43
|
+
- 'spec/**/*'
|
44
|
+
- 'test/**/*'
|
45
|
+
- 'lib/horatio/detector.rb'
|
46
|
+
- 'lib/horatio/detector/docker.rb'
|
47
|
+
- 'lib/horatio/detector/dynamic.rb'
|
48
|
+
- 'lib/horatio/detector/io_handler.rb'
|
49
|
+
- 'lib/horatio/detector/json_reader.rb'
|
50
|
+
- 'lib/horatio/detector/json_writer.rb'
|
51
|
+
- 'lib/horatio/detector/maven.rb'
|
52
|
+
- 'lib/horatio/detector/node_package.rb'
|
53
|
+
- 'lib/horatio/detector/null_writer.rb'
|
54
|
+
- 'lib/horatio/detector/rubygem.rb'
|
55
|
+
- 'lib/horatio/detector/validator.rb'
|
56
|
+
- 'lib/horatio/releaser.rb'
|
57
|
+
- 'lib/horatio/vcs.rb'
|
58
|
+
- 'lib/horatio/vcs/git.rb'
|
59
|
+
- 'lib/horatio/vcs/subversion.rb'
|
60
|
+
|
61
|
+
Style/EmptyLinesAroundBlockBody:
|
62
|
+
Exclude:
|
63
|
+
- 'spec/horatio/vcs/git_spec.rb'
|
64
|
+
- 'spec/horatio/vcs/subversion_spec.rb'
|
65
|
+
|
66
|
+
Style/EmptyLinesAroundClassBody:
|
67
|
+
Exclude:
|
68
|
+
- 'lib/horatio/releaser.rb'
|
69
|
+
- 'lib/horatio/vcs/git.rb'
|
70
|
+
- 'lib/horatio/vcs/subversion.rb'
|
71
|
+
|
72
|
+
Style/EmptyLinesAroundModuleBody:
|
73
|
+
Exclude:
|
74
|
+
- 'lib/horatio/helper/vcs.rb'
|
75
|
+
|
76
|
+
Style/ExtraSpacing:
|
77
|
+
Exclude:
|
78
|
+
- 'spec/spec_helper.rb'
|
79
|
+
|
80
|
+
Style/IndentArray:
|
81
|
+
EnforcedStyle: consistent
|
82
|
+
|
83
|
+
Style/IndentationWidth:
|
84
|
+
Exclude:
|
85
|
+
- 'Rakefile'
|
86
|
+
- 'lib/horatio/vcs.rb'
|
87
|
+
- 'lib/horatio/vcs/git.rb'
|
88
|
+
|
89
|
+
Style/LeadingCommentSpace:
|
90
|
+
Exclude:
|
91
|
+
- 'spec/horatio/detector/docker_spec.rb'
|
92
|
+
- 'spec/horatio/releaser_spec.rb'
|
93
|
+
- 'spec/horatio/vcs/git_spec.rb'
|
94
|
+
|
95
|
+
Style/MutableConstant:
|
96
|
+
Exclude:
|
97
|
+
- 'lib/horatio.rb'
|
98
|
+
- 'lib/horatio/version.rb'
|
99
|
+
|
100
|
+
Style/ParallelAssignment:
|
101
|
+
Exclude:
|
102
|
+
- 'lib/horatio.rb'
|
103
|
+
|
104
|
+
Style/PercentLiteralDelimiters:
|
105
|
+
Exclude:
|
106
|
+
- 'horatio.gemspec'
|
107
|
+
- 'spec/fixtures/test.gemspec'
|
108
|
+
|
109
|
+
Style/RedundantReturn:
|
110
|
+
Exclude:
|
111
|
+
- 'lib/horatio/releaser.rb'
|
112
|
+
|
113
|
+
Style/RegexpLiteral:
|
114
|
+
Exclude:
|
115
|
+
- 'Guardfile'
|
116
|
+
|
117
|
+
Style/GuardClause:
|
118
|
+
Exclude:
|
119
|
+
- 'lib/horatio.rb'
|
120
|
+
|
121
|
+
Style/Semicolon:
|
122
|
+
Exclude:
|
123
|
+
- 'lib/horatio.rb'
|
124
|
+
|
125
|
+
Style/SpaceAfterComma:
|
126
|
+
Exclude:
|
127
|
+
- 'bin/horatio'
|
128
|
+
|
129
|
+
Style/SpaceAfterMethodName:
|
130
|
+
Exclude:
|
131
|
+
- 'lib/horatio.rb'
|
132
|
+
|
133
|
+
Style/SpaceAroundBlockParameters:
|
134
|
+
Exclude:
|
135
|
+
- 'lib/horatio/releaser.rb'
|
136
|
+
|
137
|
+
Style/SpaceAroundEqualsInParameterDefault:
|
138
|
+
EnforcedStyle: no_space
|
139
|
+
|
140
|
+
Style/SpaceAroundOperators:
|
141
|
+
Exclude:
|
142
|
+
- 'spec/spec_helper.rb'
|
143
|
+
|
144
|
+
Style/SpaceInsideBlockBraces:
|
145
|
+
Enabled: false
|
146
|
+
|
147
|
+
Style/SpaceInsideHashLiteralBraces:
|
148
|
+
Enabled: false
|
149
|
+
|
150
|
+
Style/SpaceInsideStringInterpolation:
|
151
|
+
Exclude:
|
152
|
+
- 'lib/horatio/releaser.rb'
|
153
|
+
|
154
|
+
Style/StringLiterals:
|
155
|
+
Enabled: false
|
156
|
+
|
157
|
+
Style/SymbolProc:
|
158
|
+
Exclude:
|
159
|
+
- 'lib/horatio/detector.rb'
|
160
|
+
- 'lib/horatio/vcs.rb'
|
161
|
+
|
162
|
+
Style/UnlessElse:
|
163
|
+
Exclude:
|
164
|
+
- 'lib/horatio.rb'
|
165
|
+
|
166
|
+
Style/UnneededPercentQ:
|
167
|
+
Exclude:
|
168
|
+
- 'horatio.gemspec'
|
169
|
+
- 'spec/fixtures/test.gemspec'
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.2.4
|
data/.travis.yml
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
language: ruby
|
2
|
+
rvm:
|
3
|
+
- 2.0.0
|
4
|
+
- 2.1
|
5
|
+
- 2.2
|
6
|
+
- ruby-head
|
7
|
+
- jruby-19mode
|
8
|
+
- jruby-head
|
9
|
+
|
10
|
+
before_install:
|
11
|
+
- gem update bundler
|
12
|
+
|
13
|
+
bundler_args: --without guard
|
14
|
+
|
15
|
+
script: bundle exec rake
|
16
|
+
|
17
|
+
matrix:
|
18
|
+
allow_failures:
|
19
|
+
- rvm: ruby-head
|
20
|
+
- rvm: jruby-head
|
21
|
+
- rvm: jruby-19mode
|
22
|
+
fast_finish: true
|
23
|
+
|
24
|
+
notifications:
|
25
|
+
email: pauly@buzbox.net
|
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
guard :minitest do
|
2
|
+
watch(%r{^spec/(.*)_spec\.rb$})
|
3
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
4
|
+
watch(%r{^spec/spec_helper\.rb$}) { 'spec' }
|
5
|
+
end
|
6
|
+
|
7
|
+
guard :rubocop do
|
8
|
+
watch(%r{.+\.rb$})
|
9
|
+
watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
|
10
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Pauly Myjavec
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
# Horatio
|
2
|
+
|
3
|
+
[](https://travis-ci.org/pmyjavec/horatio)
|
4
|
+
|
5
|
+
Horatio helps you build a Docker image for the project you're working on and produces an artifact (JSON document) which
|
6
|
+
contains meta-data about the image produced, this artifact than can be used in your build pipeline to do things like
|
7
|
+
deploy containers with a configuration management tool / scheduler of your choice, Ansible for example.
|
8
|
+
|
9
|
+
Horatio's advantage is that it stays out of your way and let's you get on with building great software.
|
10
|
+
|
11
|
+
Horatio is most handy if you have an existing build pipeline and just want to try Docker containers out for your project with
|
12
|
+
minimal fuss or have a lot of services to build, especially in different languages.
|
13
|
+
|
14
|
+
## Automatic Project Detection
|
15
|
+
|
16
|
+
If, for example, you have a Java project which you build and manage with maven Horatio can parse a POM for you, strip the name and
|
17
|
+
version and build and push a Docker container to a registry for you.
|
18
|
+
|
19
|
+
The automatic project detection is also good if you're nailing up several services in different languages, this helps
|
20
|
+
automate building of Docker containers in a fast and simple manner, it's been used this way in the past.
|
21
|
+
|
22
|
+
### Supported project types
|
23
|
+
|
24
|
+
Horatio automatically detects the kind of project you're working with and acts accordingly so far it supports:
|
25
|
+
|
26
|
+
* Maven
|
27
|
+
* Ruby Gems
|
28
|
+
* Node JS
|
29
|
+
|
30
|
+
If you use a Horatio document then Horatio will increment the version, commit
|
31
|
+
and push it back the source repository for you. In all other cases Horatio will
|
32
|
+
leave your existing version management alone.
|
33
|
+
|
34
|
+
## Arbitrary Container Builds
|
35
|
+
|
36
|
+
This workflow is best if you just would like to build something like a Redis image.
|
37
|
+
|
38
|
+
If you just need to get an arbitrary project built and pushed somewhere you can simply create a horatio.json, like so:
|
39
|
+
|
40
|
+
To get started, Create a Horatio spec `horatio.json` in your project root with the contents `{'name': 'misc-project', 'version': '0.0.1'}`
|
41
|
+
|
42
|
+
_This workflow automatically increments the 'version' in the spec and pushes it back to your repository, this will be
|
43
|
+
configurable soon_
|
44
|
+
|
45
|
+
## Usage
|
46
|
+
|
47
|
+
To install
|
48
|
+
|
49
|
+
```
|
50
|
+
$ gem install horatio
|
51
|
+
$ horatio
|
52
|
+
```
|
53
|
+
|
54
|
+
To prevent caching of a build, export the following environment variable before running horatio
|
55
|
+
`DOCKER_BUILD_NO_CACHE=1`
|
56
|
+
|
57
|
+
## Dev
|
58
|
+
|
59
|
+
```
|
60
|
+
bundle install
|
61
|
+
guard
|
62
|
+
```
|
63
|
+
|
64
|
+
## Why do versions contain source repository revisions
|
65
|
+
|
66
|
+
Unfortunately the Docker registry handles tags as mutable objects. If you push a
|
67
|
+
image to the registry with the same name and version tag you will overwrite the
|
68
|
+
previous tag. Inserting the revision from the latest git commit ensures
|
69
|
+
we don't end up with collisions.
|
70
|
+
|
71
|
+
## Horatio?
|
72
|
+
|
73
|
+
In honour of [Horatio McAllister](http://simpsons.wikia.com/wiki/Horatio_McCallister)
|
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rubocop/rake_task'
|
4
|
+
|
5
|
+
RuboCop::RakeTask.new
|
6
|
+
|
7
|
+
Rake::TestTask.new(:test) do |t|
|
8
|
+
t.libs << 'lib'
|
9
|
+
t.libs << 'spec'
|
10
|
+
t.pattern = 'spec/**/*_spec.rb'
|
11
|
+
end
|
12
|
+
|
13
|
+
task default: [:test, :rubocop]
|
data/bin/horatio
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "horatio"
|
4
|
+
require "optparse"
|
5
|
+
|
6
|
+
options = {}
|
7
|
+
|
8
|
+
OptionParser.new do |opts|
|
9
|
+
opts.banner = "Horatio takes no arguments, only some options, you should run it from the same directory as your Dockerfile.
|
10
|
+
|
11
|
+
Usage: horatio [options]"
|
12
|
+
|
13
|
+
opts.on("-g", "--git-repo-url [URL]", String,"The URL of the remote repo. This is only used by the 'horatio' build type to push back an updated horatio.json once the release number is bumped") do |g|
|
14
|
+
options['git-repo-url'] = g
|
15
|
+
end
|
16
|
+
|
17
|
+
opts.on("-r", "--registry [URL]", String,"The URL of the docker registry or docker hub username.") do |g|
|
18
|
+
options['registry'] = g
|
19
|
+
end
|
20
|
+
|
21
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
22
|
+
puts opts
|
23
|
+
exit
|
24
|
+
end
|
25
|
+
end.parse!
|
26
|
+
|
27
|
+
begin
|
28
|
+
releaser = Horatio::Releaser.new(options)
|
29
|
+
releaser.run
|
30
|
+
rescue Exception => e
|
31
|
+
color(ERROR) { Log.fatal e }
|
32
|
+
exit 1
|
33
|
+
end
|
data/horatio.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'horatio/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "horatio"
|
8
|
+
spec.version = Horatio::VERSION
|
9
|
+
spec.authors = ["Pauly Myjavec", "Rufus Post"]
|
10
|
+
spec.email = ["pauly@buzbox.net", "rufuspost@gmail.com"]
|
11
|
+
spec.summary = %q{Horatio, shipping your Docker images}
|
12
|
+
spec.description = %q{Horatio, shipping your Docker images from a CI server}
|
13
|
+
spec.license = "MIT"
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0")
|
16
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
+
spec.require_paths = ["lib"]
|
19
|
+
|
20
|
+
spec.add_dependency "nokogiri"
|
21
|
+
spec.add_dependency "nori"
|
22
|
+
|
23
|
+
spec.add_development_dependency "bundler", "~> 1.5"
|
24
|
+
spec.add_development_dependency "rake"
|
25
|
+
spec.add_development_dependency "pry"
|
26
|
+
spec.add_development_dependency "minitest", "~> 4"
|
27
|
+
spec.add_development_dependency "minitest-reporters"
|
28
|
+
spec.add_development_dependency "fakefs"
|
29
|
+
spec.add_development_dependency "rubocop"
|
30
|
+
end
|
data/lib/horatio.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'logger'
|
2
|
+
require 'open3'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
### BEGIN CONFIG ###
|
6
|
+
USE = <<-EOS
|
7
|
+
./build_docker_image.rb [<name> <version>]
|
8
|
+
|
9
|
+
set DRY_RUN=true if you would like debugging output
|
10
|
+
|
11
|
+
The Dockefile you have specified does not contain the required name and version
|
12
|
+
comments nor have you provided any via the CLI, please add the following after
|
13
|
+
FROM in you Dockerfile:
|
14
|
+
|
15
|
+
#name\=awesome-app
|
16
|
+
#version=0.0.1
|
17
|
+
#test_command=/bin/true
|
18
|
+
EOS
|
19
|
+
|
20
|
+
ERROR = 31
|
21
|
+
SUCCESS = 32
|
22
|
+
ATTN = 35
|
23
|
+
|
24
|
+
Log = Logger.new(STDOUT)
|
25
|
+
Log.level = Logger::INFO
|
26
|
+
|
27
|
+
def color (color=SUCCESS)
|
28
|
+
printf "\033[#{color}m";
|
29
|
+
yield
|
30
|
+
printf "\033[0m"
|
31
|
+
end
|
32
|
+
|
33
|
+
begin
|
34
|
+
raise if RUBY_VERSION =~ /^1\.8.*$/
|
35
|
+
rescue
|
36
|
+
color(ERROR) { Log.fatal("This script only works on Ruby > 1.8") }
|
37
|
+
exit 1
|
38
|
+
end
|
39
|
+
|
40
|
+
### END CONFIG ###
|
41
|
+
|
42
|
+
def sh(cmd)
|
43
|
+
o, e, s = nil, nil, nil
|
44
|
+
o, e, s = Open3.capture3(*cmd)
|
45
|
+
end
|
46
|
+
|
47
|
+
def run_sh(cmd)
|
48
|
+
unless ENV['DRY_RUN']
|
49
|
+
color { Log.info "executing command: #{cmd}" }
|
50
|
+
o, e, s = sh(cmd)
|
51
|
+
|
52
|
+
if s.exitstatus == 0
|
53
|
+
color { Log.info "succesfully executed command `#{cmd}` output:\n #{o}" }
|
54
|
+
else
|
55
|
+
raise "execution of `#{cmd}` failed output from STDERR was:\n #{e}\n STDOUT was:\n #{o}"
|
56
|
+
end
|
57
|
+
else
|
58
|
+
color { Log.info "dry run: would've executed command `#{cmd}`" }
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
require 'horatio/releaser'
|
63
|
+
require 'horatio/detector'
|
64
|
+
require 'horatio/vcs'
|