auto_tagger 0.1.5 → 0.2.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.
Files changed (46) hide show
  1. data/.gitignore +4 -1
  2. data/CHANGELOG +26 -2
  3. data/Gemfile +4 -4
  4. data/Gemfile.lock +60 -0
  5. data/README.md +90 -36
  6. data/Rakefile +1 -26
  7. data/VERSION +1 -1
  8. data/auto_tagger.gemspec +24 -14
  9. data/bin/autotag +14 -29
  10. data/features/autotag.feature +43 -2
  11. data/features/deployment.feature +4 -0
  12. data/features/step_definitions/autotag_steps.rb +27 -22
  13. data/features/step_definitions/deployment_steps.rb +41 -33
  14. data/features/support/env.rb +45 -2
  15. data/features/support/step_helpers.rb +36 -12
  16. data/features/templates/deploy.erb +1 -1
  17. data/lib/auto_tagger/base.rb +150 -19
  18. data/lib/auto_tagger/capistrano_helper.rb +38 -17
  19. data/lib/auto_tagger/command_line.rb +65 -0
  20. data/lib/auto_tagger/commander.rb +22 -11
  21. data/lib/auto_tagger/configuration.rb +88 -0
  22. data/lib/auto_tagger/deprecator.rb +11 -0
  23. data/lib/auto_tagger/git/ref.rb +34 -0
  24. data/lib/auto_tagger/git/ref_set.rb +35 -0
  25. data/lib/auto_tagger/git/repo.rb +76 -0
  26. data/lib/auto_tagger/options.rb +170 -0
  27. data/lib/auto_tagger/recipes.rb +67 -27
  28. data/lib/auto_tagger.rb +9 -4
  29. data/spec/auto_tagger/base_spec.rb +236 -52
  30. data/spec/auto_tagger/capistrano_helper_spec.rb +82 -112
  31. data/spec/auto_tagger/command_line_spec.rb +110 -0
  32. data/spec/auto_tagger/commander_spec.rb +33 -7
  33. data/spec/auto_tagger/configuration_spec.rb +275 -0
  34. data/spec/auto_tagger/git/ref_set_spec.rb +61 -0
  35. data/spec/auto_tagger/git/ref_spec.rb +46 -0
  36. data/spec/auto_tagger/git/repo_spec.rb +108 -0
  37. data/spec/auto_tagger/options_spec.rb +157 -0
  38. data/spec/spec_helper.rb +1 -6
  39. metadata +32 -15
  40. data/geminstaller.yml +0 -7
  41. data/lib/auto_tagger/repository.rb +0 -43
  42. data/lib/auto_tagger/stage_manager.rb +0 -23
  43. data/lib/auto_tagger/tag.rb +0 -43
  44. data/spec/auto_tagger/repository_spec.rb +0 -72
  45. data/spec/auto_tagger/stage_manager_spec.rb +0 -34
  46. data/spec/auto_tagger/tag_spec.rb +0 -66
data/.gitignore CHANGED
@@ -4,4 +4,7 @@ rdoc/*
4
4
  .DS_Store
5
5
  test_files/*
6
6
  .idea/*
7
- .bundle/*
7
+ .bundle/*
8
+ .rvmrc
9
+ junk.*
10
+ .auto_tagger
data/CHANGELOG CHANGED
@@ -1,3 +1,27 @@
1
+ 2010-08-10
2
+
3
+ - Added the following commands
4
+ - help
5
+ - version
6
+ - create STAGE
7
+ - list STAGE
8
+ - cleanup STAGE
9
+ - delete_locally STAGE
10
+ - delete_on_remote STAGE
11
+ - Added the following options to autotag
12
+ --date-separator - the character used to separate parts of the timestamp
13
+ --fetch-refs - whether to fetch refs before creating or listing them
14
+ --push-refs - whether to push refs after creating them
15
+ --remote - specify a custom remote (defaults to "origin")
16
+ --ref-path - use a different ref directory, other than "tags"
17
+ --stages - specify all of the stages
18
+ --offline - don't push or fetch refs (is ignored with delete_on_remote command)
19
+ --dry-run - don't execute anything, but print the commands
20
+ --verbose - prints all commands as they run
21
+ --refs-to-keep - when using any clean commans, specify how many refs to keep
22
+ --executable - specify the full path to the git executable
23
+ --opts-file - the location of an additional opts file
24
+
1
25
  2010-05-15
2
26
 
3
27
  - Fixed the exit status in autotag executable (thank you Sarah Mei)
@@ -19,7 +43,7 @@
19
43
 
20
44
  2009-04-20
21
45
 
22
- - `release_tagger:create_tag` creates a production tag if you don't set any stages
46
+ - `release_tagger:create_ref` creates a production tag if you don't set any stages
23
47
 
24
48
  2009-04-05
25
49
 
@@ -31,7 +55,7 @@
31
55
 
32
56
  - Capistrano bases new tags off of old tags from the previous environment when tagging if there is a tag from the previous environment
33
57
  - Added the following cap tasks:
34
- - print_latest_tags
58
+ - print_latest_refs
35
59
  - read_tag_from_shared
36
60
  - write_tag_to_shared
37
61
 
data/Gemfile CHANGED
@@ -1,8 +1,8 @@
1
1
  source :gemcutter
2
2
 
3
- gem "cucumber", "0.6.4"
3
+ gem "rake", "0.8.7"
4
+ gem "rspec", "2.0.0.beta.19"
5
+ gem "cucumber", "0.8.5"
4
6
  gem "capistrano", "2.5.18"
5
7
  gem "capistrano-ext", "1.2.1"
6
- gem "rspec", "1.3.0"
7
- gem "rr", "0.8.1"
8
- gem "activesupport", "2.3.5"
8
+ gem "jeweler", "1.4.0"
data/Gemfile.lock ADDED
@@ -0,0 +1,60 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ builder (2.1.2)
5
+ capistrano (2.5.18)
6
+ highline
7
+ net-scp (>= 1.0.0)
8
+ net-sftp (>= 2.0.0)
9
+ net-ssh (>= 2.0.14)
10
+ net-ssh-gateway (>= 1.0.0)
11
+ capistrano-ext (1.2.1)
12
+ capistrano (>= 1.0.0)
13
+ cucumber (0.8.5)
14
+ builder (~> 2.1.2)
15
+ diff-lcs (~> 1.1.2)
16
+ gherkin (~> 2.1.4)
17
+ json_pure (~> 1.4.3)
18
+ term-ansicolor (~> 1.0.4)
19
+ diff-lcs (1.1.2)
20
+ gemcutter (0.6.1)
21
+ gherkin (2.1.5)
22
+ trollop (~> 1.16.2)
23
+ git (1.2.5)
24
+ highline (1.6.1)
25
+ jeweler (1.4.0)
26
+ gemcutter (>= 0.1.0)
27
+ git (>= 1.2.5)
28
+ rubyforge (>= 2.0.0)
29
+ json_pure (1.4.3)
30
+ net-scp (1.0.2)
31
+ net-ssh (>= 1.99.1)
32
+ net-sftp (2.0.4)
33
+ net-ssh (>= 2.0.9)
34
+ net-ssh (2.0.23)
35
+ net-ssh-gateway (1.0.1)
36
+ net-ssh (>= 1.99.1)
37
+ rake (0.8.7)
38
+ rspec (2.0.0.beta.19)
39
+ rspec-core (= 2.0.0.beta.19)
40
+ rspec-expectations (= 2.0.0.beta.19)
41
+ rspec-mocks (= 2.0.0.beta.19)
42
+ rspec-core (2.0.0.beta.19)
43
+ rspec-expectations (2.0.0.beta.19)
44
+ diff-lcs (>= 1.1.2)
45
+ rspec-mocks (2.0.0.beta.19)
46
+ rubyforge (2.0.4)
47
+ json_pure (>= 1.1.7)
48
+ term-ansicolor (1.0.5)
49
+ trollop (1.16.2)
50
+
51
+ PLATFORMS
52
+ ruby
53
+
54
+ DEPENDENCIES
55
+ capistrano (= 2.5.18)
56
+ capistrano-ext (= 1.2.1)
57
+ cucumber (= 0.8.5)
58
+ jeweler (= 1.4.0)
59
+ rake (= 0.8.7)
60
+ rspec (= 2.0.0.beta.19)
data/README.md CHANGED
@@ -24,31 +24,56 @@ You can use the `autotag` command to tag releases on your CI box, then use the c
24
24
 
25
25
  ## The autotag executable
26
26
 
27
- Installing the gem creates an executable file named autotag, which takes two arguments: the stage, and optionally the path to the git repo:
28
-
29
- $ autotag demo # => creates a tag like demo/200804041234 in the current directory
30
- $ autotag demo . # => same as above
31
- $ autotag demo /Users/me/foo # => cd's to /Users/me/foo before creating the tag
32
-
33
- Running autotag does the following:
34
-
35
- $ git fetch origin --tags
36
- $ git tag <stage>/<timestamp>
37
- $ git push origin --tags
27
+ Installing the gem creates an executable file named autotag, which takes the stage, optionally the path to the git repo, and options:
28
+
29
+ $ autotag create demo # => creates a tag like demo/200804041234 in the current directory
30
+ $ autotag create demo . # => same as above
31
+ $ autotag create demo /Users/me/foo # => cd's to /Users/me/foo before creating the tag
32
+
33
+ By default, running autotag does the following:
34
+
35
+ $ git fetch origin refs/tags/*:refs/tags/*
36
+ $ git update-ref refs/tags/demo/20100910051459 1242b283208d06661b2a916097c41c046510af68
37
+ $ git push origin refs/tags/*:refs/tags/*
38
+
39
+ The autotag executable has the following commands:
40
+
41
+ help
42
+ version
43
+ create STAGE
44
+ list STAGE
45
+ cleanup STAGE
46
+ delete_locally STAGE
47
+ delete_on_remote STAGE
48
+
49
+ The autotag executable accepts the following options:
50
+
51
+ --date-separator - the character used to separate parts of the timestamp
52
+ --fetch-refs - whether to fetch refs before creating or listing them
53
+ --push-refs - whether to push refs after creating them
54
+ --remote - specify a custom remote (defaults to "origin")
55
+ --ref-path - use a different ref directory, other than "tags"
56
+ --stages - specify all of the stages
57
+ --offline - don't push or fetch refs (is ignored with delete_on_remote command)
58
+ --dry-run - don't execute anything, but print the commands
59
+ --verbose - prints all commands as they run
60
+ --refs-to-keep - when using any clean commans, specify how many refs to keep
61
+ --executable - specify the full path to the git executable
62
+ --opts-file - the location of a custom options file
38
63
 
39
64
  ## Capistrano Integration
40
65
 
41
66
  AutoTagger comes with 2 capistrano tasks:
42
67
 
43
- * `release_tagger:set_branch` tries to set the branch to the last tag from the previous environment.
44
- * `release_tagger:create_tag` runs autotag for the current stage
68
+ * `auto_tagger:set_branch` tries to set the branch to the last tag from the previous environment.
69
+ * `auto_tagger:create_ref` runs autotag for the current stage
45
70
 
46
71
  Example `config/deploy.rb` file:
47
72
 
48
- require 'release_tagger'
73
+ require 'auto_tagger/recipes'
49
74
 
50
- # The :autotagger_stages variable is required
51
- set :autotagger_stages, [:ci, :staging, :production]
75
+ # The :auto_tagger_stages variable is required
76
+ set :auto_tagger_stages, [:ci, :staging, :production]
52
77
 
53
78
  # The :working_directory variable is optional, and defaults to Dir.pwd
54
79
  # :working_directory can be an absolute or relative path
@@ -56,32 +81,47 @@ Example `config/deploy.rb` file:
56
81
 
57
82
  task :production do
58
83
  # In each of your environments that need auto-branch setting, you need to set :stage
59
- set :stage, :production
84
+ set :auto_tagger_stage, :production
60
85
  end
61
86
 
62
87
  task :staging do
63
88
  # If you do not set stage, it will not auto-set your branch
64
- # set :stage, :staging
89
+ # set :auto_tagger_stage, :staging
65
90
  end
66
91
 
67
92
  # You need to add the before/ater callbacks yourself
68
- before "deploy:update_code", "release_tagger:set_branch"
69
- after "deploy", "release_tagger:create_tag"
70
- after "deploy", "release_tagger:write_tag_to_shared"
71
- after "deploy", "release_tagger:print_latest_tags"
93
+ before "deploy:update_code", "auto_tagger:set_branch"
94
+ after "deploy", "auto_tagger:create_ref"
95
+ after "deploy", "auto_tagger:write_tag_to_shared"
96
+ after "deploy", "auto_tagger:print_latest_refs"
72
97
 
73
- ### Cpistano-ext multistage support
98
+ ### Capistano-ext multistage support
74
99
 
75
100
  If you use capistano-ext multistage, you can use auto_tagger.
76
101
 
77
- set :autotagger_stages, [:ci, :staging, :production]
102
+ set :auto_tagger_stages, [:ci, :staging, :production]
78
103
  set :stages, [:staging, :production]
79
104
  set :default_stage, :staging
80
105
  require 'capistrano/ext/multistage'
81
106
 
82
- When you deploy, autotagger will auto-detect your current stage.
107
+ When you deploy, auto_tagger will auto-detect your current stage.
108
+
109
+ You can specify the following capistrano variables that correspond to the autotag options:
110
+
111
+ :auto_tagger_date_separator
112
+ :auto_tagger_push_refs
113
+ :auto_tagger_fetch_refs
114
+ :auto_tagger_remote
115
+ :auto_tagger_ref_path
116
+ :auto_tagger_offline
117
+ :auto_tagger_dry_run
118
+ :auto_tagger_verbose
119
+ :auto_tagger_refs_to_keep
120
+ :auto_tagger_executable
121
+ :auto_tagger_opts_file
122
+ :auto_tagger_working_directory
83
123
 
84
- ### release_tagger:set_branch
124
+ ### auto_tagger:set_branch
85
125
 
86
126
  This task sets the git branch to the latest tag from the previous stage. Assume you have the following tags in your git repository:
87
127
 
@@ -91,7 +131,7 @@ This task sets the git branch to the latest tag from the previous stage. Assume
91
131
 
92
132
  And the following stages in your capistrano file:
93
133
 
94
- set :autotagger_stages, [:ci, :staging, :production]
134
+ set :auto_tagger_stages, [:ci, :staging, :production]
95
135
 
96
136
  The deployments would look like this:
97
137
 
@@ -109,29 +149,29 @@ If you add `before "deploy:update_code", "release_tagger:set_branch"`, you can j
109
149
 
110
150
  and the branch will be set for you automatically.
111
151
 
112
- ### release_tagger:create_tag
152
+ ### release_tagger:create_ref
113
153
 
114
154
  This cap task creates a new tag, based on the latest tag from the previous environment.
115
155
 
116
156
  If there is no tag from the previous stage, it creates a new tag from the latest commit in your _working directory_.
117
157
 
118
- If you don't specify any `autotagger_stages`, autotagger will create a tag that starts with "production".
158
+ If you don't specify any `auto_tagger_stages`, auto_tagger will create a tag that starts with "production".
119
159
 
120
- ### release_tagger:print_latest_tags
160
+ ### release_tagger:print_latest_refs
121
161
 
122
162
  This task reads the git version from the text file in shared:
123
163
 
124
164
  cap staging release_tagger:read_tag_from_shared
125
165
 
126
- ### release_tagger:print_latest_tags
166
+ ### release_tagger:print_latest_refs
127
167
 
128
168
  This task takes the latest tag from each environment and prints it to the screen. You can add it to your deploy.rb like so:
129
169
 
130
- after "deploy", "release_tagger:print_latest_tags"
170
+ after "deploy", "release_tagger:print_latest_refs"
131
171
 
132
172
  Or call it directly, like:
133
173
 
134
- cap production release_tagger:print_latest_tags
174
+ cap production release_tagger:print_latest_refs
135
175
 
136
176
  This will produce output like:
137
177
 
@@ -140,6 +180,14 @@ This will produce output like:
140
180
  ** staging staging/20090331050908 8031807feb5f4f99dd83257cdc07081fa6080cba some commit message
141
181
  ** production production/20090331050917 8031807feb5f4f99dd83257cdc07081fa6080cba some commit message
142
182
 
183
+ ## Configuration
184
+
185
+ You can store options in an options file, which is .auto_tagger by default. You can set options in this file like so:
186
+
187
+ --date-separator=-
188
+ --ref-path=autotags
189
+ --refs-to-keep=5
190
+
143
191
  ## Running tests:
144
192
 
145
193
  You must be able to ssh into your box via localhost (remote login). To make this easier, add your own key to your own account:
@@ -152,13 +200,18 @@ To ensure that this has worked, try this:
152
200
 
153
201
  If it asks you for a password, you've done something wrong.
154
202
 
155
- To run the specs, execute:
203
+ To run the specs, first make sure you have the required gems:
204
+
205
+ gem install bundler
206
+ bundle install
207
+
208
+ Then execute:
156
209
 
157
- spec spec/
210
+ rspec spec
158
211
 
159
212
  To run the cucumber features, execute:
160
213
 
161
- cucumber features/
214
+ cucumber features
162
215
 
163
216
  ## Acknowledgments
164
217
 
@@ -169,6 +222,7 @@ Special thanks to:
169
222
  * Chad Wooley for his feature ideas
170
223
  * Tim Holahan for his QA
171
224
  * Pat Nakajima for making auto_tagger a better ruby citizen
225
+ * Josh Susser for recommending the date format changes
172
226
 
173
227
  ## Links
174
228
 
data/Rakefile CHANGED
@@ -13,34 +13,9 @@ begin
13
13
  gem.require_paths = ["lib"]
14
14
  gem.executables = ["autotag"]
15
15
  gem.default_executable = %q{autotag}
16
- gem.date = %q{2010-04-25}
16
+ gem.date = %q{2010-09-10}
17
17
  end
18
18
  Jeweler::GemcutterTasks.new
19
19
  rescue LoadError
20
20
  puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
21
21
  end
22
-
23
- require 'spec/rake/spectask'
24
- Spec::Rake::SpecTask.new(:spec) do |spec|
25
- spec.libs << 'lib' << 'spec'
26
- spec.spec_files = FileList['spec/**/*_spec.rb']
27
- end
28
-
29
- Spec::Rake::SpecTask.new(:rcov) do |spec|
30
- spec.libs << 'lib' << 'spec'
31
- spec.pattern = 'spec/**/*_spec.rb'
32
- spec.rcov = true
33
- end
34
-
35
-
36
- task :default => :spec
37
-
38
- require 'rake/rdoctask'
39
- Rake::RDocTask.new do |rdoc|
40
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
41
-
42
- rdoc.rdoc_dir = 'rdoc'
43
- rdoc.title = "the-perfect-gem #{version}"
44
- rdoc.rdoc_files.include('README*')
45
- rdoc.rdoc_files.include('lib/**/*.rb')
46
- end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.5
1
+ 0.2.0
data/auto_tagger.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{auto_tagger}
8
- s.version = "0.1.5"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Jeff Dean", "Brian Takita", "Mike Grafton", "Bruce Krysiak", "Pat Nakajima", "Jay Zeschin", "Mike Barinek", "Sarah Mei"]
12
- s.date = %q{2010-05-15}
12
+ s.date = %q{2010-09-10}
13
13
  s.default_executable = %q{autotag}
14
14
  s.email = %q{jeff@zilkey.com}
15
15
  s.executables = ["autotag"]
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
21
21
  ".gitignore",
22
22
  "CHANGELOG",
23
23
  "Gemfile",
24
+ "Gemfile.lock",
24
25
  "MIT-LICENSE",
25
26
  "README.md",
26
27
  "Rakefile",
@@ -36,35 +37,44 @@ Gem::Specification.new do |s|
36
37
  "features/templates/cap_ext_deploy.erb",
37
38
  "features/templates/deploy.erb",
38
39
  "features/templates/stage.erb",
39
- "geminstaller.yml",
40
40
  "lib/auto_tagger.rb",
41
41
  "lib/auto_tagger/base.rb",
42
42
  "lib/auto_tagger/capistrano_helper.rb",
43
+ "lib/auto_tagger/command_line.rb",
43
44
  "lib/auto_tagger/commander.rb",
45
+ "lib/auto_tagger/configuration.rb",
46
+ "lib/auto_tagger/deprecator.rb",
47
+ "lib/auto_tagger/git/ref.rb",
48
+ "lib/auto_tagger/git/ref_set.rb",
49
+ "lib/auto_tagger/git/repo.rb",
50
+ "lib/auto_tagger/options.rb",
44
51
  "lib/auto_tagger/recipes.rb",
45
- "lib/auto_tagger/repository.rb",
46
- "lib/auto_tagger/stage_manager.rb",
47
- "lib/auto_tagger/tag.rb",
48
52
  "spec/auto_tagger/base_spec.rb",
49
53
  "spec/auto_tagger/capistrano_helper_spec.rb",
54
+ "spec/auto_tagger/command_line_spec.rb",
50
55
  "spec/auto_tagger/commander_spec.rb",
51
- "spec/auto_tagger/repository_spec.rb",
52
- "spec/auto_tagger/stage_manager_spec.rb",
53
- "spec/auto_tagger/tag_spec.rb",
56
+ "spec/auto_tagger/configuration_spec.rb",
57
+ "spec/auto_tagger/git/ref_set_spec.rb",
58
+ "spec/auto_tagger/git/ref_spec.rb",
59
+ "spec/auto_tagger/git/repo_spec.rb",
60
+ "spec/auto_tagger/options_spec.rb",
54
61
  "spec/spec_helper.rb"
55
62
  ]
56
63
  s.homepage = %q{http://github.com/zilkey/auto_tagger}
57
64
  s.rdoc_options = ["--charset=UTF-8"]
58
65
  s.require_paths = ["lib"]
59
- s.rubygems_version = %q{1.3.6}
66
+ s.rubygems_version = %q{1.3.7}
60
67
  s.summary = %q{Helps you automatically create tags for each stage in a multi-stage deploment and deploy from the latest tag from the previous environment}
61
68
  s.test_files = [
62
69
  "spec/auto_tagger/base_spec.rb",
63
70
  "spec/auto_tagger/capistrano_helper_spec.rb",
71
+ "spec/auto_tagger/command_line_spec.rb",
64
72
  "spec/auto_tagger/commander_spec.rb",
65
- "spec/auto_tagger/repository_spec.rb",
66
- "spec/auto_tagger/stage_manager_spec.rb",
67
- "spec/auto_tagger/tag_spec.rb",
73
+ "spec/auto_tagger/configuration_spec.rb",
74
+ "spec/auto_tagger/git/ref_set_spec.rb",
75
+ "spec/auto_tagger/git/ref_spec.rb",
76
+ "spec/auto_tagger/git/repo_spec.rb",
77
+ "spec/auto_tagger/options_spec.rb",
68
78
  "spec/spec_helper.rb"
69
79
  ]
70
80
 
@@ -72,7 +82,7 @@ Gem::Specification.new do |s|
72
82
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
73
83
  s.specification_version = 3
74
84
 
75
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
85
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
76
86
  s.add_runtime_dependency(%q<capistrano>, [">= 2.5.3"])
77
87
  else
78
88
  s.add_dependency(%q<capistrano>, [">= 2.5.3"])
data/bin/autotag CHANGED
@@ -1,35 +1,20 @@
1
1
  #!/usr/bin/env ruby
2
2
  require File.expand_path(File.join(File.dirname(__FILE__), "..", "lib", "auto_tagger"))
3
- require 'getoptlong'
4
3
 
5
- def usage
6
- puts
7
- puts "USAGE: #{File.basename($0)} <stage> [<repository>]"
8
- puts
9
- puts ' where: stage sets the tag prefix'
10
- puts ' repository sets the repository to act on - defualts to the current directory'
11
- puts
12
- puts ' examples: autotag'
13
- puts ' autotag .'
14
- puts ' autotag ../'
15
- puts ' autotag /data/myrepo'
16
- puts ' autotag demo'
17
- puts
18
- puts
19
- exit 0
20
- end
21
-
22
- if ARGV[0] && ["-h", "--help", "-?", "--?"].include?(ARGV[0])
23
- usage
24
- elsif ARGV[0]
25
- begin
26
- AutoTagger::Runner.new(ARGV[0], ARGV[1]).create_tag
27
- rescue Exception => e
28
- puts "Error occured: #{e}"
29
- exit 1
4
+ begin
5
+ success, message = AutoTagger::CommandLine.new(ARGV.dup).execute
6
+ if success
7
+ puts message
8
+ Kernel.exit 0
30
9
  else
31
- exit 0
10
+ puts "Error occured: #{message}"
11
+ Kernel.exit 1
32
12
  end
33
- else
34
- usage
13
+ rescue SystemExit => e
14
+ Kernel.exit(e.status)
15
+ rescue Exception => e
16
+ STDERR.puts("Error occured:")
17
+ STDERR.puts(" #{e.message} (#{e.class})")
18
+ STDERR.puts(e.backtrace.join("\n "))
19
+ Kernel.exit(1)
35
20
  end
@@ -9,7 +9,7 @@ Feature: Deployment
9
9
  And I should see "USAGE:"
10
10
  And no tags should be created
11
11
  And exit code should be 0
12
-
12
+
13
13
  Scenario: user runs autotag with "--help"
14
14
  Given a repo
15
15
  When I run autotag with "--help"
@@ -31,21 +31,62 @@ Feature: Deployment
31
31
  And no tags should be created
32
32
  And exit code should be 0
33
33
 
34
+ @deprecated
34
35
  Scenario: user runs autotag with "demo"
35
36
  Given a repo
36
37
  When I run autotag with "demo"
37
38
  Then a "demo" tag should be created
38
39
  And exit code should be 0
39
40
 
41
+ @deprecated
40
42
  Scenario: user runs autotag with "demo ."
41
43
  Given a repo
42
44
  When I run autotag with "demo"
43
45
  Then a "demo" tag should be created
44
46
  And exit code should be 0
45
47
 
48
+ @deprecated
46
49
  Scenario: autotag cannot successfully complete
47
50
  Given a repo
48
51
  When I run autotag with "demo /no/such/path"
49
52
  Then I should see "Error occured:"
50
53
  And exit code should be 1
51
- And no tags should be created
54
+ And no tags should be created
55
+
56
+ @deprecated
57
+ Scenario: path is incorrect
58
+ Given a repo
59
+ When I run autotag with "create demo /no/such/path"
60
+ Then I should see "Error occured:"
61
+ And exit code should be 1
62
+ And no tags should be created
63
+
64
+ @1.0.0
65
+ Scenario: user runs autotag with "help"
66
+ Given a repo
67
+ When I run autotag with "help"
68
+ And I should see "USAGE:"
69
+ And no tags should be created
70
+ And the exit code should be 0
71
+
72
+ @1.0.0
73
+ Scenario: user runs autotag with "version"
74
+ Given a repo
75
+ When I run autotag with "version"
76
+ And I should see "AutoTagger version"
77
+ And no tags should be created
78
+ And the exit code should be 0
79
+
80
+ @1.0.0
81
+ Scenario: user runs autotag with "create demo . --date-separator -"
82
+ Given a repo
83
+ When I run autotag with "create demo --date-separator -"
84
+ Then a hyphen-delimited "demo" tag should be created
85
+ And the exit code should be 0
86
+
87
+ @1.0.0
88
+ Scenario: user runs autotag with "cleanup" with no stage
89
+ Given a repo
90
+ When I run autotag with "cleanup"
91
+ Then I should see "Error occured: You must provide a stage"
92
+ And the exit code should be 1
@@ -3,18 +3,21 @@ Feature: Deployment
3
3
  As a ruby and git ninja
4
4
  I want cap to do all the work for me
5
5
 
6
+ @0.1.5
6
7
  Scenario: user deploys with single file deploy.rb with 3 stages
7
8
  Given a three-stage app using single deploy file
8
9
  And a ci tag
9
10
  When I deploy to staging
10
11
  Then a tag should be added to git
11
12
 
13
+ @0.1.5
12
14
  Scenario: user deploys with single file deploy.rb with no stages
13
15
  Given a one-stage app using single deploy file with the following environments:
14
16
  |production |
15
17
  When I deploy
16
18
  Then a "production" tag should be added to git
17
19
 
20
+ @0.1.5
18
21
  Scenario: user deploys with single file deploy.rb stages with dashes in the name
19
22
  Given a one-stage app using single deploy file with the following environments:
20
23
  |staging |
@@ -22,6 +25,7 @@ Feature: Deployment
22
25
  When I deploy to secret-production
23
26
  Then a "secret-production" tag should be added to git
24
27
 
28
+ @0.1.5
25
29
  Scenario: user deploys with cap-ext multistage
26
30
  Given a three-stage app using cap-multistage
27
31
  And a ci tag