gitx 3.1.0.ci.216.1 → 3.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +5 -2
- data/.ruby-version +1 -1
- data/README.md +4 -4
- data/gitx.gemspec +17 -17
- data/lib/gitx/cli/base_command.rb +1 -1
- data/lib/gitx/cli/buildtag_command.rb +2 -1
- data/lib/gitx/cli/cleanup_command.rb +1 -0
- data/lib/gitx/cli/integrate_command.rb +3 -4
- data/lib/gitx/cli/nuke_command.rb +3 -0
- data/lib/gitx/cli/release_command.rb +11 -6
- data/lib/gitx/cli/start_command.rb +4 -5
- data/lib/gitx/configuration.rb +4 -0
- data/lib/gitx/defaults.yml +4 -0
- data/lib/gitx/executor.rb +1 -0
- data/lib/gitx/github.rb +8 -5
- data/lib/gitx/version.rb +1 -1
- data/spec/fixtures/vcr_cassettes/pull_request_does_exist_with_success_status.yml +2 -1
- data/spec/fixtures/vcr_cassettes/pull_request_does_exist_with_success_status_and_then_add_label.yml +228 -0
- data/spec/gitx/cli/integrate_command_spec.rb +1 -0
- data/spec/gitx/cli/release_command_spec.rb +35 -0
- data/spec/spec_helper.rb +1 -1
- metadata +13 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96b227336f3e21cebf4f4be03e68b301333a1797e75cdb02aca430ba6fd41652
|
4
|
+
data.tar.gz: cf5a0a378857a405fa309bbd3539c45d69e2a32b6bc13e2cfe90a0563a8fb185
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2608e996319f376c8eaa721a924f4b7a5d00788ed9e306df31d2b12aef43868313a4c11144912c0d5aa7e7772d3ca1d649be28f894dbfafef8d18b13a0f147f5
|
7
|
+
data.tar.gz: a4a8d25ee10ddbc46a19b78ca94f755dbd52a2508c4ccbc48ee04fae5b695317592322289aecc5b6296ab9b3557811d1211aa279716c359b1b28aec18185df49
|
data/.rubocop.yml
CHANGED
@@ -6,6 +6,9 @@
|
|
6
6
|
# Note that changes in the inspected code, or installation of new
|
7
7
|
# versions of RuboCop, may require this file to be generated again.
|
8
8
|
|
9
|
+
AllCops:
|
10
|
+
TargetRubyVersion: '2.6'
|
11
|
+
|
9
12
|
FileName:
|
10
13
|
Exclude:
|
11
14
|
- bin/*
|
@@ -25,7 +28,7 @@ Metrics/AbcSize:
|
|
25
28
|
|
26
29
|
# Offense count: 2
|
27
30
|
Metrics/CyclomaticComplexity:
|
28
|
-
Max:
|
31
|
+
Max: 8
|
29
32
|
|
30
33
|
# Offense count: 5
|
31
34
|
# Configuration parameters: CountComments.
|
@@ -35,7 +38,7 @@ Metrics/MethodLength:
|
|
35
38
|
# Offense count: 1
|
36
39
|
# Configuration parameters: CountComments.
|
37
40
|
Metrics/ModuleLength:
|
38
|
-
Max:
|
41
|
+
Max: 150
|
39
42
|
|
40
43
|
# Offense count: 3
|
41
44
|
Style/RescueModifier:
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.3
|
1
|
+
2.7.3
|
data/README.md
CHANGED
@@ -47,13 +47,13 @@ This setting is cleared when a reviewer approves or rejects the pull request.
|
|
47
47
|
|
48
48
|
## git release <feature_branch_name (optional, default: current_branch)
|
49
49
|
|
50
|
-
release the feature branch to master. This operation will perform the following:
|
50
|
+
release the feature branch to the base branch (by default, master). This operation will perform the following:
|
51
51
|
|
52
52
|
* pull latest code from remote feature branch
|
53
|
-
* pull latest code from
|
53
|
+
* pull latest code from the base branch
|
54
54
|
* prompt user to confirm they actually want to perform the release
|
55
55
|
* check if pull request commit status is currently successful
|
56
|
-
* merge current branch into
|
56
|
+
* merge current branch into the base branch (or add release label if configured)
|
57
57
|
* (optional) cleanup merged branches from remote server
|
58
58
|
|
59
59
|
options:
|
@@ -63,7 +63,7 @@ options:
|
|
63
63
|
|
64
64
|
## git cleanup
|
65
65
|
|
66
|
-
delete released branches after they have been merged into
|
66
|
+
delete released branches after they have been merged into the base branch.
|
67
67
|
|
68
68
|
## git nuke <aggregate_branch_name>
|
69
69
|
|
data/gitx.gemspec
CHANGED
@@ -1,24 +1,24 @@
|
|
1
|
-
lib = File.expand_path('
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
3
|
require 'gitx/version'
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
|
-
spec.name
|
7
|
-
spec.
|
8
|
-
spec.
|
9
|
-
spec.
|
10
|
-
spec.
|
11
|
-
spec.
|
12
|
-
spec.
|
13
|
-
spec.
|
6
|
+
spec.name = 'gitx'
|
7
|
+
spec.authors = ['Ryan Sonnek']
|
8
|
+
spec.email = ['ryan.sonnek@gmail.com']
|
9
|
+
spec.description = 'Git eXtensions for improved development workflows'
|
10
|
+
spec.summary = 'Utility scripts for Git to increase productivity for common operations'
|
11
|
+
spec.homepage = ''
|
12
|
+
spec.license = 'MIT'
|
13
|
+
spec.required_ruby_version = '>= 2.6.7'
|
14
14
|
|
15
|
-
spec.files
|
16
|
-
spec.executables
|
17
|
-
spec.test_files
|
18
|
-
spec.require_paths
|
15
|
+
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
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
19
|
|
20
20
|
spec.add_runtime_dependency 'octokit'
|
21
|
-
spec.add_runtime_dependency 'rugged', '~> 0.
|
21
|
+
spec.add_runtime_dependency 'rugged', '~> 0.27.10'
|
22
22
|
spec.add_runtime_dependency 'thor'
|
23
23
|
|
24
24
|
spec.add_development_dependency 'bundler'
|
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
|
|
32
32
|
spec.add_development_dependency 'webmock'
|
33
33
|
|
34
34
|
# configure gem version for continuous integration builds
|
35
|
-
|
36
|
-
|
37
|
-
|
35
|
+
version = Gitx::VERSION
|
36
|
+
version = "#{version}.ci.#{ENV['TRAVIS_JOB_NUMBER']}" if ENV['TRAVIS_JOB_NUMBER']
|
37
|
+
spec.version = version
|
38
38
|
end
|
@@ -13,6 +13,7 @@ module Gitx
|
|
13
13
|
method_option :message, type: :string, aliases: '-m', desc: 'message to attach to the buildtag'
|
14
14
|
def buildtag
|
15
15
|
raise "Branch must be one of the supported taggable branches: #{config.taggable_branches}" unless config.taggable_branch?(branch_name)
|
16
|
+
|
16
17
|
run_git_cmd 'tag', build_tag, '--annotate', '--message', label
|
17
18
|
run_git_cmd 'push', 'origin', build_tag
|
18
19
|
end
|
@@ -28,7 +29,7 @@ module Gitx
|
|
28
29
|
end
|
29
30
|
|
30
31
|
def build_tag
|
31
|
-
@
|
32
|
+
@build_tag ||= [
|
32
33
|
BUILD_TAG_PREFIX,
|
33
34
|
branch_name,
|
34
35
|
utc_timestamp
|
@@ -34,6 +34,7 @@ module Gitx
|
|
34
34
|
|
35
35
|
def pull_request_for_branch(branch)
|
36
36
|
return nil if config.reserved_branch?(branch)
|
37
|
+
|
37
38
|
find_or_create_pull_request(branch)
|
38
39
|
end
|
39
40
|
|
@@ -54,11 +55,9 @@ module Gitx
|
|
54
55
|
end
|
55
56
|
|
56
57
|
def feature_branch_name
|
57
|
-
@
|
58
|
+
@feature_branch_name ||= begin
|
58
59
|
feature_branch = options[:resume] || current_branch.name
|
59
|
-
until local_branch_exists?(feature_branch)
|
60
|
-
feature_branch = ask("#{feature_branch} does not exist. Please select one of the available local branches: #{local_branches}")
|
61
|
-
end
|
60
|
+
feature_branch = ask("#{feature_branch} does not exist. Please select one of the available local branches: #{local_branches}") until local_branch_exists?(feature_branch)
|
62
61
|
feature_branch
|
63
62
|
end
|
64
63
|
end
|
@@ -14,6 +14,7 @@ module Gitx
|
|
14
14
|
|
15
15
|
last_known_good_tag = current_build_tag(good_branch)
|
16
16
|
return unless yes?("Reset #{bad_branch} to #{last_known_good_tag}? (y/n)", :green)
|
17
|
+
|
17
18
|
assert_aggregate_branch!(bad_branch)
|
18
19
|
return if migrations_need_to_be_reverted?(bad_branch, last_known_good_tag)
|
19
20
|
|
@@ -34,6 +35,7 @@ module Gitx
|
|
34
35
|
|
35
36
|
def migrations_need_to_be_reverted?(bad_branch, last_known_good_tag)
|
36
37
|
return false unless File.exist?('db/migrate')
|
38
|
+
|
37
39
|
outdated_migrations = run_git_cmd('diff', "#{last_known_good_tag}...#{bad_branch}", '--name-only', 'db/migrate').split
|
38
40
|
return false if outdated_migrations.empty?
|
39
41
|
|
@@ -49,6 +51,7 @@ module Gitx
|
|
49
51
|
def current_build_tag(branch)
|
50
52
|
last_build_tag = build_tags_for_branch(branch).last
|
51
53
|
raise "No known good tag found for branch: #{branch}. Verify tag exists via `git tag -l`" unless last_build_tag
|
54
|
+
|
52
55
|
last_build_tag
|
53
56
|
end
|
54
57
|
|
@@ -11,9 +11,10 @@ module Gitx
|
|
11
11
|
desc 'release', 'release the current branch to production'
|
12
12
|
method_option :cleanup, type: :boolean, desc: 'cleanup merged branches after release'
|
13
13
|
def release(branch = nil)
|
14
|
-
return unless yes?("Release #{current_branch.name} to #{config.base_branch}? (y/n)", :green)
|
15
|
-
|
16
14
|
branch ||= current_branch.name
|
15
|
+
|
16
|
+
return unless yes?("Release #{branch} to #{config.base_branch}? (y/n)", :green)
|
17
|
+
|
17
18
|
assert_not_protected_branch!(branch, 'release')
|
18
19
|
checkout_branch(branch)
|
19
20
|
run_git_cmd 'update'
|
@@ -21,10 +22,14 @@ module Gitx
|
|
21
22
|
pull_request = find_or_create_pull_request(branch)
|
22
23
|
return unless confirm_branch_status?(branch)
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
if (label = config.release_label)
|
26
|
+
label_pull_request pull_request, label
|
27
|
+
else
|
28
|
+
checkout_branch config.base_branch
|
29
|
+
run_git_cmd 'pull', 'origin', config.base_branch
|
30
|
+
run_git_cmd 'merge', '--no-ff', '--message', commit_message(branch, pull_request), branch
|
31
|
+
run_git_cmd 'push', 'origin', 'HEAD'
|
32
|
+
end
|
28
33
|
|
29
34
|
after_release
|
30
35
|
end
|
@@ -6,14 +6,12 @@ module Gitx
|
|
6
6
|
module Cli
|
7
7
|
class StartCommand < BaseCommand
|
8
8
|
EXAMPLE_BRANCH_NAMES = %w[api-fix-invalid-auth desktop-cleanup-avatar-markup share-form-add-edit-link].freeze
|
9
|
-
VALID_BRANCH_NAME_REGEX = /^[A-Za-z0-9\-_]
|
9
|
+
VALID_BRANCH_NAME_REGEX = /^[A-Za-z0-9\-_]+$/.freeze
|
10
10
|
|
11
11
|
desc 'start', 'start a new git branch with latest changes from master'
|
12
12
|
method_option :issue, type: :string, aliases: '-i', desc: 'Issue identifier'
|
13
13
|
def start(branch_name = nil)
|
14
|
-
until valid_new_branch_name?(branch_name)
|
15
|
-
branch_name = ask("What would you like to name your branch? (ex: #{EXAMPLE_BRANCH_NAMES.sample})")
|
16
|
-
end
|
14
|
+
branch_name = ask("What would you like to name your branch? (ex: #{EXAMPLE_BRANCH_NAMES.sample})") until valid_new_branch_name?(branch_name)
|
17
15
|
|
18
16
|
checkout_branch config.base_branch
|
19
17
|
run_git_cmd 'pull'
|
@@ -35,12 +33,13 @@ module Gitx
|
|
35
33
|
|
36
34
|
def valid_new_branch_name?(branch)
|
37
35
|
return false if repo_branches.include?(branch)
|
36
|
+
|
38
37
|
Rugged::Reference.valid_name?("refs/heads/#{branch}")
|
39
38
|
end
|
40
39
|
|
41
40
|
# get list of local and remote branches
|
42
41
|
def repo_branches
|
43
|
-
@
|
42
|
+
@repo_branches ||= repo.branches.each_name.map do |branch|
|
44
43
|
branch.gsub('origin/', '')
|
45
44
|
end
|
46
45
|
end
|
data/lib/gitx/configuration.rb
CHANGED
data/lib/gitx/defaults.yml
CHANGED
@@ -2,6 +2,10 @@
|
|
2
2
|
# default base branch
|
3
3
|
base_branch: master
|
4
4
|
|
5
|
+
# Label to use for releasing a pull request, if this is set a label will be
|
6
|
+
# added to the PR rather than merging to the base branch
|
7
|
+
release_label:
|
8
|
+
|
5
9
|
# list of branches eligable for integration
|
6
10
|
aggregate_branches:
|
7
11
|
- staging
|
data/lib/gitx/executor.rb
CHANGED
data/lib/gitx/github.rb
CHANGED
@@ -57,6 +57,10 @@ module Gitx
|
|
57
57
|
github_client.create_status(github_slug, commit_sha, state, context: REVIEW_CONTEXT, description: description)
|
58
58
|
end
|
59
59
|
|
60
|
+
def label_pull_request(pull_request, label)
|
61
|
+
github_client.add_labels_to_an_issue(github_slug, pull_request.number, [label])
|
62
|
+
end
|
63
|
+
|
60
64
|
# @see http://developer.github.com/v3/pulls/
|
61
65
|
def create_pull_request(branch)
|
62
66
|
say 'Creating pull request for '
|
@@ -124,7 +128,7 @@ module Gitx
|
|
124
128
|
end
|
125
129
|
|
126
130
|
def github_client
|
127
|
-
@
|
131
|
+
@github_client ||= Octokit::Client.new(access_token: authorization_token)
|
128
132
|
end
|
129
133
|
|
130
134
|
# @return [String] github username (ex: 'wireframe') of the current github.user
|
@@ -132,6 +136,7 @@ module Gitx
|
|
132
136
|
def username
|
133
137
|
username = repo.config['github.user']
|
134
138
|
raise "Github user not configured. Run: `git config --global github.user 'me@email.com'`" unless username
|
139
|
+
|
135
140
|
username
|
136
141
|
end
|
137
142
|
|
@@ -142,7 +147,7 @@ module Gitx
|
|
142
147
|
# https://github.com/wireframe/gitx.git #=> wireframe/gitx
|
143
148
|
def github_slug
|
144
149
|
remote = repo.config['remote.origin.url']
|
145
|
-
remote.to_s.gsub(/\.git$/, '').split(%r{[
|
150
|
+
remote.to_s.gsub(/\.git$/, '').split(%r{[:/]}).last(2).join('/')
|
146
151
|
end
|
147
152
|
|
148
153
|
def github_organization
|
@@ -154,9 +159,7 @@ module Gitx
|
|
154
159
|
end
|
155
160
|
|
156
161
|
def global_config
|
157
|
-
@
|
158
|
-
File.exist?(global_config_file) ? YAML.load_file(global_config_file) : {}
|
159
|
-
end
|
162
|
+
@global_config ||= File.exist?(global_config_file) ? YAML.load_file(global_config_file) : {}
|
160
163
|
end
|
161
164
|
|
162
165
|
def save_global_config(options)
|
data/lib/gitx/version.rb
CHANGED
data/spec/fixtures/vcr_cassettes/pull_request_does_exist_with_success_status_and_then_add_label.yml
ADDED
@@ -0,0 +1,228 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.github.com/repos/wireframe/gitx/pulls?head=wireframe:feature-branch&state=open
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/vnd.github.v3+json
|
12
|
+
User-Agent:
|
13
|
+
- Octokit Ruby Gem 3.2.0
|
14
|
+
Authorization:
|
15
|
+
- token 123123
|
16
|
+
Accept-Encoding:
|
17
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Server:
|
24
|
+
- GitHub.com
|
25
|
+
Date:
|
26
|
+
- Tue, 05 Aug 2014 16:36:03 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/json; charset=utf-8
|
29
|
+
Status:
|
30
|
+
- 200 OK
|
31
|
+
X-Ratelimit-Limit:
|
32
|
+
- '5000'
|
33
|
+
X-Ratelimit-Remaining:
|
34
|
+
- '4991'
|
35
|
+
X-Ratelimit-Reset:
|
36
|
+
- '1407257585'
|
37
|
+
Cache-Control:
|
38
|
+
- private, max-age=60, s-maxage=60
|
39
|
+
Etag:
|
40
|
+
- '"6d00d48abf2adf1877c8244700cd4c6f"'
|
41
|
+
X-Oauth-Scopes:
|
42
|
+
- repo
|
43
|
+
X-Accepted-Oauth-Scopes:
|
44
|
+
- ''
|
45
|
+
Vary:
|
46
|
+
- Accept, Authorization, Cookie, X-GitHub-OTP
|
47
|
+
- Accept-Encoding
|
48
|
+
X-Github-Media-Type:
|
49
|
+
- github.v3; format=json
|
50
|
+
Link:
|
51
|
+
- <https://api.github.com/repositories/17608725/pulls?head=wireframe%3Afeature-branch&state=open&page=0>;
|
52
|
+
rel="last"
|
53
|
+
X-Xss-Protection:
|
54
|
+
- 1; mode=block
|
55
|
+
X-Frame-Options:
|
56
|
+
- deny
|
57
|
+
Content-Security-Policy:
|
58
|
+
- default-src 'none'
|
59
|
+
Content-Length:
|
60
|
+
- '2'
|
61
|
+
Access-Control-Allow-Credentials:
|
62
|
+
- 'true'
|
63
|
+
Access-Control-Expose-Headers:
|
64
|
+
- ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset,
|
65
|
+
X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
|
66
|
+
Access-Control-Allow-Origin:
|
67
|
+
- "*"
|
68
|
+
X-Github-Request-Id:
|
69
|
+
- 46C5E25C:1E4F:1642AD9:53E107F3
|
70
|
+
Strict-Transport-Security:
|
71
|
+
- max-age=31536000; includeSubdomains
|
72
|
+
X-Content-Type-Options:
|
73
|
+
- nosniff
|
74
|
+
X-Served-By:
|
75
|
+
- d818ddef80f4c7d10683dd483558952a
|
76
|
+
body:
|
77
|
+
encoding: UTF-8
|
78
|
+
string: '[{"html_url":"https://path/to/html/pull/request","issue_url":"https://api/path/to/issue/url","number":10,"head":{"ref":"branch_name", "sha": "e12da4"}}]'
|
79
|
+
http_version:
|
80
|
+
recorded_at: Tue, 05 Aug 2014 16:36:03 GMT
|
81
|
+
- request:
|
82
|
+
method: get
|
83
|
+
uri: https://api.github.com/repos/wireframe/gitx/commits/feature-branch/status
|
84
|
+
body:
|
85
|
+
encoding: US-ASCII
|
86
|
+
string: ''
|
87
|
+
headers:
|
88
|
+
Accept:
|
89
|
+
- application/vnd.github.v3+json
|
90
|
+
User-Agent:
|
91
|
+
- Octokit Ruby Gem 3.4.0
|
92
|
+
Content-Type:
|
93
|
+
- application/json
|
94
|
+
Authorization:
|
95
|
+
- token 123123
|
96
|
+
Accept-Encoding:
|
97
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
98
|
+
response:
|
99
|
+
status:
|
100
|
+
code: 200
|
101
|
+
message: OK
|
102
|
+
headers:
|
103
|
+
Server:
|
104
|
+
- GitHub.com
|
105
|
+
Date:
|
106
|
+
- Wed, 10 Dec 2014 19:01:27 GMT
|
107
|
+
Content-Type:
|
108
|
+
- application/json; charset=utf-8
|
109
|
+
Transfer-Encoding:
|
110
|
+
- chunked
|
111
|
+
Status:
|
112
|
+
- 200 OK
|
113
|
+
X-Ratelimit-Limit:
|
114
|
+
- '5000'
|
115
|
+
X-Ratelimit-Remaining:
|
116
|
+
- '4993'
|
117
|
+
X-Ratelimit-Reset:
|
118
|
+
- '1418241620'
|
119
|
+
X-Oauth-Scopes:
|
120
|
+
- repo
|
121
|
+
X-Accepted-Oauth-Scopes:
|
122
|
+
- repo, repo:status
|
123
|
+
X-Github-Media-Type:
|
124
|
+
- github.v3; format=json
|
125
|
+
X-Xss-Protection:
|
126
|
+
- 1; mode=block
|
127
|
+
X-Frame-Options:
|
128
|
+
- deny
|
129
|
+
Content-Security-Policy:
|
130
|
+
- default-src 'none'
|
131
|
+
Access-Control-Allow-Credentials:
|
132
|
+
- 'true'
|
133
|
+
Access-Control-Expose-Headers:
|
134
|
+
- ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset,
|
135
|
+
X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
|
136
|
+
Access-Control-Allow-Origin:
|
137
|
+
- "*"
|
138
|
+
X-Github-Request-Id:
|
139
|
+
- C6CBAFAF:141D:2F27072:54889887
|
140
|
+
Strict-Transport-Security:
|
141
|
+
- max-age=31536000; includeSubdomains; preload
|
142
|
+
X-Content-Type-Options:
|
143
|
+
- nosniff
|
144
|
+
body:
|
145
|
+
encoding: UTF-8
|
146
|
+
string: '{"state":"success"}'
|
147
|
+
http_version:
|
148
|
+
recorded_at: Tue, 05 Aug 2014 16:36:03 GMT
|
149
|
+
- request:
|
150
|
+
method: post
|
151
|
+
uri: https://api.github.com/repos/wireframe/gitx/issues/10/labels
|
152
|
+
body:
|
153
|
+
encoding: US-ASCII
|
154
|
+
string: ''
|
155
|
+
headers:
|
156
|
+
Accept:
|
157
|
+
- application/vnd.github.v3+json
|
158
|
+
User-Agent:
|
159
|
+
- Octokit Ruby Gem 3.2.0
|
160
|
+
Authorization:
|
161
|
+
- token 123123
|
162
|
+
Accept-Encoding:
|
163
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
164
|
+
response:
|
165
|
+
status:
|
166
|
+
code: 200
|
167
|
+
message: OK
|
168
|
+
headers:
|
169
|
+
Server:
|
170
|
+
- GitHub.com
|
171
|
+
Date:
|
172
|
+
- Tue, 05 Aug 2014 16:36:03 GMT
|
173
|
+
Content-Type:
|
174
|
+
- application/json; charset=utf-8
|
175
|
+
Status:
|
176
|
+
- 200 OK
|
177
|
+
X-Ratelimit-Limit:
|
178
|
+
- '5000'
|
179
|
+
X-Ratelimit-Remaining:
|
180
|
+
- '4991'
|
181
|
+
X-Ratelimit-Reset:
|
182
|
+
- '1407257585'
|
183
|
+
Cache-Control:
|
184
|
+
- private, max-age=60, s-maxage=60
|
185
|
+
Etag:
|
186
|
+
- '"6d00d48abf2adf1877c8244700cd4c6f"'
|
187
|
+
X-Oauth-Scopes:
|
188
|
+
- repo
|
189
|
+
X-Accepted-Oauth-Scopes:
|
190
|
+
- ''
|
191
|
+
Vary:
|
192
|
+
- Accept, Authorization, Cookie, X-GitHub-OTP
|
193
|
+
- Accept-Encoding
|
194
|
+
X-Github-Media-Type:
|
195
|
+
- github.v3; format=json
|
196
|
+
Link:
|
197
|
+
- <https://api.github.com/repositories/17608725/pulls?head=wireframe%3Afeature-branch&state=open&page=0>;
|
198
|
+
rel="last"
|
199
|
+
X-Xss-Protection:
|
200
|
+
- 1; mode=block
|
201
|
+
X-Frame-Options:
|
202
|
+
- deny
|
203
|
+
Content-Security-Policy:
|
204
|
+
- default-src 'none'
|
205
|
+
Content-Length:
|
206
|
+
- '2'
|
207
|
+
Access-Control-Allow-Credentials:
|
208
|
+
- 'true'
|
209
|
+
Access-Control-Expose-Headers:
|
210
|
+
- ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset,
|
211
|
+
X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
|
212
|
+
Access-Control-Allow-Origin:
|
213
|
+
- "*"
|
214
|
+
X-Github-Request-Id:
|
215
|
+
- 46C5E25C:1E4F:1642AD9:53E107F3
|
216
|
+
Strict-Transport-Security:
|
217
|
+
- max-age=31536000; includeSubdomains
|
218
|
+
X-Content-Type-Options:
|
219
|
+
- nosniff
|
220
|
+
X-Served-By:
|
221
|
+
- d818ddef80f4c7d10683dd483558952a
|
222
|
+
body:
|
223
|
+
encoding: UTF-8
|
224
|
+
string: '[{"id":1,"name":"release-me"}]'
|
225
|
+
http_version:
|
226
|
+
recorded_at: Tue, 05 Aug 2014 16:36:03 GMT
|
227
|
+
recorded_with: VCR 2.9.2
|
228
|
+
|
@@ -19,6 +19,7 @@ describe Gitx::Cli::IntegrateCommand do
|
|
19
19
|
|
20
20
|
before do
|
21
21
|
allow(cli).to receive(:current_branch).and_return(current_branch)
|
22
|
+
allow(cli).to receive(:github_slug).and_return('wireframe/gitx')
|
22
23
|
branches = double('fake branches')
|
23
24
|
allow(branches).to receive(:each_name).with(:local).and_return(local_branch_names)
|
24
25
|
allow(branches).to receive(:each_name).with(:remote).and_return(remote_branch_names)
|
@@ -17,6 +17,7 @@ describe Gitx::Cli::ReleaseCommand do
|
|
17
17
|
|
18
18
|
before do
|
19
19
|
allow(cli).to receive(:current_branch).and_return(branch)
|
20
|
+
allow(cli).to receive(:github_slug).and_return('wireframe/gitx')
|
20
21
|
end
|
21
22
|
|
22
23
|
describe '#release' do
|
@@ -58,6 +59,7 @@ describe Gitx::Cli::ReleaseCommand do
|
|
58
59
|
expect(repo).to receive(:workdir).and_return(temp_dir)
|
59
60
|
|
60
61
|
expect(cli).to receive(:yes?).and_return(true)
|
62
|
+
expect(cli).to_not receive(:label_pull_request)
|
61
63
|
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
62
64
|
|
63
65
|
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
@@ -200,5 +202,38 @@ describe Gitx::Cli::ReleaseCommand do
|
|
200
202
|
should meet_expectations
|
201
203
|
end
|
202
204
|
end
|
205
|
+
context 'when user confirms release and pull request exists with success status with release_label config' do
|
206
|
+
let(:gitx_config) do
|
207
|
+
{
|
208
|
+
'release_label' => 'release-me'
|
209
|
+
}
|
210
|
+
end
|
211
|
+
before do
|
212
|
+
expect(repo).to receive(:workdir).and_return(temp_dir)
|
213
|
+
File.open(File.join(temp_dir, '.gitx.yml'), 'w') do |f|
|
214
|
+
f.puts gitx_config.to_yaml
|
215
|
+
end
|
216
|
+
|
217
|
+
expect(cli).to receive(:yes?).and_return(true)
|
218
|
+
expect(cli).to receive(:label_pull_request).with(having_attributes(number: 10), 'release-me').and_call_original
|
219
|
+
allow(cli).to receive(:authorization_token).and_return(authorization_token)
|
220
|
+
|
221
|
+
expect(executor).to_not receive(:execute).with('git', 'checkout', 'master')
|
222
|
+
expect(executor).to_not receive(:execute).with('git', 'pull', 'origin', 'master')
|
223
|
+
expect(executor).to_not receive(:execute).with('git', 'merge', '--no-ff', '--message', "[gitx] Release feature-branch to master\n\nConnected to #10", 'feature-branch')
|
224
|
+
expect(executor).to_not receive(:execute).with('git', 'push', 'origin', 'HEAD')
|
225
|
+
|
226
|
+
expect(executor).to receive(:execute).with('git', 'checkout', 'feature-branch').ordered
|
227
|
+
expect(executor).to receive(:execute).with('git', 'update').ordered
|
228
|
+
expect(executor).to receive(:execute).with('git integrate').ordered
|
229
|
+
|
230
|
+
VCR.use_cassette('pull_request_does_exist_with_success_status_and_then_add_label') do
|
231
|
+
cli.release
|
232
|
+
end
|
233
|
+
end
|
234
|
+
it 'runs expected commands' do
|
235
|
+
should meet_expectations
|
236
|
+
end
|
237
|
+
end
|
203
238
|
end
|
204
239
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -8,7 +8,7 @@ require 'bundler/setup'
|
|
8
8
|
|
9
9
|
# Requires supporting ruby files with custom matchers and macros, etc,
|
10
10
|
# in spec/support/ and its subdirectories.
|
11
|
-
Dir[File.join(__dir__, 'support/**/*.rb')].each { |f| require f }
|
11
|
+
Dir[File.join(__dir__, 'support/**/*.rb')].sort.each { |f| require f }
|
12
12
|
|
13
13
|
# This file was generated by the `rspec --init` command. Conventionally, all
|
14
14
|
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Sonnek
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: octokit
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.27.10
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: 0.27.10
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: thor
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -240,6 +240,7 @@ files:
|
|
240
240
|
- lib/gitx/version.rb
|
241
241
|
- spec/fixtures/vcr_cassettes/pull_request_does_exist_with_failure_status.yml
|
242
242
|
- spec/fixtures/vcr_cassettes/pull_request_does_exist_with_success_status.yml
|
243
|
+
- spec/fixtures/vcr_cassettes/pull_request_does_exist_with_success_status_and_then_add_label.yml
|
243
244
|
- spec/fixtures/vcr_cassettes/pull_request_does_not_exist.yml
|
244
245
|
- spec/gitx/cli/base_command_spec.rb
|
245
246
|
- spec/gitx/cli/buildtag_command_spec.rb
|
@@ -266,7 +267,7 @@ homepage: ''
|
|
266
267
|
licenses:
|
267
268
|
- MIT
|
268
269
|
metadata: {}
|
269
|
-
post_install_message:
|
270
|
+
post_install_message:
|
270
271
|
rdoc_options: []
|
271
272
|
require_paths:
|
272
273
|
- lib
|
@@ -274,21 +275,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
274
275
|
requirements:
|
275
276
|
- - ">="
|
276
277
|
- !ruby/object:Gem::Version
|
277
|
-
version:
|
278
|
+
version: 2.6.7
|
278
279
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
279
280
|
requirements:
|
280
|
-
- - "
|
281
|
+
- - ">="
|
281
282
|
- !ruby/object:Gem::Version
|
282
|
-
version:
|
283
|
+
version: '0'
|
283
284
|
requirements: []
|
284
|
-
|
285
|
-
|
286
|
-
signing_key:
|
285
|
+
rubygems_version: 3.1.6
|
286
|
+
signing_key:
|
287
287
|
specification_version: 4
|
288
288
|
summary: Utility scripts for Git to increase productivity for common operations
|
289
289
|
test_files:
|
290
290
|
- spec/fixtures/vcr_cassettes/pull_request_does_exist_with_failure_status.yml
|
291
291
|
- spec/fixtures/vcr_cassettes/pull_request_does_exist_with_success_status.yml
|
292
|
+
- spec/fixtures/vcr_cassettes/pull_request_does_exist_with_success_status_and_then_add_label.yml
|
292
293
|
- spec/fixtures/vcr_cassettes/pull_request_does_not_exist.yml
|
293
294
|
- spec/gitx/cli/base_command_spec.rb
|
294
295
|
- spec/gitx/cli/buildtag_command_spec.rb
|