go_api_client 0.5.4 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|