soyuz 0.2.0 → 0.3.0

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: 59015ed20e3495f427c78b40f2846156ec4f5635
4
- data.tar.gz: 8c25a79206d5a813d5b1f5507ae62de364d4fa60
3
+ metadata.gz: 473101441a21cdb99583187dbf13b0239375eae3
4
+ data.tar.gz: 3c497ec52e6914061136c10786c12c5b17463296
5
5
  SHA512:
6
- metadata.gz: 4d46c3f96343aa2da24b52830a4cac00250c11b299f9b10dbece7176252f898700196eaa6711cf5ae3de6e9329c9de2f455e8fe6cfb6dbd915dc433ae6b7b617
7
- data.tar.gz: 3b398f211d1d670e8994a7c9a1237f3992aff052d5f358c783151731de5de9611a4077547f89a3f3cf19e9521325754cc87160b7b841b244e78b1c274c5f7ba6
6
+ metadata.gz: cb35de07fb0f54d599c9cfe2873f463515a39a3bf85b98bfca74f054155fff85588c97b72363e31e86cbe18a8e86e1e926390f7711694438fd2d60b61f6f64b8
7
+ data.tar.gz: 91cdf4828952cfa27cc0478b85dc202237d483e035a5d462f41651a4205fd93709b7a92ca13941e5cc78a093dd47f98373ad4a2188f02a5f0123f00f9869163a
data/.gitignore CHANGED
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ .idea
data/CHANGELOG.markdown CHANGED
@@ -1,3 +1,8 @@
1
+ #### v0.3.0
2
+ * Adding support for environment argument
3
+
4
+ > Brian Bergstrom: : https://github.com/sportngin/soyuz/pull/16
5
+
1
6
  #### v0.2.0
2
7
  * Adds the ability to set env variables for soyuz to use
3
8
 
data/README.md CHANGED
@@ -33,6 +33,7 @@ environments:
33
33
  -
34
34
  display: "Deploy"
35
35
  cmd: "cap $SOYUZ_ENVIRONMENT deploy:rolling"
36
+ default: true
36
37
  -
37
38
  display: "Deploy with Migrations"
38
39
  cmd: "cap $SOYUZ_ENVIRONMENT deploy:rolling_migrations"
@@ -49,8 +50,9 @@ environments:
49
50
 
50
51
  ## Usage
51
52
 
53
+ Interactive:
52
54
  ```bash
53
- bundle exec soyuz deploy
55
+ soyuz deploy
54
56
  # => 1. production
55
57
  # => 2. staging
56
58
  1
@@ -71,7 +73,13 @@ post-deploy-notes
71
73
  # post all of your deploy notes somewhere useful
72
74
  ```
73
75
 
74
- ## Deprications
76
+ Non-interactive mode requires that you pass the environment argument and that all choices in your config have a default flagged.
77
+ ```bash
78
+ soyuz --non_interactive deploy staging
79
+ ```
80
+
81
+
82
+ ## Deprecations
75
83
 
76
84
  `:deploy_cmd` has be depricated in favor of `:deploy_cmds` to better
77
85
  match the before_deploy_cmds and after_deploy_cmds symantics
data/bin/soyuz CHANGED
@@ -16,6 +16,11 @@ DOCUMENTATION
16
16
  see Soyuz's GitHub repo: https://github.com/sportngin/soyuz
17
17
  """
18
18
 
19
+ switch [:non_interactive], :desc => 'Non-interactive deploy using default choices.', :negatable => false
20
+ pre do |global_options, command, options, args|
21
+ $non_interactive = global_options[:non_interactive]
22
+ true
23
+ end
19
24
 
20
25
  desc "Check your config file to ensure it's valid"
21
26
  command 'check' do |c|
@@ -27,11 +32,12 @@ command 'check' do |c|
27
32
  end
28
33
 
29
34
  desc "Deploy your application"
35
+ arg_name '<environment>'
30
36
  command 'deploy' do |c|
31
37
  c.flag [:c, :config], :desc => 'soyuz config file', :default_value => '.soyuz.yml'
32
38
  c.action do |global_options, options, args|
33
39
  options = global_options.merge(options)
34
- Soyuz::Deploy.new(options[:config]).execute
40
+ Soyuz::Deploy.new(args.first, options).execute
35
41
  end
36
42
  end
37
43
 
@@ -6,13 +6,26 @@ module Soyuz
6
6
  def initialize(choices)
7
7
  raise ArgumentError, "Choices must be an array" unless choices.is_a?(Array)
8
8
  @choices = choices
9
+ @default_choice = default_choice_number
10
+ raise ArgumentError, "Default choice required for non interactive mode." if @default_choice.nil? && $non_interactive
9
11
  end
10
12
 
11
- def run
13
+ def default_choice_number
12
14
  @choices.each_with_index do |choice, index|
13
- say "#{index+1}) #{choice[:display]}"
15
+ return index+1 if choice[:default]
16
+ end
17
+ nil
18
+ end
19
+
20
+ def run
21
+ if @default_choice.nil?
22
+ @choices.each_with_index do |choice, index|
23
+ say "#{index+1}) #{choice[:display]}"
24
+ end
25
+ choice = ask("? ", Integer) { |q| q.in = 1..@choices.length }
26
+ else
27
+ choice = default_choice_number
14
28
  end
15
- choice = ask("? ", Integer) { |q| q.in = 1..@choices.length }
16
29
  build_command(choice-1)
17
30
  end
18
31
 
data/lib/soyuz/config.rb CHANGED
@@ -39,12 +39,11 @@ module Soyuz
39
39
  end
40
40
 
41
41
  def valid?
42
- begin
43
- File.exists?(@config_file) && config_data.is_a?(Hash)
44
- environments.all?{|env| env.valid?}
45
- rescue StandardError
46
- false
47
- end
42
+ File.exists?(@config_file) && config_data.is_a?(Hash)
43
+ environments.all?{|env| env.valid?}
44
+ rescue StandardError => e
45
+ puts e.message
46
+ false
48
47
  end
49
48
  end
50
49
  InvalidConfig = Class.new(StandardError)
data/lib/soyuz/deploy.rb CHANGED
@@ -1,14 +1,15 @@
1
1
  require_relative 'config'
2
2
  module Soyuz
3
3
  class Deploy
4
- def initialize(config_file)
5
- @config = Config.new(config_file)
4
+ def initialize(env_name, options)
5
+ @config = Config.new(options[:config])
6
6
  @config.validate!
7
+ set_environment(env_name) if env_name || $non_interactive
7
8
  end
8
9
 
9
-
10
10
  def execute
11
- choose_environment
11
+ choose_environment unless @environment
12
+ ENV['SOYUZ_ENVIRONMENT'] = @environment.name.to_s
12
13
  before_callbacks
13
14
  deploy
14
15
  after_callbacks
@@ -22,6 +23,11 @@ module Soyuz
22
23
  @config.environments
23
24
  end
24
25
 
26
+ def set_environment(env_name)
27
+ @environment = environments.detect { |env| env.name.to_s == env_name }
28
+ raise("Invalid environment '#{env_name}'.") unless @environment
29
+ end
30
+
25
31
  def choose_environment
26
32
  say "Choose an Environment: \n"
27
33
  environments.each_with_index do |environment, index|
@@ -29,7 +35,6 @@ module Soyuz
29
35
  end
30
36
  choice = ask("? ", Integer) { |q| q.in = 1..environments.length }
31
37
  @environment = environments[choice-1]
32
- ENV['SOYUZ_ENVIRONMENT'] = @environment.name.to_s
33
38
  end
34
39
 
35
40
  def deploy
data/lib/soyuz/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Soyuz
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -1,4 +1,4 @@
1
- # .soyuz.yml in the app you want to deploy with soyuz
1
+ ---
2
2
  defaults:
3
3
  deploy_cmd: 'echo default deploy $SOYUZ_ENVIRONMENT'
4
4
 
@@ -0,0 +1 @@
1
+ cat:tacos-cat:eat;tacos-!@#$
@@ -0,0 +1,25 @@
1
+ ---
2
+ defaults:
3
+ deploy_cmds:
4
+ - 'echo default deploy $SOYUZ_ENVIRONMENT'
5
+
6
+ environments:
7
+ -
8
+ production:
9
+ deploy_cmds:
10
+ -
11
+ -
12
+ display: "Deploy"
13
+ cmd: "echo deploying $SOYUZ_ENVIRONMENT "
14
+ default: true
15
+ -
16
+ display: "Deploy with Migrations"
17
+ cmd: "echo deploying with migrations $SOYUZ_ENVIRONMENT"
18
+
19
+ before_deploy_cmds:
20
+ - "echo before deploy callback"
21
+ after_deploy_cmds:
22
+ - "echo after deploy callback"
23
+ -
24
+ staging: {}
25
+
@@ -0,0 +1,22 @@
1
+ ---
2
+ defaults:
3
+ deploy_cmd: 'echo default deploy $SOYUZ_ENVIRONMENT'
4
+
5
+ environments:
6
+ -
7
+ production:
8
+ deploy_cmd:
9
+ -
10
+ display: "Deploy"
11
+ cmd: "echo deploying $SOYUZ_ENVIRONMENT "
12
+ -
13
+ display: "Deploy with Migrations"
14
+ cmd: "echo deploying with migrations $SOYUZ_ENVIRONMENT"
15
+
16
+ before_deploy_cmds:
17
+ - "echo before deploy callback"
18
+ after_deploy_cmds:
19
+ - "echo after deploy callback"
20
+ -
21
+ staging: {}
22
+
@@ -0,0 +1,24 @@
1
+ ---
2
+ defaults:
3
+ deploy_cmds:
4
+ - 'echo default deploy $SOYUZ_ENVIRONMENT'
5
+
6
+ environments:
7
+ -
8
+ production:
9
+ deploy_cmds:
10
+ -
11
+ -
12
+ display: "Deploy"
13
+ cmd: "echo deploying $SOYUZ_ENVIRONMENT "
14
+ -
15
+ display: "Deploy with Migrations"
16
+ cmd: "echo deploying with migrations $SOYUZ_ENVIRONMENT"
17
+
18
+ before_deploy_cmds:
19
+ - "echo before deploy callback"
20
+ after_deploy_cmds:
21
+ - "echo after deploy callback"
22
+ -
23
+ staging: {}
24
+
@@ -2,22 +2,59 @@ require "spec_helper"
2
2
  require "soyuz/config"
3
3
  module Soyuz
4
4
  describe Config do
5
- let(:valid_config){ "files/soyuz_example.yml" }
6
- subject { Config.new(valid_config) }
7
-
8
5
  before do
9
- allow(subject).to receive(:puts)
6
+ $non_interactive = false
10
7
  end
11
8
 
12
9
  context "#check" do
13
- it "to raise an InvalidConfig error if the config is invalid" do
14
- allow(subject).to receive(:valid?) { false }
15
- expect{ subject.check }.to raise_error(InvalidConfig)
10
+ context "valid modern" do
11
+ subject { Config.new(CONFIG_PATHS[:valid_modern]) }
12
+ it "to not raise an error if the config is valid" do
13
+ expect(STDOUT).to receive(:puts).with("Config file is valid. We are go for launch.")
14
+ expect{ subject.check }.to_not raise_error
15
+ end
16
+ it "to raise an InvalidConfig error in non interactive mode" do
17
+ $non_interactive = true
18
+ expect(STDOUT).to receive(:puts).with("Default choice required for non interactive mode.")
19
+ expect{ subject.check }.to raise_error(InvalidConfig)
20
+ end
21
+ end
22
+
23
+ context "valid legacy" do
24
+ subject { Config.new(CONFIG_PATHS[:valid_legacy]) }
25
+
26
+ it "to not raise an error if the config is valid" do
27
+ expect(STDOUT).to receive(:puts).with("Config file is valid. We are go for launch.")
28
+ expect{ subject.check }.to_not raise_error
29
+ end
30
+ end
31
+
32
+ context "non interactive" do
33
+ subject { Config.new(CONFIG_PATHS[:non_interactive]) }
34
+ before do
35
+ $non_interactive = true
36
+ end
37
+
38
+ it "to not raise an error if the config is valid" do
39
+ expect(STDOUT).to receive(:puts).with("Config file is valid. We are go for launch.")
40
+ expect{ subject.check }.to_not raise_error
41
+ end
42
+ end
43
+
44
+ context "incompatible" do
45
+ subject { Config.new(CONFIG_PATHS[:incompatible]) }
46
+ it "to raise an InvalidConfig error if the config is invalid" do
47
+ expect(STDOUT).to receive(:puts).with("Only one definiton of deploy_cmd or deploy_cmds is allowed")
48
+ expect{ subject.check }.to raise_error(InvalidConfig)
49
+ end
16
50
  end
17
51
 
18
- it "to not raise an error if the config is valid" do
19
- allow(subject).to receive(:valid?) { true }
20
- expect{ subject.check }.to_not raise_error
52
+ context "invalid" do
53
+ subject { Config.new(CONFIG_PATHS[:invalid]) }
54
+ it "to raise an InvalidConfig error if the config is invalid" do
55
+ expect(STDOUT).to receive(:puts).with(kind_of(String))
56
+ expect{ subject.check }.to raise_error(InvalidConfig)
57
+ end
21
58
  end
22
59
  end
23
60
  end
@@ -2,44 +2,47 @@ require "spec_helper"
2
2
  require "soyuz/deploy"
3
3
  module Soyuz
4
4
  describe Deploy do
5
- let(:valid_config){ "files/soyuz_example.yml" }
6
- subject { Deploy.new(valid_config) }
5
+ subject { Deploy.new(nil, config: CONFIG_PATHS[:valid_modern]) }
7
6
 
8
7
  before do
9
- allow_any_instance_of(Config).to receive(:validate!)
8
+ $non_interactive = false
9
+ allow(ENV).to receive("[]=").with("SOYUZ_ENVIRONMENT", kind_of(String))
10
10
  end
11
11
 
12
12
  context "#execute" do
13
- it "to ask for an environment" do
14
- allow(subject).to receive(:before_callbacks)
15
- allow(subject).to receive(:deploy)
16
- allow(subject).to receive(:after_callbacks)
17
- expect(subject).to receive(:choose_environment)
18
- subject.execute
19
- end
13
+ context "interactive" do
14
+ before do
15
+ allow_any_instance_of(Config).to receive(:validate!)
16
+ allow_any_instance_of(HighLine).to receive(:say)
17
+ allow_any_instance_of(HighLine).to receive(:ask) { 1 }
18
+ end
20
19
 
21
- it "to call before callbacks" do
22
- allow(subject).to receive(:choose_environment)
23
- allow(subject).to receive(:deploy)
24
- allow(subject).to receive(:after_callbacks)
25
- expect(subject).to receive(:before_callbacks)
26
- subject.execute
27
- end
20
+ it "to ask for an environment" do
21
+ expect(subject).to receive(:choose_environment).and_call_original
22
+ allow(subject).to receive(:before_callbacks)
23
+ allow(subject).to receive(:deploy)
24
+ allow(subject).to receive(:after_callbacks)
25
+ subject.execute
26
+ end
28
27
 
29
- it "to call deploy" do
30
- allow(subject).to receive(:choose_environment)
31
- allow(subject).to receive(:before_callbacks)
32
- allow(subject).to receive(:after_callbacks)
33
- expect(subject).to receive(:deploy)
34
- subject.execute
35
- end
28
+ it "to call deploy and callbacks" do
29
+ allow(subject).to receive(:choose_environment).and_call_original
30
+ expect(subject).to receive(:before_callbacks)
31
+ expect(subject).to receive(:deploy)
32
+ expect(subject).to receive(:after_callbacks)
33
+ subject.execute
34
+ end
36
35
 
37
- it "to call after callbacks" do
38
- allow(subject).to receive(:choose_environment)
39
- allow(subject).to receive(:before_callbacks)
40
- allow(subject).to receive(:deploy)
41
- expect(subject).to receive(:after_callbacks)
42
- subject.execute
36
+ end
37
+ context "non interactive" do
38
+ subject { Deploy.new("staging", config: CONFIG_PATHS[:non_interactive]) }
39
+ it "to not ask anything" do
40
+ expect(subject).to_not receive(:choose_environment)
41
+ expect(subject).to receive(:before_callbacks)
42
+ expect(subject).to receive(:deploy)
43
+ expect(subject).to receive(:after_callbacks)
44
+ subject.execute
45
+ end
43
46
  end
44
47
  end
45
48
  end
data/spec/spec_helper.rb CHANGED
@@ -21,3 +21,11 @@ RSpec.configure do |config|
21
21
  # --seed 1234
22
22
  #config.order = 'random'
23
23
  end
24
+
25
+ CONFIG_PATHS = {
26
+ valid_modern: File.expand_path("../files/soyuz_valid_modern.yml", __FILE__),
27
+ valid_legacy: File.expand_path("../files/soyuz_valid_legacy.yml", __FILE__),
28
+ non_interactive: File.expand_path("../files/soyuz_non_interactive.yml", __FILE__),
29
+ incompatible: File.expand_path("../files/soyuz_incompatible.yml", __FILE__),
30
+ invalid: File.expand_path("../files/soyuz_invalid.yml", __FILE__),
31
+ }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: soyuz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Fleener
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-06 00:00:00.000000000 Z
11
+ date: 2015-04-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gli
@@ -169,7 +169,11 @@ files:
169
169
  - lib/soyuz/support.rb
170
170
  - lib/soyuz/version.rb
171
171
  - soyuz.gemspec
172
- - spec/files/soyuz_example.yml
172
+ - spec/files/soyuz_incompatible.yml
173
+ - spec/files/soyuz_invalid.yml
174
+ - spec/files/soyuz_non_interactive.yml
175
+ - spec/files/soyuz_valid_legacy.yml
176
+ - spec/files/soyuz_valid_modern.yml
173
177
  - spec/soyuz/command_choice_spec.rb
174
178
  - spec/soyuz/command_env_spec.rb
175
179
  - spec/soyuz/command_spec.rb
@@ -203,7 +207,11 @@ signing_key:
203
207
  specification_version: 4
204
208
  summary: The old trusty deployment toolkit
205
209
  test_files:
206
- - spec/files/soyuz_example.yml
210
+ - spec/files/soyuz_incompatible.yml
211
+ - spec/files/soyuz_invalid.yml
212
+ - spec/files/soyuz_non_interactive.yml
213
+ - spec/files/soyuz_valid_legacy.yml
214
+ - spec/files/soyuz_valid_modern.yml
207
215
  - spec/soyuz/command_choice_spec.rb
208
216
  - spec/soyuz/command_env_spec.rb
209
217
  - spec/soyuz/command_spec.rb