txgh 7.0.0.beta5 → 7.0.3.beta2
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/lib/txgh/config/providers/git_provider.rb +2 -6
- data/lib/txgh/config/providers/github_provider.rb +2 -0
- data/lib/txgh/config/providers/gitlab_provider.rb +2 -0
- data/lib/txgh/git_status.rb +1 -1
- data/lib/txgh/gitlab_api.rb +6 -3
- data/lib/txgh/utils.rb +4 -0
- data/lib/txgh/version.rb +1 -1
- data/spec/gitlab_api_spec.rb +94 -23
- data/spec/utils_spec.rb +14 -0
- data/txgh.gemspec +2 -2
- 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: 356a71757db31207963bef7598d934086f30b1c4bbd347da30ba5e277072a9f9
|
|
4
|
+
data.tar.gz: 87feb8d32705415c42aae8fe8de0f83695370d7f443947f522a8d4df2f6d3eb1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 11cbcac93622eaf5140c7ad6c26b50e1f303eb5a2ed46be747e73d39fa7dd1ae7f33d4bed08fb960d261c889a6f4004f9d1caa78d0dd73596183c8b63e5e98e4
|
|
7
|
+
data.tar.gz: 19e7d66ecbebdeb9e41d94f240ec6f145888a759b4a9a637c098301c421026f29d2f2ced141204eea90cc2daa8416deab14f7cbcba4b70a265a28b9631fa4a91
|
|
@@ -33,14 +33,10 @@ module Txgh
|
|
|
33
33
|
|
|
34
34
|
private
|
|
35
35
|
|
|
36
|
-
def download
|
|
37
|
-
raise NotImplementedError
|
|
38
|
-
end
|
|
39
|
-
|
|
40
36
|
def ref
|
|
41
37
|
unless @ref
|
|
42
38
|
raise TxghError,
|
|
43
|
-
|
|
39
|
+
'TX_CONFIG specified a file from git but did not provide a ref.'
|
|
44
40
|
end
|
|
45
41
|
|
|
46
42
|
@ref
|
|
@@ -49,7 +45,7 @@ module Txgh
|
|
|
49
45
|
def git_repo
|
|
50
46
|
unless @git_repo
|
|
51
47
|
raise TxghError,
|
|
52
|
-
|
|
48
|
+
'TX_CONFIG specified a file from git but did not provide a repo.'
|
|
53
49
|
end
|
|
54
50
|
|
|
55
51
|
@git_repo
|
data/lib/txgh/git_status.rb
CHANGED
data/lib/txgh/gitlab_api.rb
CHANGED
|
@@ -16,7 +16,7 @@ module Txgh
|
|
|
16
16
|
content_list.each do |file_params|
|
|
17
17
|
path = file_params.fetch(:path)
|
|
18
18
|
new_contents = file_params.fetch(:contents)
|
|
19
|
-
branch = Utils.
|
|
19
|
+
branch = Utils.url_safe_relative_branch(branch)
|
|
20
20
|
|
|
21
21
|
file_sha = file_params.fetch(:sha) do
|
|
22
22
|
begin
|
|
@@ -42,13 +42,13 @@ module Txgh
|
|
|
42
42
|
# mock github response
|
|
43
43
|
{
|
|
44
44
|
object: {
|
|
45
|
-
sha: client.commit(repo_name,
|
|
45
|
+
sha: client.commit(repo_name, Utils.url_safe_relative_branch(ref)).short_id
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
end
|
|
49
49
|
|
|
50
50
|
def download(path, branch)
|
|
51
|
-
file = client.get_file(repo_name, path,
|
|
51
|
+
file = client.get_file(repo_name, path, Utils.url_safe_relative_branch(branch))
|
|
52
52
|
|
|
53
53
|
# mock github response
|
|
54
54
|
{
|
|
@@ -59,6 +59,9 @@ module Txgh
|
|
|
59
59
|
|
|
60
60
|
def create_status(sha, state, options = {})
|
|
61
61
|
client.update_commit_status(repo_name, sha, state, options)
|
|
62
|
+
rescue ::Gitlab::Error::BadRequest => error
|
|
63
|
+
# Gitlab pipeline may have several jobs and txgh should not override commit statuses set by others
|
|
64
|
+
raise error unless error.message.include?('Cannot transition status')
|
|
62
65
|
end
|
|
63
66
|
end
|
|
64
67
|
end
|
data/lib/txgh/utils.rb
CHANGED
data/lib/txgh/version.rb
CHANGED
data/spec/gitlab_api_spec.rb
CHANGED
|
@@ -5,7 +5,6 @@ describe Txgh::GitlabApi do
|
|
|
5
5
|
let(:client) { double(:client) }
|
|
6
6
|
let(:api) { described_class.create_from_client(client, repo) }
|
|
7
7
|
let(:repo) { 'my_org/my_repo' }
|
|
8
|
-
let(:branch) { 'master' }
|
|
9
8
|
let(:sha) { 'abc123' }
|
|
10
9
|
let(:gitlab_response) do
|
|
11
10
|
OpenStruct.new({
|
|
@@ -18,23 +17,19 @@ describe Txgh::GitlabApi do
|
|
|
18
17
|
})
|
|
19
18
|
end
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
let(:path) { 'path/to/file.txt' }
|
|
23
|
-
let(:old_contents) { 'abc123' }
|
|
24
|
-
let(:old_sha) { Txgh::Utils.git_hash_blob(old_contents) }
|
|
25
|
-
|
|
20
|
+
shared_examples 'an update_contents flow' do
|
|
26
21
|
it 'updates the given file contents' do
|
|
27
22
|
new_contents = 'def456'
|
|
28
23
|
|
|
29
24
|
expect(client).to(
|
|
30
25
|
receive(:get_file)
|
|
31
|
-
.with(repo, path,
|
|
26
|
+
.with(repo, path, url_safe_branch)
|
|
32
27
|
.and_return(double(blob_id: old_sha))
|
|
33
28
|
)
|
|
34
29
|
|
|
35
30
|
expect(client).to(
|
|
36
31
|
receive(:edit_file)
|
|
37
|
-
.with(repo, path,
|
|
32
|
+
.with(repo, path, url_safe_branch, new_contents, 'message')
|
|
38
33
|
)
|
|
39
34
|
|
|
40
35
|
api.update_contents(branch, [{ path: path, contents: new_contents }], 'message')
|
|
@@ -43,7 +38,7 @@ describe Txgh::GitlabApi do
|
|
|
43
38
|
it "doesn't update the file contents if the file hasn't changed" do
|
|
44
39
|
expect(client).to(
|
|
45
40
|
receive(:get_file)
|
|
46
|
-
.with(repo, path,
|
|
41
|
+
.with(repo, path, url_safe_branch)
|
|
47
42
|
.and_return(double(blob_id: old_sha))
|
|
48
43
|
)
|
|
49
44
|
|
|
@@ -58,27 +53,18 @@ describe Txgh::GitlabApi do
|
|
|
58
53
|
|
|
59
54
|
expect(client).to(
|
|
60
55
|
receive(:edit_file)
|
|
61
|
-
.with(repo, path,
|
|
56
|
+
.with(repo, path, url_safe_branch, new_contents, 'message')
|
|
62
57
|
)
|
|
63
58
|
|
|
64
59
|
api.update_contents(branch, [{ path: path, contents: new_contents }], 'message')
|
|
65
60
|
end
|
|
66
61
|
end
|
|
67
62
|
|
|
68
|
-
|
|
69
|
-
it 'retrieves the given ref (i.e. branch) using the client' do
|
|
70
|
-
expect(client).to receive(:commit).with(repo, sha) { double(short_id: '0') }
|
|
71
|
-
api.get_ref(sha)
|
|
72
|
-
end
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
describe '#download' do
|
|
76
|
-
let(:path) { 'path/to/file.xyz' }
|
|
77
|
-
|
|
63
|
+
shared_examples 'a download flow' do
|
|
78
64
|
it 'downloads the file from the given branch' do
|
|
79
65
|
expect(client).to(
|
|
80
66
|
receive(:get_file)
|
|
81
|
-
.with(repo, path,
|
|
67
|
+
.with(repo, path, url_safe_branch)
|
|
82
68
|
.and_return(double(content: 'content', encoding: 'utf-8'))
|
|
83
69
|
)
|
|
84
70
|
|
|
@@ -90,7 +76,7 @@ describe Txgh::GitlabApi do
|
|
|
90
76
|
|
|
91
77
|
expect(client).to(
|
|
92
78
|
receive(:get_file)
|
|
93
|
-
.with(repo, path,
|
|
79
|
+
.with(repo, path, url_safe_branch)
|
|
94
80
|
.and_return(double(content: content, encoding: 'utf-16'))
|
|
95
81
|
)
|
|
96
82
|
|
|
@@ -102,11 +88,96 @@ describe Txgh::GitlabApi do
|
|
|
102
88
|
it 'automatically decodes base64-encoded content' do
|
|
103
89
|
expect(client).to(
|
|
104
90
|
receive(:get_file)
|
|
105
|
-
.with(repo, path,
|
|
91
|
+
.with(repo, path, url_safe_branch)
|
|
106
92
|
.and_return(double(content: Base64.encode64('content'), encoding: 'base64'))
|
|
107
93
|
)
|
|
108
94
|
|
|
109
95
|
expect(api.download(path, branch)).to eq({ content: 'content', path: path })
|
|
110
96
|
end
|
|
111
97
|
end
|
|
98
|
+
|
|
99
|
+
describe '#update_contents' do
|
|
100
|
+
let(:path) { 'path/to/file.txt' }
|
|
101
|
+
let(:old_contents) { 'abc123' }
|
|
102
|
+
let(:old_sha) { Txgh::Utils.git_hash_blob(old_contents) }
|
|
103
|
+
|
|
104
|
+
context 'when master branch' do
|
|
105
|
+
let(:branch) { 'master' }
|
|
106
|
+
let(:url_safe_branch) { 'master' }
|
|
107
|
+
|
|
108
|
+
it_behaves_like 'an update_contents flow'
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
context 'when feature branch' do
|
|
112
|
+
let(:branch) { 'feature/foo-ticket' }
|
|
113
|
+
let(:url_safe_branch) { 'feature%2Ffoo-ticket' }
|
|
114
|
+
|
|
115
|
+
it_behaves_like 'an update_contents flow'
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
describe '#get_ref' do
|
|
120
|
+
context 'when ref is a sha' do
|
|
121
|
+
it 'retrieves the given ref (i.e. branch) using the client' do
|
|
122
|
+
expect(client).to receive(:commit).with(repo, sha) { double(short_id: '0') }
|
|
123
|
+
api.get_ref(sha)
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
context 'when ref is a master branch' do
|
|
128
|
+
let(:sha) { 'master' }
|
|
129
|
+
|
|
130
|
+
it 'retrieves the given ref (i.e. branch) using the client' do
|
|
131
|
+
expect(client).to receive(:commit).with(repo, sha) { double(short_id: '0') }
|
|
132
|
+
api.get_ref(sha)
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
context 'when ref is a feature branch' do
|
|
137
|
+
let(:sha) { 'feature/foo-ticket' }
|
|
138
|
+
let(:url_safe_sha) { 'feature%2Ffoo-ticket' }
|
|
139
|
+
|
|
140
|
+
it 'retrieves the given ref (i.e. branch) using the client' do
|
|
141
|
+
expect(client).to receive(:commit).with(repo, url_safe_sha) { double(short_id: '0') }
|
|
142
|
+
api.get_ref(sha)
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
describe '#download' do
|
|
148
|
+
let(:path) { 'path/to/file.xyz' }
|
|
149
|
+
|
|
150
|
+
context 'when master branch' do
|
|
151
|
+
let(:branch) { 'master' }
|
|
152
|
+
let(:url_safe_branch) { 'master' }
|
|
153
|
+
|
|
154
|
+
it_behaves_like 'a download flow'
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
context 'when feature branch' do
|
|
158
|
+
let(:branch) { 'feature/foo-ticket' }
|
|
159
|
+
let(:url_safe_branch) { 'feature%2Ffoo-ticket' }
|
|
160
|
+
|
|
161
|
+
it_behaves_like 'a download flow'
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
describe '#create_status' do
|
|
166
|
+
let(:gitlab_response) do
|
|
167
|
+
OpenStruct.new({
|
|
168
|
+
code: 404,
|
|
169
|
+
request: double(base_uri: 'https://gitlab.com/api/v3', path: '/foo'),
|
|
170
|
+
parsed_response: Gitlab::ObjectifiedHash.new(
|
|
171
|
+
error_description: 'Cannot transition status via :enqueue from :pending',
|
|
172
|
+
error: 'also will not be displayed'
|
|
173
|
+
)
|
|
174
|
+
})
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
it 'does not raise error if cannot change status' do
|
|
178
|
+
expect(client).to receive(:update_commit_status).and_raise(::Gitlab::Error::BadRequest.new(gitlab_response))
|
|
179
|
+
|
|
180
|
+
api.create_status('sha', 'state', {})
|
|
181
|
+
end
|
|
182
|
+
end
|
|
112
183
|
end
|
data/spec/utils_spec.rb
CHANGED
|
@@ -47,6 +47,20 @@ describe Txgh::Utils do
|
|
|
47
47
|
end
|
|
48
48
|
end
|
|
49
49
|
|
|
50
|
+
describe '.url_safe_relative_branch' do
|
|
51
|
+
it 'removes tags/ if present' do
|
|
52
|
+
expect(described_class.url_safe_relative_branch('tags/feature/foobar')).to eq('feature%2Ffoobar')
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
it 'removes heads/ if present' do
|
|
56
|
+
expect(described_class.url_safe_relative_branch('heads/foobar')).to eq('foobar')
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it 'does nothing if no prefix can be removed' do
|
|
60
|
+
expect(described_class.url_safe_relative_branch('feature/foo-ticket')).to eq('feature%2Ffoo-ticket')
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
50
64
|
describe '.is_tag?' do
|
|
51
65
|
it 'returns true if given a tag' do
|
|
52
66
|
expect(described_class.is_tag?('tags/foo')).to eq(true)
|
data/txgh.gemspec
CHANGED
|
@@ -13,10 +13,10 @@ Gem::Specification.new do |s|
|
|
|
13
13
|
s.platform = Gem::Platform::RUBY
|
|
14
14
|
|
|
15
15
|
s.add_dependency 'abroad', '~> 4.6'
|
|
16
|
-
s.add_dependency 'celluloid'
|
|
16
|
+
s.add_dependency 'celluloid', '~> 0.18.0'
|
|
17
17
|
s.add_dependency 'faraday', '0.17.3'
|
|
18
18
|
s.add_dependency 'faraday_middleware', '0.14.0'
|
|
19
|
-
s.add_dependency 'json', '~>
|
|
19
|
+
s.add_dependency 'json', '~> 2.3'
|
|
20
20
|
s.add_dependency 'octokit', '~> 4.2'
|
|
21
21
|
s.add_dependency 'gitlab', '~> 4.14'
|
|
22
22
|
s.add_dependency 'parseconfig', '~> 1.0'
|
metadata
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: txgh
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 7.0.
|
|
4
|
+
version: 7.0.3.beta2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Matthew Jackowski
|
|
8
8
|
- Cameron Dutro
|
|
9
|
-
autorequire:
|
|
9
|
+
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2020-
|
|
12
|
+
date: 2020-12-08 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: abroad
|
|
@@ -29,16 +29,16 @@ dependencies:
|
|
|
29
29
|
name: celluloid
|
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
|
31
31
|
requirements:
|
|
32
|
-
- - "
|
|
32
|
+
- - "~>"
|
|
33
33
|
- !ruby/object:Gem::Version
|
|
34
|
-
version:
|
|
34
|
+
version: 0.18.0
|
|
35
35
|
type: :runtime
|
|
36
36
|
prerelease: false
|
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
|
38
38
|
requirements:
|
|
39
|
-
- - "
|
|
39
|
+
- - "~>"
|
|
40
40
|
- !ruby/object:Gem::Version
|
|
41
|
-
version:
|
|
41
|
+
version: 0.18.0
|
|
42
42
|
- !ruby/object:Gem::Dependency
|
|
43
43
|
name: faraday
|
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -73,14 +73,14 @@ dependencies:
|
|
|
73
73
|
requirements:
|
|
74
74
|
- - "~>"
|
|
75
75
|
- !ruby/object:Gem::Version
|
|
76
|
-
version: '
|
|
76
|
+
version: '2.3'
|
|
77
77
|
type: :runtime
|
|
78
78
|
prerelease: false
|
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
|
80
80
|
requirements:
|
|
81
81
|
- - "~>"
|
|
82
82
|
- !ruby/object:Gem::Version
|
|
83
|
-
version: '
|
|
83
|
+
version: '2.3'
|
|
84
84
|
- !ruby/object:Gem::Dependency
|
|
85
85
|
name: octokit
|
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -213,7 +213,7 @@ files:
|
|
|
213
213
|
homepage: https://github.com/lumoslabs/txgh
|
|
214
214
|
licenses: []
|
|
215
215
|
metadata: {}
|
|
216
|
-
post_install_message:
|
|
216
|
+
post_install_message:
|
|
217
217
|
rdoc_options: []
|
|
218
218
|
require_paths:
|
|
219
219
|
- lib
|
|
@@ -228,8 +228,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
228
228
|
- !ruby/object:Gem::Version
|
|
229
229
|
version: 1.3.1
|
|
230
230
|
requirements: []
|
|
231
|
-
|
|
232
|
-
|
|
231
|
+
rubyforge_project:
|
|
232
|
+
rubygems_version: 2.7.6
|
|
233
|
+
signing_key:
|
|
233
234
|
specification_version: 4
|
|
234
235
|
summary: A library for syncing translation resources between Github and Transifex.
|
|
235
236
|
test_files: []
|