git-release 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,215 @@
1
+ #!/bin/bash -e
2
+
3
+ . ./test/test_helper.sh
4
+ . ./support/git-functions.sh
5
+
6
+ describe "git-release - unit - git functions"
7
+
8
+ after() {
9
+ if [[ $MAINTAIN_SANDBOX != true ]]; then
10
+ remove_sandbox
11
+ fi;
12
+ }
13
+
14
+ it_uses_check_tag_exists_to_return_false_if_no_tags_exist() {
15
+ generate_git_repo
16
+
17
+ result=$(set +e ; check_tag_exists "not/found/anything" ; echo $?)
18
+ test 1 -eq $result
19
+
20
+ result=$(set +e ; check_tag_exists "" ; echo $?)
21
+ test 1 -eq $result
22
+ }
23
+
24
+ it_uses_check_tag_exists_to_return_false_if_it_doesnt_exist() {
25
+ local tags=(
26
+ "release/v1.0.5"
27
+ "release/v1.0.6"
28
+ )
29
+ generate_sandbox_tags tags[@]
30
+
31
+ result=$(set +e ; check_tag_exists "not/found/anything" ; echo $?)
32
+ test 1 -eq $result
33
+
34
+ result=$(set +e ; check_tag_exists ""; echo $?)
35
+ test 1 -eq $result
36
+ }
37
+
38
+ it_uses_check_tag_exists_to_return_true_if_tag_exists() {
39
+
40
+ local tags=(
41
+ "release/v1.0.5"
42
+ "release/v1.0.6"
43
+ )
44
+ generate_sandbox_tags tags[@]
45
+
46
+ result=$(set +e ; check_tag_exists "release/v1.0.5" ; echo $?)
47
+ test 0 -eq $result
48
+
49
+ result=$(set +e ; check_tag_exists "release/v1.0.6" ; echo $?)
50
+ test 0 -eq $result
51
+ }
52
+
53
+ #ensure_git_directory()
54
+
55
+ it_fails_on_ensure_git_directory_with_no_git() {
56
+ enter_sandbox
57
+ rm -rf .git
58
+
59
+ should_fail "$(ensure_git_directory)"
60
+ }
61
+
62
+ it_passes_on_ensure_git_directory_with_git_directory() {
63
+ enter_sandbox
64
+ mkdir -p .git
65
+
66
+ should_succeed $(ensure_git_directory)
67
+ }
68
+
69
+ #ensure_git_is_clean()
70
+
71
+ it_fails_on_ensure_git_is_clean_when_dirty(){
72
+ generate_git_repo
73
+ should_succeed $(ensure_git_is_clean)
74
+ touch 'AnyOldFile'
75
+ should_fail $(ensure_git_is_clean)
76
+
77
+ test "$(ensure_git_is_clean)" = "Error - Current branch is in a dirty state, please commit your changes first.
78
+ # On branch master
79
+ # Untracked files:
80
+ # (use \"git add <file>...\" to include in what will be committed)
81
+ #
82
+ #"$'\t'"AnyOldFile
83
+ nothing added to commit but untracked files present (use \"git add\" to track)"
84
+ }
85
+
86
+ it_passes_on_ensure_git_is_clean_when_clean(){
87
+ generate_git_repo
88
+
89
+ should_succeed $(ensure_git_is_clean)
90
+ }
91
+
92
+ #get_commits_between_points
93
+
94
+ it_uses_get_commits_between_points_to_list_all_commits_with_nothing_passed() {
95
+ generate_git_repo
96
+
97
+ test "$(get_commits_between_points)" = "$(get_sha_for_first_commit)"
98
+ }
99
+
100
+ it_uses_get_commits_between_points_to_list_all_commits_from_a_start_point() {
101
+ local tags=(
102
+ "random_tag_1"
103
+ "release/v1.0.5"
104
+ "random_tag_2"
105
+ "release/v1.0.6"
106
+ "random_tag_3"
107
+ )
108
+ generate_sandbox_tags tags[@]
109
+
110
+ local output=$(get_commits_between_points 'random_tag_2')
111
+ test "$output" = "$(get_sha_for_tag_name 'random_tag_3')
112
+ $(get_sha_for_tag_name 'release/v1.0.6')
113
+ $(get_sha_for_tag_name 'random_tag_2')"
114
+ }
115
+
116
+ it_uses_get_commits_between_points_to_get_nothing_when_no_commits_exists() {
117
+ generate_git_repo
118
+
119
+ should_fail $(get_commits_between_points 'anyTagName' 'anotherTagName')
120
+ }
121
+
122
+ it_uses_get_commits_between_points_to_return_commits_with_no_start_point() {
123
+ local tags=(
124
+ "random_tag_1"
125
+ "release/v1.0.5"
126
+ "random_tag_2"
127
+ "release/v1.0.6"
128
+ "random_tag_3"
129
+ )
130
+ generate_sandbox_tags tags[@]
131
+
132
+ local start_point=""
133
+ local end_point="release/v1.0.6"
134
+ local output=$(get_commits_between_points "$start_point" "$end_point")
135
+
136
+ #Ordered by creation date
137
+ local target_tag_sha=$(get_sha_for_tag_name 'release/v1.0.6')
138
+ local older_sha_1=$(get_sha_for_tag_name 'random_tag_2')
139
+ local older_sha_2=$(get_sha_for_tag_name 'release/v1.0.5')
140
+ local older_sha_3=$(get_sha_for_tag_name 'random_tag_1')
141
+ local initial_commit=$(get_sha_for_first_commit)
142
+
143
+ test "$output" = "$target_tag_sha
144
+ $older_sha_1
145
+ $older_sha_2
146
+ $older_sha_3
147
+ $initial_commit"
148
+ }
149
+
150
+ it_uses_get_commits_between_points_to_return_all_commits_between_points_with_filter() {
151
+ local tags=(
152
+ "random_tag_1"
153
+ "random_tag_2"
154
+ "release/production/v1.0.9"
155
+ "release/production/v3.0.9"
156
+ "release/production/v3.1.9"
157
+ "release/staging/v2.0.3"
158
+ )
159
+ generate_sandbox_tags tags[@]
160
+
161
+ local start_point="release/production/v1.0.9"
162
+ local end_point="release/production/v3.0.9"
163
+
164
+ local commit_message=$(get_commit_message_for_latest_commit 'release/production/v3.0.9')
165
+ local target_tag_sha=$(get_sha_for_tag_name 'release/production/v3.0.9')
166
+
167
+ local output=$(get_commits_between_points "$start_point" "$end_point" "$commit_message")
168
+
169
+ test "$output" = "$target_tag_sha"
170
+ }
171
+
172
+ it_uses_get_commits_between_points_to_return_all_commits_with_no_start_point_with_filter() {
173
+ local tags=(
174
+ "random_tag_1"
175
+ "random_tag_2"
176
+ "release/production/v1.0.9"
177
+ "release/production/v3.0.9"
178
+ "release/production/v3.1.9"
179
+ "release/staging/v2.0.3"
180
+ )
181
+ generate_sandbox_tags tags[@]
182
+
183
+ local start_point=""
184
+ local end_point="release/production/v3.1.9"
185
+
186
+ local commit_message=$(get_commit_message_for_latest_commit 'release/production/v3.1.9')
187
+ local target_tag_sha=$(get_sha_for_tag_name 'release/production/v3.1.9')
188
+
189
+ local output=$(get_commits_between_points "$start_point" "$end_point" "$commit_message")
190
+
191
+ test "$output" = "$target_tag_sha"
192
+ }
193
+
194
+ it_uses_get_commits_between_points_to_return_all_commits_between_points() {
195
+ local tags=(
196
+ 'random_tag_1'
197
+ 'release/v1.0.5'
198
+ 'random_tag_2'
199
+ 'release/v1.0.6'
200
+ )
201
+ generate_sandbox_tags tags[@]
202
+
203
+ local start_point="release/v1.0.5"
204
+ local end_point="release/v1.0.6"
205
+ local output=$(get_commits_between_points "$start_point" "$end_point")
206
+
207
+ #Ordered by creation date
208
+ local target_tag_sha=$(get_sha_for_tag_name 'release/v1.0.6')
209
+ local older_sha_1=$(get_sha_for_tag_name 'random_tag_2')
210
+ local older_sha_2=$(get_sha_for_tag_name 'release/v1.0.5')
211
+
212
+ test "$output" = "$target_tag_sha
213
+ $older_sha_1
214
+ $older_sha_2"
215
+ }
@@ -0,0 +1,185 @@
1
+ #!/bin/bash -e
2
+
3
+ . ./test/test_helper.sh
4
+ . ./support/git-release-functions.sh
5
+
6
+ describe "git-release - unit"
7
+
8
+ after() {
9
+ if [[ $MAINTAIN_SANDBOX != true ]]; then
10
+ remove_sandbox
11
+ fi;
12
+ }
13
+
14
+ #validate_inputs()
15
+
16
+ it_fails_on_validate_inputs_with_no_version_type() {
17
+ should_fail "$(validate_version_type)"
18
+ }
19
+
20
+ it_fails_on_validate_inputs_with_invalid_version_type() {
21
+ should_fail "$(validate_version_type "invalid_type")"
22
+ }
23
+
24
+ it_passes_on_validate_inputs_with_major_version_type() {
25
+ should_succeed $(validate_version_type "major")
26
+ }
27
+
28
+ it_passes_on_validate_inputs_with_minor_version_type() {
29
+ should_succeed $(validate_version_type "minor")
30
+ }
31
+
32
+ it_passes_on_validate_inputs_with_patch_version_type() {
33
+ should_succeed $(validate_version_type "patch")
34
+ }
35
+
36
+ #get_release_tags()
37
+
38
+ it_uses_get_release_tags_to_return_all_tags_with_no_pattern_ordered_by_alpha() {
39
+ local tags=(
40
+ "random_tag_1"
41
+ "random_tag_2"
42
+ "random_tag_3"
43
+ "release/production/v1.0.9"
44
+ "release/production/v3.0.9"
45
+ )
46
+ generate_sandbox_tags tags[@]
47
+
48
+ test "$(get_release_tags)" = "random_tag_1
49
+ random_tag_2
50
+ random_tag_3
51
+ release/production/v1.0.9
52
+ release/production/v3.0.9"
53
+ }
54
+
55
+ it_uses_get_release_tags_to_return_tags_matching_a_given_pattern() {
56
+ local tags=(
57
+ "random_tag_1"
58
+ "random_tag_2"
59
+ "random_tag_3"
60
+ "release/production/v1.0.9"
61
+ "release/production/v3.0.9"
62
+ )
63
+ generate_sandbox_tags tags[@]
64
+
65
+ local output=$(get_release_tags random)
66
+ test "$output" = "random_tag_1
67
+ random_tag_2
68
+ random_tag_3"
69
+
70
+ local output=$(get_release_tags release/production)
71
+ test "$output" = "release/production/v1.0.9
72
+ release/production/v3.0.9"
73
+ }
74
+
75
+ #get_last_tag_name()
76
+
77
+ it_uses_get_last_tag_name_to_find_the_last_tag_scoped_by_pattern() {
78
+ local tags=(
79
+ "random_tag_1"
80
+ "release/production/v1.0.9"
81
+ "release/production/v3.0.9"
82
+ )
83
+ generate_sandbox_tags tags[@]
84
+
85
+ local output=$(get_last_tag_name "release/production/v")
86
+ test "$output" = "release/production/v3.0.9"
87
+ }
88
+
89
+ it_uses_get_last_tag_name_to_return_nothing_with_no_tags() {
90
+ test "$(get_last_tag_name 'no/existing/tags')" = ""
91
+ }
92
+
93
+ it_uses_get_last_tag_name_to_return_nothing_with_no_matches() {
94
+ local tags=(
95
+ "random_tag_1"
96
+ "release/production/v3.0.9"
97
+ )
98
+ generate_sandbox_tags tags[@]
99
+
100
+ test "$(get_last_tag_name 'no/matches/atall')" = ""
101
+ }
102
+
103
+ #get_versioning_prefix_from_tag()
104
+
105
+ it_uses_get_versioning_prefix_from_tag_to_error_on_missing_tag() {
106
+ should_fail $(get_versioning_prefix_from_tag)
107
+ }
108
+
109
+ it_uses_get_versioning_prefix_from_tag_with_an_invalid_tag_name() {
110
+ should_fail $(get_versioning_prefix_from_tag invalidx.x.x)
111
+ should_fail $(get_versioning_prefix_from_tag invalid0.0.x)
112
+ should_fail $(get_versioning_prefix_from_tag invalid1.0)
113
+ should_fail $(get_versioning_prefix_from_tag invalid0)
114
+ should_fail $(get_versioning_prefix_from_tag invalidNoVersionNumber)
115
+ }
116
+
117
+ it_uses_get_versioning_prefix_from_tag_to_succeed_capturing_version_prefix() {
118
+ test "$(get_versioning_prefix_from_tag 'releases/2.1.3')" = "releases/"
119
+ test "$(get_versioning_prefix_from_tag 'r/v/2.1.3')" = "r/v/"
120
+ test "$(get_versioning_prefix_from_tag 'some/old/release/v1.0.40')" = "some/old/release/v"
121
+ }
122
+
123
+ #get_version_number_from_tag()
124
+
125
+ it_uses_get_version_number_from_tag_to_error_on_missing_tag() {
126
+ should_fail $(get_version_number_from_tag)
127
+ }
128
+
129
+ it_uses_get_version_number_from_tag_to_error_with_an_invalid_tag_name() {
130
+ should_fail $(get_version_number_from_tag invalidx.x.x)
131
+ should_fail $(get_version_number_from_tag invalid1.0)
132
+ should_fail $(get_version_number_from_tag invalid0)
133
+ }
134
+
135
+ it_uses_get_version_number_from_tag_to_succeed_capturing_version_numbers() {
136
+ test "$(get_version_number_from_tag 'releases/v102.29.20')" = "102.29.20"
137
+ test "$(get_version_number_from_tag '1.22.33')" = "1.22.33"
138
+ test "$(get_version_number_from_tag 'Release with Spaces40.50.60')" = "40.50.60"
139
+ }
140
+
141
+ #get_next_version_number_from_tag()
142
+
143
+ it_uses_get_next_version_number_from_tag_to_error_on_missing_version_type() {
144
+ should_fail $(get_next_version_number_from_tag)
145
+ }
146
+
147
+ it_uses_get_next_version_number_from_tag_to_error_with_an_invalid_last_tag_name() {
148
+ should_fail $(get_next_version_number_from_tag major invalidx.x.x)
149
+ should_fail $(get_next_version_number_from_tag major invalid1.0)
150
+ should_fail $(get_next_version_number_from_tag major invalid0)
151
+ }
152
+
153
+ it_uses_get_next_version_number_from_tag_to_succeed_with_an_empty_version_prefix() {
154
+ should_succeed $(get_next_version_number_from_tag major)
155
+ }
156
+
157
+ it_uses_get_next_version_number_from_tag_to_succeed_with_no_existing_tags() {
158
+ should_succeed $(get_next_version_number_from_tag major v1.0.40)
159
+ }
160
+
161
+ it_uses_get_next_version_number_from_tag_to_succeed_with_no_matching_tags() {
162
+ local output=$(get_next_version_number_from_tag major some/old/release/v1.0.40)
163
+ test $output = "2.0.40"
164
+ }
165
+
166
+ it_uses_get_next_version_number_from_tag_to_succeed_incrementing_with_no_last_version() {
167
+ local output=$(get_next_version_number_from_tag major)
168
+ test $output = "1.0.0"
169
+ }
170
+
171
+ it_uses_get_next_version_number_from_tag_to_succeed_incrementing_with_found_last_version() {
172
+ local output=$(get_next_version_number_from_tag minor release/production/v3.1.9)
173
+ test $output = "3.2.9"
174
+ }
175
+
176
+ it_uses_get_next_version_number_from_tag_to_succeed_incrementing_each_type() {
177
+ local output=$(get_next_version_number_from_tag major release/production/v3.1.9)
178
+ test $output = "4.1.9"
179
+
180
+ local output=$(get_next_version_number_from_tag minor release/staging/v2.0.3)
181
+ test $output = "2.1.3"
182
+
183
+ local output=$(get_next_version_number_from_tag patch release/v1.0.6)
184
+ test $output = "1.0.7"
185
+ }
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: git-release
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tom Meier
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-05-03 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '1.3'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.3'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: Changelog and release tag generator from GIT
47
+ email:
48
+ - tom@venombytes.com
49
+ executables:
50
+ - git-release
51
+ - git-release-deployed
52
+ extensions: []
53
+ extra_rdoc_files: []
54
+ files:
55
+ - .gitignore
56
+ - .travis.yml
57
+ - Gemfile
58
+ - LICENSE.txt
59
+ - README.md
60
+ - Rakefile
61
+ - bin/git-release
62
+ - bin/git-release-deployed
63
+ - git-release.gemspec
64
+ - lib/git-release.rb
65
+ - lib/git_release/version.rb
66
+ - support/changelog-functions.sh
67
+ - support/git-functions.sh
68
+ - support/git-release-functions.sh
69
+ - support/language-bash.sh
70
+ - support/support-functions.sh
71
+ - test/bin/run_all
72
+ - test/integration/releaseable-deployed-test.sh
73
+ - test/integration/releaseable-test.sh
74
+ - test/support/roundup
75
+ - test/test_helper.sh
76
+ - test/unit/changelog-functions-test.sh
77
+ - test/unit/git-functions-test.sh
78
+ - test/unit/releaseable-test.sh
79
+ homepage: http://github.com/tommeier/git-release
80
+ licenses:
81
+ - MIT
82
+ post_install_message:
83
+ rdoc_options: []
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ! '>='
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ required_rubygems_version: !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ! '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ requirements: []
99
+ rubyforge_project:
100
+ rubygems_version: 1.8.23
101
+ signing_key:
102
+ specification_version: 3
103
+ summary: Generate changelog from git commits and tag your release versions
104
+ test_files:
105
+ - test/bin/run_all
106
+ - test/integration/releaseable-deployed-test.sh
107
+ - test/integration/releaseable-test.sh
108
+ - test/support/roundup
109
+ - test/test_helper.sh
110
+ - test/unit/changelog-functions-test.sh
111
+ - test/unit/git-functions-test.sh
112
+ - test/unit/releaseable-test.sh