go_api_client 0.5.4 → 1.0.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 +7 -0
- data/.gitignore +4 -0
- data/.travis.yml +26 -0
- data/README.md +86 -0
- data/go_api_client.gemspec +11 -11
- data/lib/go_api_client/api/abstract_api.rb +12 -0
- data/lib/go_api_client/api/cctray.rb +53 -0
- data/lib/go_api_client/api/config.rb +60 -0
- data/lib/go_api_client/api/feed.rb +39 -0
- data/lib/go_api_client/api/job.rb +34 -0
- data/lib/go_api_client/api/pipeline.rb +87 -0
- data/lib/go_api_client/api/properties.rb +43 -0
- data/lib/go_api_client/api/stage.rb +45 -0
- data/lib/go_api_client/attribute_helper.rb +9 -0
- data/lib/go_api_client/client.rb +20 -0
- data/lib/go_api_client/domain/artifact.rb +16 -0
- data/lib/go_api_client/domain/author.rb +22 -0
- data/lib/go_api_client/domain/changeset.rb +13 -0
- data/lib/go_api_client/domain/config/job.rb +15 -0
- data/lib/go_api_client/domain/config/pipeline.rb +15 -0
- data/lib/go_api_client/domain/config/stage.rb +15 -0
- data/lib/go_api_client/domain/entry.rb +13 -0
- data/lib/go_api_client/domain/feed.rb +13 -0
- data/lib/go_api_client/domain/internal_cache.rb +28 -0
- data/lib/go_api_client/domain/job.rb +17 -0
- data/lib/go_api_client/domain/material.rb +14 -0
- data/lib/go_api_client/domain/pipeline.rb +27 -0
- data/lib/go_api_client/domain/project.rb +14 -0
- data/lib/go_api_client/domain/scheduled_job.rb +12 -0
- data/lib/go_api_client/domain/stage.rb +28 -0
- data/lib/go_api_client/domain/user.rb +30 -0
- data/lib/go_api_client/http_fetcher.rb +73 -48
- data/lib/go_api_client/parsers/artifact_parser.rb +17 -0
- data/lib/go_api_client/parsers/author_parser.rb +24 -0
- data/lib/go_api_client/parsers/changeset.rb +26 -0
- data/lib/go_api_client/parsers/config/job_parser.rb +48 -0
- data/lib/go_api_client/parsers/config/pipeline_parser.rb +42 -0
- data/lib/go_api_client/parsers/config/stage_parser.rb +33 -0
- data/lib/go_api_client/parsers/entry_parser.rb +27 -0
- data/lib/go_api_client/parsers/feed_parser.rb +27 -0
- data/lib/go_api_client/parsers/job_parser.rb +47 -0
- data/lib/go_api_client/parsers/material_parser.rb +29 -0
- data/lib/go_api_client/parsers/parser_helper.rb +11 -0
- data/lib/go_api_client/parsers/pipeline_parser.rb +30 -0
- data/lib/go_api_client/parsers/project_parser.rb +26 -0
- data/lib/go_api_client/parsers/scheduled_job_parser.rb +28 -0
- data/lib/go_api_client/parsers/stage_parser.rb +31 -0
- data/lib/go_api_client/parsers/user_parser.rb +12 -0
- data/lib/go_api_client/version.rb +4 -4
- data/lib/go_api_client.rb +56 -110
- data/test/go_api_client/artifact_test.rb +8 -8
- data/test/go_api_client/author_test.rb +27 -0
- data/test/go_api_client/building_test.rb +21 -19
- data/test/go_api_client/{atom/entry_test.rb → entry_test.rb} +8 -8
- data/test/go_api_client/job_test.rb +15 -14
- data/test/go_api_client/pipeline_test.rb +24 -27
- data/test/go_api_client/stage_test.rb +21 -74
- data/test/go_api_client/user_test.rb +15 -20
- metadata +108 -78
- data/.init.sh +0 -8
- data/.rbenv-gemsets +0 -1
- data/.ruby-version +0 -1
- data/.rvmrc +0 -1
- data/.yardopts +0 -6
- data/Gemfile.lock +0 -32
- data/README.textile +0 -64
- data/lib/go_api_client/artifact.rb +0 -27
- data/lib/go_api_client/atom/author.rb +0 -42
- data/lib/go_api_client/atom/entry.rb +0 -34
- data/lib/go_api_client/atom/feed.rb +0 -40
- data/lib/go_api_client/atom/feed_page.rb +0 -49
- data/lib/go_api_client/atom.rb +0 -4
- data/lib/go_api_client/commit.rb +0 -30
- data/lib/go_api_client/helpers/simple_attribute_support.rb +0 -11
- data/lib/go_api_client/helpers.rb +0 -1
- data/lib/go_api_client/job.rb +0 -68
- data/lib/go_api_client/pipeline.rb +0 -48
- data/lib/go_api_client/stage.rb +0 -57
- data/lib/go_api_client/user.rb +0 -36
- data/test/go_api_client/atom/author_test.rb +0 -27
- data/test/go_api_client/atom/feed_page_test.rb +0 -41
- data/test/go_api_client/atom/feed_test.rb +0 -39
- data/test/go_api_client/commit_test.rb +0 -38
- data/test/schedule_test.rb +0 -12
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'csv'
|
2
|
+
|
3
|
+
module GoApiClient
|
4
|
+
module Api
|
5
|
+
class Properties < GoApiClient::Api::AbstractApi
|
6
|
+
|
7
|
+
def initialize(attributes = {})
|
8
|
+
super(attributes)
|
9
|
+
end
|
10
|
+
|
11
|
+
def properties(options = {})
|
12
|
+
options = ({:properties_uri => nil, :pipeline_name => nil, :pipeline_counter => nil, :stage_name => nil, :stage_counter => nil, :job_name => nil, :property_name => nil}).merge(options)
|
13
|
+
if options[:properties_uri]
|
14
|
+
uri = options[:properties_uri]
|
15
|
+
else
|
16
|
+
raise 'Insufficient arguments' unless options[:pipeline_name] && options[:pipeline_counter] && options[:stage_name] && options[:stage_counter] && options[:job_name]
|
17
|
+
uri = "#{@base_uri}/properties/#{options[:pipeline_name]}/#{options[:pipeline_counter]}/#{options[:stage_name]}/#{options[:stage_counter]}/#{options[:job_name]}" + (options[:property_name] ? "/#{options[:property_name]}" : '')
|
18
|
+
end
|
19
|
+
|
20
|
+
begin
|
21
|
+
body = @http_fetcher.get!(uri)
|
22
|
+
rescue GoApiClient::HttpFetcher::HttpError
|
23
|
+
# ignore, error message will be logged
|
24
|
+
end
|
25
|
+
|
26
|
+
body ? CSV.new(body, :headers => true).to_a.map { |row| row.to_hash } : []
|
27
|
+
end
|
28
|
+
|
29
|
+
def create_property(options = {})
|
30
|
+
options = ({:properties_uri => nil, :pipeline_name => nil, :pipeline_counter => nil, :stage_name => nil, :stage_counter => nil, :job_name => nil, :property_name => nil, :property_value => nil}).merge(options)
|
31
|
+
if options[:properties_uri]
|
32
|
+
uri = options[:properties_uri]
|
33
|
+
else
|
34
|
+
raise 'Insufficient arguments' unless options[:pipeline_name] && options[:pipeline_counter] && options[:stage_name] && options[:stage_counter] && options[:job_name] && options[:property_name] && options[:property_value]
|
35
|
+
uri = "#{@base_uri}/properties/#{options[:pipeline_name]}/#{options[:pipeline_counter]}/#{options[:stage_name]}/#{options[:stage_counter]}/#{options[:job_name]}/#{options[:property_name]}"
|
36
|
+
end
|
37
|
+
|
38
|
+
response_body = @http_fetcher.post!(uri, {:params => {:value => options[:property_value]}})
|
39
|
+
response_body == "Property '#{options[:property_name]}' created with value '#{options[:property_value]}'" ? true : false
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
|
3
|
+
module GoApiClient
|
4
|
+
module Api
|
5
|
+
class Stage < GoApiClient::Api::AbstractApi
|
6
|
+
|
7
|
+
def initialize(attributes = {})
|
8
|
+
attributes = ({:pipeline_cache => {}, :stage_cache => {}}).merge(attributes)
|
9
|
+
super(attributes)
|
10
|
+
end
|
11
|
+
|
12
|
+
def stage(options = {})
|
13
|
+
options = ({:stage_uri => nil, :stage_id => nil, :pipeline_name => nil, :pipeline_tag => nil, :stage_name => nil, :stage_counter => nil, :eager_parser => []}).merge(options)
|
14
|
+
if options[:stage_uri]
|
15
|
+
uri = options[:stage_uri]
|
16
|
+
elsif options[:stage_id]
|
17
|
+
uri = "#{@base_uri}/api/stages/#{options[:stage_id]}.xml"
|
18
|
+
else
|
19
|
+
raise 'Insufficient arguments' unless options[:pipeline_name] && options[:pipeline_tag] && options[:stage_name] && options[:stage_counter]
|
20
|
+
uri = "#{@base_uri}/pipelines/#{options[:pipeline_name]}/#{options[:pipeline_tag]}/#{options[:stage_name]}/#{options[:stage_counter]}.xml"
|
21
|
+
end
|
22
|
+
stage = GoApiClient::Parsers::Stage.parse(Nokogiri::XML(@http_fetcher.get!(uri)).root)
|
23
|
+
@stage_cache[GoApiClient::Domain::InternalCache.new(stage.self_uri, options)] ||= stage
|
24
|
+
if options[:eager_parser]
|
25
|
+
if options[:eager_parser].include?(:job)
|
26
|
+
job_api = GoApiClient::Api::Job.new({:base_uri => @base_uri, :http_fetcher => @http_fetcher})
|
27
|
+
stage.parsed_jobs = stage.jobs.collect do |job_uri|
|
28
|
+
job_api.job(options.merge({:job_uri => job_uri}))
|
29
|
+
end
|
30
|
+
end
|
31
|
+
if options[:eager_parser].include?(:pipeline)
|
32
|
+
pipeline_api = GoApiClient::Api::Pipeline.new({:base_uri => @base_uri, :http_fetcher => @http_fetcher, :pipeline_cache => @pipeline_cache, :stage_cache => @stage_cache})
|
33
|
+
pipeline = @pipeline_cache[GoApiClient::Domain::InternalCache.new(stage.pipeline_uri, options)] || pipeline_api.pipeline(options.merge({:pipeline_uri => stage.pipeline_uri}))
|
34
|
+
@pipeline_cache[GoApiClient::Domain::InternalCache.new(stage.pipeline_uri, options)] ||= pipeline
|
35
|
+
stage.parsed_pipeline = pipeline
|
36
|
+
end
|
37
|
+
end
|
38
|
+
stage
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
attr_accessor :pipeline_cache, :stage_cache
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module GoApiClient
|
2
|
+
class Client
|
3
|
+
def initialize(options={})
|
4
|
+
options = ({:uri => nil, :username => nil, :password => nil, :ssl_verify_mode => nil}).merge(options)
|
5
|
+
@http_fetcher = GoApiClient::HttpFetcher.new(options)
|
6
|
+
if options[:uri]
|
7
|
+
@base_uri = options[:uri].chomp('/')
|
8
|
+
else
|
9
|
+
options = ({:host => 'localhost', :port => 8153, :ssl => false}).merge(options)
|
10
|
+
@base_uri = "#{options[:ssl] ? 'https' : 'http'}://#{options[:host]}:#{options[:port]}/go"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def api(name, options={})
|
15
|
+
class_name = name.slice(0, 1).capitalize + name.slice(1..-1)
|
16
|
+
api_class = "#{self.class.to_s.split('::').first}::Api::#{class_name}".split('::').inject(Object) { |n, c| n.const_get c }
|
17
|
+
api_class.new({:base_uri => @base_uri, :http_fetcher => @http_fetcher}.merge(options))
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module GoApiClient
|
2
|
+
module Domain
|
3
|
+
class Artifact < GoApiClient::AttributeHelper
|
4
|
+
|
5
|
+
attr_accessor :base_uri, :src, :dest, :artifact_type
|
6
|
+
|
7
|
+
def initialize(attributes)
|
8
|
+
super(attributes)
|
9
|
+
end
|
10
|
+
|
11
|
+
def as_zip_file_url
|
12
|
+
"#{File.join(base_uri, src)}.zip"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module GoApiClient
|
2
|
+
module Domain
|
3
|
+
class Author < GoApiClient::AttributeHelper
|
4
|
+
attr_accessor :name, :email, :uri
|
5
|
+
|
6
|
+
def initialize(attributes={})
|
7
|
+
super(attributes)
|
8
|
+
end
|
9
|
+
|
10
|
+
def ==(other)
|
11
|
+
other && self.class.equal?(other.class) &&
|
12
|
+
name == other.name &&
|
13
|
+
email == other.email &&
|
14
|
+
uri == other.uri
|
15
|
+
end
|
16
|
+
|
17
|
+
def hash
|
18
|
+
self.class.hash ^ name.hash ^ email.hash ^ uri.hash
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module GoApiClient
|
2
|
+
module Domain
|
3
|
+
module Config
|
4
|
+
class Job < GoApiClient::AttributeHelper
|
5
|
+
|
6
|
+
attr_accessor :name
|
7
|
+
attr_accessor :parsed_tasks, :parsed_resources, :parsed_artifacts, :parsed_test_artifacts, :parsed_tabs
|
8
|
+
|
9
|
+
def initialize(attributes={})
|
10
|
+
super(attributes)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module GoApiClient
|
2
|
+
module Domain
|
3
|
+
module Config
|
4
|
+
class Pipeline < GoApiClient::AttributeHelper
|
5
|
+
|
6
|
+
attr_accessor :name, :label_template, :locked, :template, :timer
|
7
|
+
attr_accessor :parsed_params, :parsed_env_vars, :parsed_stages, :parsed_template
|
8
|
+
|
9
|
+
def initialize(attributes={})
|
10
|
+
super(attributes)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module GoApiClient
|
2
|
+
module Domain
|
3
|
+
module Config
|
4
|
+
class Stage < GoApiClient::AttributeHelper
|
5
|
+
|
6
|
+
attr_accessor :name, :fetch_materials, :approval, :clean_working_dir
|
7
|
+
attr_accessor :parsed_jobs, :parsed_env_vars
|
8
|
+
|
9
|
+
def initialize(attributes={})
|
10
|
+
super(attributes)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module GoApiClient
|
2
|
+
module Domain
|
3
|
+
class Entry < GoApiClient::AttributeHelper
|
4
|
+
|
5
|
+
attr_accessor :updated, :title, :id, :stage_uri, :pipeline_uri
|
6
|
+
attr_accessor :parsed_categories, :parsed_authors, :parsed_pipeline, :parsed_stage
|
7
|
+
|
8
|
+
def initialize(attributes={})
|
9
|
+
super(attributes)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
module GoApiClient
|
2
|
+
module Domain
|
3
|
+
class Feed < GoApiClient::AttributeHelper
|
4
|
+
|
5
|
+
attr_accessor :updated, :title, :id, :self_uri, :next_uri
|
6
|
+
attr_accessor :parsed_entries, :parsed_authors
|
7
|
+
|
8
|
+
def initialize(attributes={})
|
9
|
+
super(attributes)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module GoApiClient
|
2
|
+
module Domain
|
3
|
+
class InternalCache
|
4
|
+
attr_accessor :uri, :options
|
5
|
+
|
6
|
+
def initialize(uri, options = {})
|
7
|
+
@uri = uri
|
8
|
+
@options = options
|
9
|
+
end
|
10
|
+
|
11
|
+
def ==(other)
|
12
|
+
other && self.class.equal?(other.class) &&
|
13
|
+
@uri == other.uri &&
|
14
|
+
@options[:eager_parser] == other.options[:eager_parser]
|
15
|
+
end
|
16
|
+
|
17
|
+
def hash
|
18
|
+
@uri.hash ^ @options[:eager_parser].hash
|
19
|
+
end
|
20
|
+
|
21
|
+
def eql?(other)
|
22
|
+
other && self.class.equal?(other.class) &&
|
23
|
+
@uri.eql?(other.uri) &&
|
24
|
+
@options[:eager_parser].eql?(other.options[:eager_parser])
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module GoApiClient
|
2
|
+
module Domain
|
3
|
+
class Job < GoApiClient::AttributeHelper
|
4
|
+
|
5
|
+
attr_accessor :artifacts_uri, :console_log_url, :self_uri, :id, :name, :parsed_artifacts,
|
6
|
+
:duration, :result, :scheduled, :assigned, :preparing, :building, :completing, :completed
|
7
|
+
|
8
|
+
def initialize(attributes={})
|
9
|
+
super(attributes)
|
10
|
+
end
|
11
|
+
|
12
|
+
def console_log_url
|
13
|
+
@console_log_url ||= "#{artifacts_uri}/cruise-output/console.log"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module GoApiClient
|
2
|
+
module Domain
|
3
|
+
class Material < GoApiClient::AttributeHelper
|
4
|
+
|
5
|
+
attr_accessor :uri, :type, :pipeline_name, :stage_name, :branch, :url
|
6
|
+
attr_accessor :parsed_changesets
|
7
|
+
|
8
|
+
def initialize(attributes)
|
9
|
+
super(attributes)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module GoApiClient
|
2
|
+
module Domain
|
3
|
+
class Pipeline < GoApiClient::AttributeHelper
|
4
|
+
|
5
|
+
# TODO: Add materials
|
6
|
+
|
7
|
+
# Self attributes
|
8
|
+
attr_accessor :name, :counter, :label
|
9
|
+
# Tags
|
10
|
+
attr_accessor :id, :self_uri, :inserted_after_uri, :schedule_time, :stages, :approved_by
|
11
|
+
# Parsed object
|
12
|
+
attr_accessor :parsed_stages, :parsed_materials
|
13
|
+
|
14
|
+
def initialize(attributes={})
|
15
|
+
super(attributes)
|
16
|
+
end
|
17
|
+
|
18
|
+
def stages
|
19
|
+
@stages ||= []
|
20
|
+
end
|
21
|
+
|
22
|
+
def authors
|
23
|
+
@authors ||= stages.first.authors
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module GoApiClient
|
2
|
+
module Domain
|
3
|
+
class Project < GoApiClient::AttributeHelper
|
4
|
+
|
5
|
+
attr_accessor :name, :activity, :last_build_status, :last_build_label, :last_build_time, :web_uri
|
6
|
+
attr_accessor :parsed_messages, :parsed_pipeline_name, :parsed_stage_name, :parsed_job_name, :parsed_stage
|
7
|
+
|
8
|
+
def initialize(attributes)
|
9
|
+
super(attributes)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module GoApiClient
|
2
|
+
module Domain
|
3
|
+
class ScheduledJob < GoApiClient::AttributeHelper
|
4
|
+
|
5
|
+
attr_accessor :name, :id, :self_uri, :build_locator, :resources, :environment_variables, :environment
|
6
|
+
|
7
|
+
def initialize(attributes={})
|
8
|
+
super(attributes)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module GoApiClient
|
2
|
+
module Domain
|
3
|
+
class Stage < GoApiClient::AttributeHelper
|
4
|
+
|
5
|
+
# Self attributes
|
6
|
+
attr_accessor :name, :counter
|
7
|
+
# Tags
|
8
|
+
attr_accessor :id, :self_uri, :result, :state, :approved_by, :jobs, :updated
|
9
|
+
# Pipeline tag
|
10
|
+
attr_accessor :pipeline_name, :pipeline_counter, :pipeline_label, :pipeline_uri
|
11
|
+
# Parsed object
|
12
|
+
attr_accessor :parsed_pipeline, :parsed_jobs
|
13
|
+
|
14
|
+
def initialize(attributes={})
|
15
|
+
super(attributes)
|
16
|
+
end
|
17
|
+
|
18
|
+
def failed?
|
19
|
+
'Failed' == @result
|
20
|
+
end
|
21
|
+
|
22
|
+
def passed?
|
23
|
+
!failed?
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module GoApiClient
|
2
|
+
module Domain
|
3
|
+
class User
|
4
|
+
attr_accessor :name, :email
|
5
|
+
|
6
|
+
def initialize(name, email)
|
7
|
+
@name = name
|
8
|
+
@email = email
|
9
|
+
end
|
10
|
+
|
11
|
+
def ==(other)
|
12
|
+
other && self.class.equal?(other.class) &&
|
13
|
+
name == other.name &&
|
14
|
+
email == other.email
|
15
|
+
end
|
16
|
+
|
17
|
+
def hash
|
18
|
+
self.class.hash ^ name.hash ^ email.hash
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_s
|
22
|
+
"#{name} <#{email}>"
|
23
|
+
end
|
24
|
+
|
25
|
+
def inspect
|
26
|
+
"User(#{to_s})"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|