soyuz 0.2.0 → 0.3.0

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: 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