inch_ci-worker 0.3.0.rc9 → 0.3.0.rc10
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/bin/inch_ci-worker +7 -0
- data/lib/inch_ci/worker/build.rb +1 -1
- data/lib/inch_ci/worker/build_json/task.rb +88 -0
- data/lib/inch_ci/worker/build_json.rb +8 -0
- data/lib/inch_ci/worker/list_tags/task.rb +1 -1
- data/lib/inch_ci/worker/list_tags.rb +1 -1
- data/lib/inch_ci/worker/version.rb +1 -1
- data/lib/inch_ci/worker.rb +1 -0
- data/test/fixtures/elixir/inch_ex.json +1 -0
- data/test/integration/build_json_test.rb +19 -0
- metadata +7 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f72a4bd2a458223d6c2faa1b7ac7ba798e7e6831
|
4
|
+
data.tar.gz: d779cbb0aae588155af3c2020c50f79088b2f426
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9042d311469257e18c7b8cee67d7f8746aa9ecbca964622d77eed9e2a47ea77841ae485413e5191a4d2fa5d9d77b982695fd72fade73f86e76477f9b61faa5c3
|
7
|
+
data.tar.gz: 42b1b1afe829ec4de335830d6033704227f45db8a4c974f8b95c78f3ee948d605fc4f046fdbc7b37a90d1ff53416931d77874c9dac05d71faccb03821e06f279
|
data/bin/inch_ci-worker
CHANGED
@@ -21,6 +21,12 @@ class Command
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
class BuildJSON
|
25
|
+
def initialize(filename)
|
26
|
+
InchCI::Worker::BuildJSON::Task.new(filename)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
24
30
|
class ListTags
|
25
31
|
def initialize(url, branch_name)
|
26
32
|
InchCI::Worker::ListTags::Task.new(url, branch_name)
|
@@ -35,6 +41,7 @@ class Command
|
|
35
41
|
|
36
42
|
MAP = {
|
37
43
|
'build' => Build,
|
44
|
+
'build-from-json' => BuildJSON,
|
38
45
|
'list-tags' => ListTags,
|
39
46
|
'-v' => Version,
|
40
47
|
}
|
data/lib/inch_ci/worker/build.rb
CHANGED
@@ -0,0 +1,88 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'inch'
|
3
|
+
require 'inch/cli'
|
4
|
+
|
5
|
+
module InchCI
|
6
|
+
module Worker
|
7
|
+
module BuildJSON
|
8
|
+
class Task
|
9
|
+
attr_reader :json
|
10
|
+
|
11
|
+
def initialize(filename)
|
12
|
+
@json = JSON[File.read(filename)]
|
13
|
+
@work_dir = Dir.mktmpdir
|
14
|
+
|
15
|
+
started_at = Time.now
|
16
|
+
@result = build(filename)
|
17
|
+
@result.finished_at = Time.now
|
18
|
+
@result.started_at = started_at
|
19
|
+
puts Build::Report.new(@result).to_yaml
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
# @param info [#service_name,#user_name,#repo_name]
|
25
|
+
def badge_in_readme?(info)
|
26
|
+
Build::BadgeDetector.in_readme?(repo, info)
|
27
|
+
end
|
28
|
+
|
29
|
+
def build(filename)
|
30
|
+
language = json['language']
|
31
|
+
branch_name = json['branch_name'] || json['travis_branch']
|
32
|
+
revision = json['revision'] || json['travis_commit']
|
33
|
+
nwo = json['nwo'] || json['travis_repo_slug']
|
34
|
+
@url = json['git_repo_url']
|
35
|
+
latest_revision = true # TODO: make truthful
|
36
|
+
|
37
|
+
if retrieve_repo
|
38
|
+
if repo.change_branch(branch_name, true)
|
39
|
+
if repo.checkout_revision(revision)
|
40
|
+
if @codebase = parse_codebase(language, filename, repo.path)
|
41
|
+
result = Build::ResultSuccess.new(repo, branch_name, latest_revision, @codebase.objects)
|
42
|
+
result.badge_in_readme = badge_in_readme?(result)
|
43
|
+
result
|
44
|
+
else
|
45
|
+
Build::ResultParserFailed.new(repo, branch_name, latest_revision, nil)
|
46
|
+
end
|
47
|
+
else
|
48
|
+
Build::ResultCheckoutRevisionFailed.new(repo, branch_name, latest_revision, nil)
|
49
|
+
end
|
50
|
+
else
|
51
|
+
Build::ResultChangeBranchFailed.new(repo, branch_name, latest_revision, nil)
|
52
|
+
end
|
53
|
+
else
|
54
|
+
Build::ResultRetrieverFailed.new(repo, branch_name, latest_revision, nil)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def parse_codebase(language, filename, path)
|
59
|
+
begin
|
60
|
+
::Inch::Codebase.parse(path, to_config(language, filename, path))
|
61
|
+
rescue Exception => e
|
62
|
+
warn e.inspect
|
63
|
+
nil
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def repo
|
68
|
+
@repo ||= Repomen::Retriever.new(@url, :work_dir => @work_dir)
|
69
|
+
end
|
70
|
+
|
71
|
+
# @return [Repomen::Retriever,nil] either the retrieved repo or +nil+
|
72
|
+
def retrieve_repo
|
73
|
+
repo.retrieved? ? repo : nil
|
74
|
+
end
|
75
|
+
|
76
|
+
# Creates a Config::Codebase object and returns it
|
77
|
+
# (merges relevant values of a given +options+ object before).
|
78
|
+
#
|
79
|
+
# @return [Config::Codebase]
|
80
|
+
def to_config(language, filename, path)
|
81
|
+
config = ::Inch::Config.for(language, path).codebase
|
82
|
+
config.read_dump_file = filename
|
83
|
+
config
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
data/lib/inch_ci/worker.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
{"travis_branch":"master","travis_repo_slug":"rrrene/inch_ex","travis_commit":null,"travis_job_id":null,"travis":true,"git_repo_url":"git@github.com:rrrene/inch_ex.git","language":"elixir","args":[],"objects":[{"object_type":"ModuleObject","id":"InchEx","module":"Elixir.InchEx","moduledoc":null,"source":null,"type":null,"typespecs":[]},{"object_type":"ModuleObject","id":"InchEx.Config","module":"Elixir.InchEx.Config","moduledoc":null,"source":null,"type":null,"typespecs":[]},{"object_type":"ModuleObject","id":"InchEx.Docs.Formatter","module":"Elixir.InchEx.Docs.Formatter","moduledoc":"Provide JSON-formatted documentation\n","source":null,"type":null,"typespecs":[]},{"object_type":"ModuleObject","id":"InchEx.Docs.Retriever","module":"Elixir.InchEx.Docs.Retriever","moduledoc":"Functions to extract documentation information from modules.\n","source":null,"type":null,"typespecs":[]},{"object_type":"ModuleObject","id":"InchEx.Docs.Retriever.Error","module":"Elixir.InchEx.Docs.Retriever.Error","moduledoc":null,"source":null,"type":"exception","typespecs":[]},{"object_type":"ModuleObject","id":"InchEx.FunctionObject","module":"Elixir.InchEx.FunctionObject","moduledoc":null,"source":null,"type":null,"typespecs":[]},{"object_type":"ModuleObject","id":"InchEx.ModuleObject","module":"Elixir.InchEx.ModuleObject","moduledoc":null,"source":null,"type":null,"typespecs":[]},{"object_type":"ModuleObject","id":"InchEx.Reporter.Local","module":"Elixir.InchEx.Reporter.Local","moduledoc":null,"source":null,"type":null,"typespecs":[]},{"object_type":"ModuleObject","id":"InchEx.Reporter.Remote","module":"Elixir.InchEx.Reporter.Remote","moduledoc":null,"source":null,"type":null,"typespecs":[]},{"object_type":"ModuleObject","id":"InchEx.TypeObject","module":"Elixir.InchEx.TypeObject","moduledoc":null,"source":null,"type":null,"typespecs":[]},{"object_type":"ModuleObject","id":"Mix.Tasks.Inch","module":"Elixir.Mix.Tasks.Inch","moduledoc":null,"source":null,"type":null,"typespecs":[]},{"object_type":"ModuleObject","id":"Mix.Tasks.Inch.Report","module":"Elixir.Mix.Tasks.Inch.Report","moduledoc":null,"source":null,"type":null,"typespecs":[]},{"object_type":"FunctionObject","module_id":"InchEx","arity":4,"doc":false,"id":"generate_docs/4","name":"generate_docs","signature":[["project",[],null],["version",[],null],["args",[],null],["options",[],null]],"source":null,"specs":[],"type":"def"},{"object_type":"FunctionObject","module_id":"InchEx.Docs.Formatter","arity":3,"doc":"Generate JSON documentation for the given modules\n","id":"run/3","name":"run","signature":[["modules",[],null],["args",[],null],["config",[],null]],"source":null,"specs":[],"type":"def"},{"object_type":"FunctionObject","module_id":"InchEx.Docs.Retriever","arity":2,"doc":"Extract documentation from all modules in the specified directory\n","id":"docs_from_dir/2","name":"docs_from_dir","signature":[["dir",[],null],["config",[],null]],"source":null,"specs":[],"type":"def"},{"object_type":"FunctionObject","module_id":"InchEx.Docs.Retriever","arity":2,"doc":"Extract documentation from all modules in the specified list of files\n","id":"docs_from_files/2","name":"docs_from_files","signature":[["files",[],null],["config",[],null]],"source":null,"specs":[],"type":"def"},{"object_type":"FunctionObject","module_id":"InchEx.Docs.Retriever","arity":2,"doc":"Extract documentation from all modules in the list `modules`\n","id":"docs_from_modules/2","name":"docs_from_modules","signature":[["modules",[],null],["config",[],null]],"source":null,"specs":[],"type":"def"},{"object_type":"FunctionObject","module_id":"InchEx.Docs.Retriever.Error","arity":1,"doc":"Callback implementation of `Exception.exception/1`.","id":"exception/1","name":"exception","signature":[["args",[],null]],"source":null,"specs":[["::",{"line":19},[["exception",{"line":19},[[[".",{"line":19},["Elixir.Keyword","t"]],{"line":19},[]]]],[[".",{"line":19},["Elixir.Exception","t"]],{"line":19},[]]]]],"type":"def"},{"object_type":"FunctionObject","module_id":"InchEx.Docs.Retriever.Error","arity":1,"doc":"Callback implementation of `Exception.message/1`.","id":"message/1","name":"message","signature":[["exception",[],null]],"source":null,"specs":[["::",{"line":19},[["message",{"line":19},[[[".",{"line":19},["Elixir.Exception","t"]],{"line":19},[]]]],[[".",{"line":19},["Elixir.String","t"]],{"line":19},[]]]]],"type":"def"},{"object_type":"FunctionObject","module_id":"InchEx.Reporter.Local","arity":2,"doc":" Runs inch locally, if installed. If you want to force usage of a particular\n inch installation, set INCH_PATH environment variable:\n\n export INCH_PATH=/home/rrrene/projects/inch\n\n Otherwise, InchEx will take whatever `inch` command it finds. If it does\n not find any, it sends the data to the open API at inch-ci.org (or the\n endpoint defined in the INCH_CLI_API environment variable) to perform\n the analysis and reports the findings back.\n","id":"run/2","name":"run","signature":[["filename",[],null],["\\\\",[],[["args",[],null],[]]]],"source":null,"specs":[],"type":"def"},{"object_type":"FunctionObject","module_id":"InchEx.Reporter.Remote","arity":2,"doc":" Runs inch remotely, if already invented.\n","id":"run/2","name":"run","signature":[["filename",[],null],["",[],"Elixir"]],"source":null,"specs":[],"type":"def"},{"object_type":"FunctionObject","module_id":"Mix.Tasks.Inch","arity":4,"doc":false,"id":"run/4","name":"run","signature":[["args",[],null],["\\\\",[],[["config",[],null],[[".",{"line":10},["Elixir.Mix.Project","config"]],{"line":10},[]]]],["\\\\",[],[["generator",[],null],[[".",[],["erlang","make_fun"]],{"line":10},["Elixir.InchEx","generate_docs",4]]]],["\\\\",[],[["reporter",[],null],"Elixir.InchEx.Reporter.Local"]]],"source":null,"specs":[],"type":"def"},{"object_type":"FunctionObject","module_id":"Mix.Tasks.Inch.Report","arity":4,"doc":false,"id":"run/4","name":"run","signature":[["",[],"Elixir"],["\\\\",[],[["config",[],null],[[".",{"line":8},["Elixir.Mix.Project","config"]],{"line":8},[]]]],["\\\\",[],[["generator",[],null],[[".",[],["erlang","make_fun"]],{"line":8},["Elixir.InchEx","generate_docs",4]]]],["\\\\",[],[["reporter",[],null],"Elixir.InchEx.Reporter.Remote"]]],"source":null,"specs":[],"type":"def"}]}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
|
2
|
+
|
3
|
+
describe ::InchCI::Worker::BuildJSON do
|
4
|
+
let(:described_class) { ::InchCI::Worker::BuildJSON::Task }
|
5
|
+
let(:filename) { File.expand_path(File.dirname(__FILE__) + '/../fixtures/elixir/inch_ex.json') }
|
6
|
+
|
7
|
+
#
|
8
|
+
# Good scenarios
|
9
|
+
#
|
10
|
+
|
11
|
+
it 'should retrieve the repo' do
|
12
|
+
out, err = capture_io do
|
13
|
+
@task = described_class.new(filename)
|
14
|
+
end
|
15
|
+
refute out.empty?
|
16
|
+
assert_match /status: success/, out
|
17
|
+
assert err.empty?
|
18
|
+
end
|
19
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inch_ci-worker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.0.
|
4
|
+
version: 0.3.0.rc10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- René Föhring
|
@@ -117,11 +117,15 @@ files:
|
|
117
117
|
- lib/inch_ci/worker/build/report.rb
|
118
118
|
- lib/inch_ci/worker/build/result.rb
|
119
119
|
- lib/inch_ci/worker/build/task.rb
|
120
|
+
- lib/inch_ci/worker/build_json.rb
|
121
|
+
- lib/inch_ci/worker/build_json/task.rb
|
120
122
|
- lib/inch_ci/worker/list_tags.rb
|
121
123
|
- lib/inch_ci/worker/list_tags/report.rb
|
122
124
|
- lib/inch_ci/worker/list_tags/task.rb
|
123
125
|
- lib/inch_ci/worker/version.rb
|
126
|
+
- test/fixtures/elixir/inch_ex.json
|
124
127
|
- test/integration/badge_detector_test.rb
|
128
|
+
- test/integration/build_json_test.rb
|
125
129
|
- test/integration/build_test.rb
|
126
130
|
- test/integration/inch_version_test.rb
|
127
131
|
- test/test_helper.rb
|
@@ -151,7 +155,9 @@ signing_key:
|
|
151
155
|
specification_version: 4
|
152
156
|
summary: Worker for the Inch CI project
|
153
157
|
test_files:
|
158
|
+
- test/fixtures/elixir/inch_ex.json
|
154
159
|
- test/integration/badge_detector_test.rb
|
160
|
+
- test/integration/build_json_test.rb
|
155
161
|
- test/integration/build_test.rb
|
156
162
|
- test/integration/inch_version_test.rb
|
157
163
|
- test/test_helper.rb
|