txgh 6.0.6 → 6.1.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/lib/txgh.rb +0 -20
- data/lib/txgh/github_status.rb +57 -13
- data/lib/txgh/puller.rb +19 -19
- data/lib/txgh/pusher.rb +20 -7
- data/lib/txgh/resource_committer.rb +11 -19
- data/lib/txgh/resource_updater.rb +4 -12
- data/lib/txgh/version.rb +1 -1
- data/spec/github_status_spec.rb +13 -4
- data/spec/resource_committer_spec.rb +1 -1
- data/spec/resource_updater_spec.rb +1 -1
- data/spec/txgh_spec.rb +0 -26
- data/txgh.gemspec +1 -0
- metadata +16 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b8ae06a79685c5a616fd334f7c4148b54377b840
|
|
4
|
+
data.tar.gz: f10e42acd8b9300f96182ebe1dc8786def18a224
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5f8cfe3fe65b5e0c637e115c4f45d52cb4fc184fe581fabd4259b60060578c430f476fe3b9f13d0f184d620f1fa9657057a35f24ab915349563b2af9ab7519ea
|
|
7
|
+
data.tar.gz: d09b4cd10c3ee78012536adafc821806e5e9d7f35f043635b4de3a5e26b77d5fe47f58f845dfd7f18fe9c1800e3dcc66df3b3d3dcf0708dae42bd7c02e2f7a13
|
data/lib/txgh.rb
CHANGED
|
@@ -45,18 +45,6 @@ module Txgh
|
|
|
45
45
|
@events ||= Events.new
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
-
def update_status_callback(options)
|
|
49
|
-
project = options.fetch(:project)
|
|
50
|
-
repo = options.fetch(:repo)
|
|
51
|
-
resource = options.fetch(:resource)
|
|
52
|
-
|
|
53
|
-
GithubStatus.new(project, repo, resource).update(options.fetch(:sha))
|
|
54
|
-
rescue Octokit::UnprocessableEntity
|
|
55
|
-
# raised because we've tried to create too many statuses for the commit
|
|
56
|
-
rescue Txgh::TransifexNotFoundError
|
|
57
|
-
# raised if transifex resource can't be found
|
|
58
|
-
end
|
|
59
|
-
|
|
60
48
|
def env
|
|
61
49
|
ENV.fetch('TXGH_ENV', DEFAULT_ENV)
|
|
62
50
|
end
|
|
@@ -70,12 +58,4 @@ module Txgh
|
|
|
70
58
|
# default set of base config providers
|
|
71
59
|
key_manager.register_provider(providers::FileProvider, YAML)
|
|
72
60
|
key_manager.register_provider(providers::RawProvider, YAML)
|
|
73
|
-
|
|
74
|
-
events.subscribe('transifex.resource.updated') do |options|
|
|
75
|
-
update_status_callback(options)
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
events.subscribe('github.resource.committed') do |options|
|
|
79
|
-
update_status_callback(options)
|
|
80
|
-
end
|
|
81
61
|
end
|
data/lib/txgh/github_status.rb
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'celluloid/current'
|
|
2
|
+
|
|
1
3
|
module Txgh
|
|
2
4
|
class GithubStatus
|
|
3
5
|
class State
|
|
@@ -15,19 +17,29 @@ module Txgh
|
|
|
15
17
|
end
|
|
16
18
|
|
|
17
19
|
ALL_COMPLETE_DESCRIPTION = "Translations complete!"
|
|
18
|
-
TARGET_URL_TEMPLATE = "https://www.transifex.com/%{organization}/%{project_slug}
|
|
20
|
+
TARGET_URL_TEMPLATE = "https://www.transifex.com/%{organization}/%{project_slug}/content"
|
|
19
21
|
DESCRIPTION_TEMPLATE = "%{complete}/%{total} translations complete."
|
|
20
22
|
CONTEXT = 'continuous-localization/txgh'
|
|
21
23
|
|
|
22
|
-
|
|
24
|
+
class << self
|
|
25
|
+
def update(project, repo, branch)
|
|
26
|
+
new(project, repo, branch).update
|
|
27
|
+
end
|
|
28
|
+
end
|
|
23
29
|
|
|
24
|
-
|
|
30
|
+
attr_reader :project, :repo, :branch
|
|
31
|
+
|
|
32
|
+
def initialize(project, repo, branch)
|
|
25
33
|
@project = project
|
|
26
34
|
@repo = repo
|
|
27
|
-
@
|
|
35
|
+
@branch = branch
|
|
28
36
|
end
|
|
29
37
|
|
|
30
|
-
def update
|
|
38
|
+
def update
|
|
39
|
+
return if tx_resources.empty?
|
|
40
|
+
|
|
41
|
+
sha = repo.api.get_ref(branch)[:object][:sha]
|
|
42
|
+
|
|
31
43
|
repo.api.create_status(
|
|
32
44
|
sha, state, {
|
|
33
45
|
context: context, target_url: target_url, description: description
|
|
@@ -42,10 +54,10 @@ module Txgh
|
|
|
42
54
|
end
|
|
43
55
|
|
|
44
56
|
def target_url
|
|
57
|
+
# assume all resources are from the same project
|
|
45
58
|
TARGET_URL_TEMPLATE % {
|
|
46
59
|
organization: project.organization,
|
|
47
|
-
project_slug:
|
|
48
|
-
resource_slug: tx_resource.resource_slug
|
|
60
|
+
project_slug: tx_resources.first.project_slug
|
|
49
61
|
}
|
|
50
62
|
end
|
|
51
63
|
|
|
@@ -66,22 +78,54 @@ module Txgh
|
|
|
66
78
|
end
|
|
67
79
|
|
|
68
80
|
def all_complete?
|
|
69
|
-
stats.all? do |
|
|
70
|
-
|
|
81
|
+
stats.all? do |resource_stats|
|
|
82
|
+
resource_stats.all? do |locale, details|
|
|
83
|
+
details['completed'] == '100%'
|
|
84
|
+
end
|
|
71
85
|
end
|
|
72
86
|
end
|
|
73
87
|
|
|
74
88
|
def stat_totals
|
|
75
89
|
@stat_totals ||= { complete: 0, total: 0 }.tap do |counts|
|
|
76
|
-
stats.
|
|
77
|
-
|
|
78
|
-
|
|
90
|
+
stats.each do |resource_stats|
|
|
91
|
+
resource_stats.each_pair do |locale, details|
|
|
92
|
+
counts[:total] += details['translated_entities'] + details['untranslated_entities']
|
|
93
|
+
counts[:complete] += details['translated_entities']
|
|
94
|
+
end
|
|
79
95
|
end
|
|
80
96
|
end
|
|
81
97
|
end
|
|
82
98
|
|
|
83
99
|
def stats
|
|
84
|
-
@stats ||=
|
|
100
|
+
@stats ||= tx_resources.map do |tx_resource|
|
|
101
|
+
Celluloid::Future.new { project.api.get_stats(*tx_resource.slugs) }
|
|
102
|
+
end.map(&:value)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
def tx_resources
|
|
106
|
+
@tx_resources ||=
|
|
107
|
+
tx_config.resources.each_with_object([]) do |tx_resource, ret|
|
|
108
|
+
if repo.process_all_branches?
|
|
109
|
+
tx_resource = Txgh::TxBranchResource.new(tx_resource, branch)
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
next unless existing_slugs.include?(tx_resource.resource_slug)
|
|
113
|
+
ret << tx_resource
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def existing_slugs
|
|
118
|
+
@existing_slugs ||= existing_resources.map do |resource|
|
|
119
|
+
resource['slug']
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
def existing_resources
|
|
124
|
+
@existing_resources ||= project.api.get_resources(project.name)
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def tx_config
|
|
128
|
+
@tx_config ||= Txgh::Config::TxManager.tx_config(project, repo, branch)
|
|
85
129
|
end
|
|
86
130
|
end
|
|
87
131
|
end
|
data/lib/txgh/puller.rb
CHANGED
|
@@ -9,23 +9,35 @@ module Txgh
|
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
def pull
|
|
12
|
-
|
|
12
|
+
existing_resources = project.api.get_resources(project.name)
|
|
13
|
+
slugs = existing_resources.map { |resource| resource['slug'] }
|
|
14
|
+
|
|
15
|
+
resources = tx_config.resources.each_with_object([]) do |tx_resource, ret|
|
|
13
16
|
if repo.process_all_branches?
|
|
14
17
|
tx_resource = Txgh::TxBranchResource.new(tx_resource, branch)
|
|
15
18
|
end
|
|
16
19
|
|
|
17
|
-
|
|
20
|
+
next unless slugs.include?(tx_resource.resource_slug)
|
|
21
|
+
ret << tx_resource
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
pull_resources(resources, &block)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def pull_resources(tx_resources, languages = nil)
|
|
28
|
+
tx_resources.each do |tx_resource|
|
|
29
|
+
pull_resource(tx_resource, languages)
|
|
18
30
|
end
|
|
19
31
|
end
|
|
20
32
|
|
|
21
|
-
def pull_resource(tx_resource)
|
|
22
|
-
|
|
23
|
-
committer.commit_resource(tx_resource, branch,
|
|
33
|
+
def pull_resource(tx_resource, languages = nil)
|
|
34
|
+
(languages || project.languages).each do |language|
|
|
35
|
+
committer.commit_resource(tx_resource, branch, language)
|
|
24
36
|
end
|
|
25
37
|
end
|
|
26
38
|
|
|
27
|
-
def pull_slug(resource_slug)
|
|
28
|
-
pull_resource(tx_config.resource(resource_slug, branch))
|
|
39
|
+
def pull_slug(resource_slug, languages = nil)
|
|
40
|
+
pull_resource(tx_config.resource(resource_slug, branch), languages)
|
|
29
41
|
end
|
|
30
42
|
|
|
31
43
|
private
|
|
@@ -34,18 +46,6 @@ module Txgh
|
|
|
34
46
|
@committer ||= Txgh::ResourceCommitter.new(project, repo)
|
|
35
47
|
end
|
|
36
48
|
|
|
37
|
-
def each_language
|
|
38
|
-
return to_enum(__method__) unless block_given?
|
|
39
|
-
|
|
40
|
-
languages.each do |language|
|
|
41
|
-
language_code = language['language_code']
|
|
42
|
-
|
|
43
|
-
if project.supported_language?(language_code)
|
|
44
|
-
yield language_code
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
|
|
49
49
|
def languages
|
|
50
50
|
@languages ||= project.api.get_languages(project.name)
|
|
51
51
|
end
|
data/lib/txgh/pusher.rb
CHANGED
|
@@ -8,22 +8,35 @@ module Txgh
|
|
|
8
8
|
@branch = branch
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
def push
|
|
12
|
-
|
|
11
|
+
def push(&block)
|
|
12
|
+
existing_resources = project.api.get_resources(project.name)
|
|
13
|
+
slugs = existing_resources.map { |resource| resource['slug'] }
|
|
14
|
+
|
|
15
|
+
resources = tx_config.resources.each_with_object([]) do |tx_resource, ret|
|
|
13
16
|
if repo.process_all_branches?
|
|
14
17
|
tx_resource = Txgh::TxBranchResource.new(tx_resource, branch)
|
|
15
18
|
end
|
|
16
19
|
|
|
17
|
-
|
|
20
|
+
next unless slugs.include?(tx_resource.resource_slug)
|
|
21
|
+
ret << tx_resource
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
push_resources(resources, &block)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def push_resources(tx_resources, &block)
|
|
28
|
+
tx_resources.each do |tx_resource|
|
|
29
|
+
categories = block_given? ? yield(tx_resource) : {}
|
|
30
|
+
push_resource(tx_resource, categories)
|
|
18
31
|
end
|
|
19
32
|
end
|
|
20
33
|
|
|
21
|
-
def push_resource(tx_resource)
|
|
22
|
-
updater.update_resource(tx_resource)
|
|
34
|
+
def push_resource(tx_resource, categories = {})
|
|
35
|
+
updater.update_resource(tx_resource, categories)
|
|
23
36
|
end
|
|
24
37
|
|
|
25
|
-
def push_slug(resource_slug)
|
|
26
|
-
push_resource(tx_config.resource(resource_slug, branch))
|
|
38
|
+
def push_slug(resource_slug, categories = {})
|
|
39
|
+
push_resource(tx_config.resource(resource_slug, branch), categories)
|
|
27
40
|
end
|
|
28
41
|
|
|
29
42
|
private
|
|
@@ -12,35 +12,27 @@ module Txgh
|
|
|
12
12
|
|
|
13
13
|
def commit_resource(tx_resource, branch, language)
|
|
14
14
|
return if prevent_commit_on?(branch)
|
|
15
|
+
return if language == tx_resource.source_lang
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
message = commit_message_for(language, file_name)
|
|
17
|
+
file_name, translations = download(tx_resource, branch, language)
|
|
18
|
+
message = commit_message_for(language, file_name)
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
repo.api.update_contents(
|
|
22
|
-
branch, [{ path: file_name, contents: translations }], message
|
|
23
|
-
)
|
|
20
|
+
return unless translations
|
|
24
21
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
private
|
|
31
|
-
|
|
32
|
-
def fire_event_for(tx_resource, branch, language)
|
|
33
|
-
head = repo.api.get_ref(branch)
|
|
34
|
-
sha = head[:object][:sha]
|
|
22
|
+
repo.api.update_contents(
|
|
23
|
+
branch, [{ path: file_name, contents: translations }], message
|
|
24
|
+
)
|
|
35
25
|
|
|
36
26
|
Txgh.events.publish(
|
|
37
27
|
'github.resource.committed', {
|
|
38
|
-
project: project, repo: repo, resource: tx_resource,
|
|
39
|
-
language: language
|
|
28
|
+
project: project, repo: repo, resource: tx_resource,
|
|
29
|
+
language: language, branch: branch
|
|
40
30
|
}
|
|
41
31
|
)
|
|
42
32
|
end
|
|
43
33
|
|
|
34
|
+
private
|
|
35
|
+
|
|
44
36
|
def download(tx_resource, branch, language)
|
|
45
37
|
downloader = ResourceDownloader.new(
|
|
46
38
|
project, repo, branch, {
|
|
@@ -24,24 +24,16 @@ module Txgh
|
|
|
24
24
|
upload_whole(tx_resource, file, categories)
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
fire_event_for(tx_resource, branch)
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
private
|
|
31
|
-
|
|
32
|
-
def fire_event_for(tx_resource, branch)
|
|
33
|
-
ref = repo.api.get_ref(branch)
|
|
34
|
-
|
|
35
27
|
Txgh.events.publish(
|
|
36
28
|
'transifex.resource.updated', {
|
|
37
|
-
project: project,
|
|
38
|
-
|
|
39
|
-
resource: tx_resource,
|
|
40
|
-
sha: ref[:object][:sha]
|
|
29
|
+
project: project, repo: repo, resource: tx_resource,
|
|
30
|
+
branch: tx_resource.branch
|
|
41
31
|
}
|
|
42
32
|
)
|
|
43
33
|
end
|
|
44
34
|
|
|
35
|
+
private
|
|
36
|
+
|
|
45
37
|
def upload_whole(tx_resource, file, categories)
|
|
46
38
|
if repo.process_all_branches?
|
|
47
39
|
upload_by_branch(tx_resource, file[:content], categories)
|
data/lib/txgh/version.rb
CHANGED
data/spec/github_status_spec.rb
CHANGED
|
@@ -7,8 +7,9 @@ describe GithubStatus do
|
|
|
7
7
|
include StandardTxghSetup
|
|
8
8
|
|
|
9
9
|
describe '#update' do
|
|
10
|
-
let(:status) { GithubStatus.new(transifex_project, github_repo,
|
|
10
|
+
let(:status) { GithubStatus.new(transifex_project, github_repo, branch) }
|
|
11
11
|
let(:resource) { tx_config.resource(resource_slug) }
|
|
12
|
+
let(:branch) { 'heads/master' }
|
|
12
13
|
let(:sha) { 'abc123shashasha' }
|
|
13
14
|
|
|
14
15
|
let(:stats) do
|
|
@@ -22,6 +23,14 @@ describe GithubStatus do
|
|
|
22
23
|
|
|
23
24
|
before(:each) do
|
|
24
25
|
allow(transifex_api).to receive(:get_stats).and_return(stats)
|
|
26
|
+
|
|
27
|
+
allow(transifex_api).to receive(:get_resources).and_return(
|
|
28
|
+
[{ 'slug' => resource.resource_slug }]
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
allow(github_api).to receive(:get_ref).and_return(
|
|
32
|
+
object: { sha: sha }
|
|
33
|
+
)
|
|
25
34
|
end
|
|
26
35
|
|
|
27
36
|
context 'with all resources at 100%' do
|
|
@@ -32,11 +41,11 @@ describe GithubStatus do
|
|
|
32
41
|
expect(options[:description]).to eq('Translations complete!')
|
|
33
42
|
expect(options[:context]).to eq('continuous-localization/txgh')
|
|
34
43
|
expect(options[:target_url]).to eq(
|
|
35
|
-
"https://www.transifex.com/#{organization}/#{project_name}
|
|
44
|
+
"https://www.transifex.com/#{organization}/#{project_name}/content"
|
|
36
45
|
)
|
|
37
46
|
end
|
|
38
47
|
|
|
39
|
-
status.update
|
|
48
|
+
status.update
|
|
40
49
|
end
|
|
41
50
|
end
|
|
42
51
|
|
|
@@ -60,7 +69,7 @@ describe GithubStatus do
|
|
|
60
69
|
expect(options[:description]).to eq('15/20 translations complete.')
|
|
61
70
|
end
|
|
62
71
|
|
|
63
|
-
status.update
|
|
72
|
+
status.update
|
|
64
73
|
end
|
|
65
74
|
end
|
|
66
75
|
end
|
|
@@ -52,7 +52,7 @@ describe ResourceCommitter do
|
|
|
52
52
|
options = event[:options]
|
|
53
53
|
expect(options[:project].name).to eq(project_name)
|
|
54
54
|
expect(options[:repo].name).to eq(repo_name)
|
|
55
|
-
expect(options[:
|
|
55
|
+
expect(options[:branch]).to eq(branch)
|
|
56
56
|
expect(options[:resource].original_resource_slug).to eq(resource_slug)
|
|
57
57
|
expect(options[:language]).to eq(language)
|
|
58
58
|
end
|
|
@@ -67,7 +67,7 @@ describe ResourceUpdater do
|
|
|
67
67
|
options = event[:options]
|
|
68
68
|
expect(options[:project].name).to eq(project_name)
|
|
69
69
|
expect(options[:repo].name).to eq(repo_name)
|
|
70
|
-
expect(options[:
|
|
70
|
+
expect(options[:branch]).to eq(ref)
|
|
71
71
|
expect(options[:resource].original_resource_slug).to eq(resource_slug)
|
|
72
72
|
end
|
|
73
73
|
|
data/spec/txgh_spec.rb
CHANGED
|
@@ -30,30 +30,4 @@ describe Txgh do
|
|
|
30
30
|
expect(instance.provider.scheme).to eq('raw')
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
|
-
|
|
34
|
-
describe '#update_status_callback' do
|
|
35
|
-
it 'handles github errors' do
|
|
36
|
-
expect_any_instance_of(Txgh::GithubStatus).to(
|
|
37
|
-
receive(:update).and_raise(Octokit::UnprocessableEntity)
|
|
38
|
-
)
|
|
39
|
-
|
|
40
|
-
expect do
|
|
41
|
-
Txgh.update_status_callback(
|
|
42
|
-
project: nil, repo: nil, resource: nil, sha: nil
|
|
43
|
-
)
|
|
44
|
-
end.to_not raise_error
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
it 'handles transifex errors' do
|
|
48
|
-
expect_any_instance_of(Txgh::GithubStatus).to(
|
|
49
|
-
receive(:update).and_raise(Txgh::TransifexNotFoundError)
|
|
50
|
-
)
|
|
51
|
-
|
|
52
|
-
expect do
|
|
53
|
-
Txgh.update_status_callback(
|
|
54
|
-
project: nil, repo: nil, resource: nil, sha: nil
|
|
55
|
-
)
|
|
56
|
-
end.to_not raise_error
|
|
57
|
-
end
|
|
58
|
-
end
|
|
59
33
|
end
|
data/txgh.gemspec
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: txgh
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 6.0
|
|
4
|
+
version: 6.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Matthew Jackowski
|
|
@@ -9,7 +9,7 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2016-10-
|
|
12
|
+
date: 2016-10-04 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: abroad
|
|
@@ -25,6 +25,20 @@ dependencies:
|
|
|
25
25
|
- - "~>"
|
|
26
26
|
- !ruby/object:Gem::Version
|
|
27
27
|
version: '4.1'
|
|
28
|
+
- !ruby/object:Gem::Dependency
|
|
29
|
+
name: celluloid
|
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
|
31
|
+
requirements:
|
|
32
|
+
- - ">="
|
|
33
|
+
- !ruby/object:Gem::Version
|
|
34
|
+
version: '0'
|
|
35
|
+
type: :runtime
|
|
36
|
+
prerelease: false
|
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
38
|
+
requirements:
|
|
39
|
+
- - ">="
|
|
40
|
+
- !ruby/object:Gem::Version
|
|
41
|
+
version: '0'
|
|
28
42
|
- !ruby/object:Gem::Dependency
|
|
29
43
|
name: faraday
|
|
30
44
|
requirement: !ruby/object:Gem::Requirement
|