snap_ci_manual_trigger 0.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 +7 -0
- data/.gitignore +9 -0
- data/.rspec +2 -0
- data/.travis.yml +13 -0
- data/Gemfile +15 -0
- data/README.md +66 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/lib/snap_ci_manual_trigger.rb +26 -0
- data/lib/snap_ci_manual_trigger/invalid_credentials_error.rb +2 -0
- data/lib/snap_ci_manual_trigger/invalid_resource_error.rb +2 -0
- data/lib/snap_ci_manual_trigger/service.rb +97 -0
- data/lib/snap_ci_manual_trigger/version.rb +3 -0
- data/snap_ci_manual_trigger.gemspec +28 -0
- metadata +170 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: c5aa2cc6e0dd62b83a69a55d927fb364e505a361
|
4
|
+
data.tar.gz: 3400261f1f6f75c8dd6bd2d518d19bcd0a64967c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5776d5deb58c6144d6467806daa2067a2b58f485af11e07f1aa70703778aa7479f3ab034705b9a6ac19b54bee9ae738fe14e373df19d7d7322ba44fc4dc5f6c5
|
7
|
+
data.tar.gz: d3632c1ba6173bbee18a5ba5eaa18c33dc6bc8967e9373ced989005a6131d4f0bf5b95dd87669c85c1a307510e2df28ed9d8a6d2e94be99bceb09f4b0e1ce772
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
# Specify your gem's dependencies in snap_ci_manual_trigger.gemspec
|
4
|
+
gemspec
|
5
|
+
|
6
|
+
|
7
|
+
group :development, :test do
|
8
|
+
gem 'pry'
|
9
|
+
gem 'pry-nav'
|
10
|
+
gem 'pry-stack_explorer'
|
11
|
+
gem 'pry-doc'
|
12
|
+
gem 'pry-rescue'
|
13
|
+
end
|
14
|
+
|
15
|
+
gem 'codeclimate-test-reporter', group: :test, require: nil
|
data/README.md
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
# SnapCiManualTrigger
|
2
|
+
|
3
|
+
[](http://badge.fury.io/rb/snap_ci_manual_trigger)
|
4
|
+
[](https://travis-ci.org/artirix/snap_ci_manual_trigger)
|
5
|
+
[](https://codeclimate.com/github/artirix/snap_ci_manual_trigger)
|
6
|
+
[](https://codeclimate.com/github/artirix/snap_ci_manual_trigger)
|
7
|
+
|
8
|
+
`SnapCiManualTrigger` will connect to Snap-CI's API and trigger a manual stage on
|
9
|
+
a given pipeline or create a new pipeline.
|
10
|
+
|
11
|
+
|
12
|
+
It uses Snap-CI's API, with user and APIKEY, so it acts in a users name.
|
13
|
+
|
14
|
+
|
15
|
+
## Installation
|
16
|
+
|
17
|
+
Add this line to your application's Gemfile:
|
18
|
+
|
19
|
+
```ruby
|
20
|
+
gem 'snap_ci_manual_trigger'
|
21
|
+
```
|
22
|
+
|
23
|
+
And then execute:
|
24
|
+
|
25
|
+
$ bundle
|
26
|
+
|
27
|
+
Or install it yourself as:
|
28
|
+
|
29
|
+
$ gem install snap_ci_manual_trigger
|
30
|
+
|
31
|
+
## Usage
|
32
|
+
|
33
|
+
The Service object can be used programmatically.
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
service = SnapCiManualTrigger.for user: snap_ci_user,
|
37
|
+
api_key: snap_ci_api_key,
|
38
|
+
owner: owner,
|
39
|
+
repository: repository,
|
40
|
+
branch_name: branch_name
|
41
|
+
|
42
|
+
# creates a new pipeline, and returns the ID
|
43
|
+
pipeline_id = service.new_pipeline
|
44
|
+
|
45
|
+
# triggers the stage "Deploy" in the new pipeline
|
46
|
+
running_pipeline_url = service.manual_stage stage: 'Deploy', pipeline_id: pipeline_id
|
47
|
+
|
48
|
+
|
49
|
+
# trigger the stage "Deploy" in a new pipeline in one command
|
50
|
+
running_pipeline_url = service.manual_stage_on_new_pipeline 'Deploy'
|
51
|
+
```
|
52
|
+
|
53
|
+
### Generate tasks
|
54
|
+
|
55
|
+
TODO: generate rake tasks for quick setup of project/repo/branch, using ENV variables for Auth and overrides.
|
56
|
+
|
57
|
+
## Development
|
58
|
+
|
59
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake rspec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
60
|
+
|
61
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
62
|
+
|
63
|
+
## Contributing
|
64
|
+
|
65
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/artirix/snap_ci_manual_trigger.
|
66
|
+
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "snap_ci_manual_trigger"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'active_support/all'
|
2
|
+
require 'faraday'
|
3
|
+
require 'oj'
|
4
|
+
require 'oj_mimic_json'
|
5
|
+
|
6
|
+
require 'snap_ci_manual_trigger/version'
|
7
|
+
require 'snap_ci_manual_trigger/invalid_credentials_error'
|
8
|
+
require 'snap_ci_manual_trigger/invalid_resource_error'
|
9
|
+
require 'snap_ci_manual_trigger/service'
|
10
|
+
|
11
|
+
module SnapCiManualTrigger
|
12
|
+
DEFAULT_BRANCH_NAME = 'master'.freeze
|
13
|
+
|
14
|
+
def self.for(user:, api_key:, owner:, repository:, branch_name: DEFAULT_BRANCH_NAME, connection: nil)
|
15
|
+
raise InvalidCredentialsError, 'it needs both user and api_key' unless user.present? && api_key.present?
|
16
|
+
raise InvalidResourceError, 'it needs an owner' unless owner.present?
|
17
|
+
raise InvalidResourceError, 'it needs an repository' unless repository.present?
|
18
|
+
|
19
|
+
Service.new user: user,
|
20
|
+
api_key: api_key,
|
21
|
+
owner: owner,
|
22
|
+
repository: repository,
|
23
|
+
branch_name: branch_name,
|
24
|
+
connection: connection
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
module SnapCiManualTrigger
|
2
|
+
class Service
|
3
|
+
|
4
|
+
CONNECTION_URL = 'https://api.snap-ci.com'
|
5
|
+
|
6
|
+
HEADERS = {
|
7
|
+
'Accept' => 'application/vnd.snap-ci.com.v1+json',
|
8
|
+
'Content-type' => 'application/json',
|
9
|
+
}
|
10
|
+
|
11
|
+
attr_reader :user, :api_key, :owner, :repository, :branch_name, :connection
|
12
|
+
|
13
|
+
def initialize(user:, api_key:, owner:, repository:, branch_name:, connection: nil)
|
14
|
+
@user = user
|
15
|
+
@api_key = api_key
|
16
|
+
@owner = owner
|
17
|
+
@repository = repository
|
18
|
+
@branch_name = branch_name
|
19
|
+
@connection = connection || build_connection
|
20
|
+
end
|
21
|
+
|
22
|
+
def new_pipeline
|
23
|
+
response = call_new_pipeline
|
24
|
+
check_unauthorized(response)
|
25
|
+
check_not_found(response)
|
26
|
+
|
27
|
+
parsed_response = parse_response response
|
28
|
+
parsed_response['counter']
|
29
|
+
end
|
30
|
+
|
31
|
+
def manual_stage(pipeline:, stage:)
|
32
|
+
response = call_manual_stage pipeline, stage
|
33
|
+
check_unauthorized(response)
|
34
|
+
check_not_found(response, pipeline, stage)
|
35
|
+
|
36
|
+
parsed_response = parse_response response
|
37
|
+
parsed_response['_embedded']['_links']['self']['href']
|
38
|
+
end
|
39
|
+
|
40
|
+
def manual_stage_on_new_pipeline(stage)
|
41
|
+
pipeline_id = new_pipeline
|
42
|
+
manual_stage pipeline: pipeline_id, stage: stage
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def check_unauthorized(response)
|
48
|
+
if response.status == 401
|
49
|
+
raise SnapCiManualTrigger::InvalidCredentialsError, 'User - API Key pair invalid, request not authorized'
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def check_not_found(response, pipeline = nil, stage = nil)
|
54
|
+
if response.status == 404
|
55
|
+
resource_data = {
|
56
|
+
owner: owner,
|
57
|
+
repository: repository,
|
58
|
+
branch_name: branch_name
|
59
|
+
}
|
60
|
+
|
61
|
+
resource_data[:pipeline] = pipeline if pipeline.present?
|
62
|
+
resource_data[:stage] = stage if stage.present?
|
63
|
+
|
64
|
+
raise SnapCiManualTrigger::InvalidResourceError, "resource not found: #{resource_data.inspect}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def parse_response(response)
|
69
|
+
Oj.load response.body
|
70
|
+
end
|
71
|
+
|
72
|
+
def build_connection
|
73
|
+
Faraday.new(url: CONNECTION_URL, request: { params_encoder: Faraday::FlatParamsEncoder }) do |faraday|
|
74
|
+
faraday.basic_auth(user, api_key)
|
75
|
+
faraday.request :url_encoded # form-encode POST params
|
76
|
+
# faraday.response :logger # log requests to STDOUT
|
77
|
+
faraday.adapter Faraday.default_adapter
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def call_new_pipeline
|
82
|
+
connection.post new_pipeline_path, nil, HEADERS
|
83
|
+
end
|
84
|
+
|
85
|
+
def call_manual_stage(pipeline, stage)
|
86
|
+
connection.post manual_stage_path(pipeline, stage), nil, HEADERS
|
87
|
+
end
|
88
|
+
|
89
|
+
def new_pipeline_path
|
90
|
+
"/project/#{owner}/#{repository}/branch/#{branch_name}/trigger"
|
91
|
+
end
|
92
|
+
|
93
|
+
def manual_stage_path(pipeline, stage)
|
94
|
+
"/project/#{owner}/#{repository}/branch/#{branch_name}/trigger/#{pipeline}/#{stage}"
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'snap_ci_manual_trigger/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'snap_ci_manual_trigger'
|
8
|
+
spec.version = SnapCiManualTrigger::VERSION
|
9
|
+
spec.authors = ['Eduardo Turiño']
|
10
|
+
spec.email = ['eturino@eturino.com']
|
11
|
+
|
12
|
+
spec.summary = %q{Helps triggering specific steps on Snap-CI using API}
|
13
|
+
spec.homepage = 'https://github.com/artirix/snap_ci_manual_trigger'
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
16
|
+
spec.bindir = 'exe'
|
17
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
|
+
spec.require_paths = ['lib']
|
19
|
+
|
20
|
+
spec.add_dependency 'activesupport'
|
21
|
+
spec.add_dependency 'faraday'
|
22
|
+
spec.add_dependency 'oj'
|
23
|
+
spec.add_dependency 'oj_mimic_json'
|
24
|
+
spec.add_development_dependency 'bundler', '~> 1.10'
|
25
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
26
|
+
spec.add_development_dependency 'rspec'
|
27
|
+
spec.add_development_dependency 'stub_env'
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,170 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: snap_ci_manual_trigger
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Eduardo Turiño
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-08-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: faraday
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: oj
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: oj_mimic_json
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: bundler
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.10'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.10'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '10.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '10.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rspec
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: stub_env
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description:
|
126
|
+
email:
|
127
|
+
- eturino@eturino.com
|
128
|
+
executables: []
|
129
|
+
extensions: []
|
130
|
+
extra_rdoc_files: []
|
131
|
+
files:
|
132
|
+
- ".gitignore"
|
133
|
+
- ".rspec"
|
134
|
+
- ".travis.yml"
|
135
|
+
- Gemfile
|
136
|
+
- README.md
|
137
|
+
- Rakefile
|
138
|
+
- bin/console
|
139
|
+
- bin/setup
|
140
|
+
- lib/snap_ci_manual_trigger.rb
|
141
|
+
- lib/snap_ci_manual_trigger/invalid_credentials_error.rb
|
142
|
+
- lib/snap_ci_manual_trigger/invalid_resource_error.rb
|
143
|
+
- lib/snap_ci_manual_trigger/service.rb
|
144
|
+
- lib/snap_ci_manual_trigger/version.rb
|
145
|
+
- snap_ci_manual_trigger.gemspec
|
146
|
+
homepage: https://github.com/artirix/snap_ci_manual_trigger
|
147
|
+
licenses: []
|
148
|
+
metadata: {}
|
149
|
+
post_install_message:
|
150
|
+
rdoc_options: []
|
151
|
+
require_paths:
|
152
|
+
- lib
|
153
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
|
+
requirements:
|
160
|
+
- - ">="
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '0'
|
163
|
+
requirements: []
|
164
|
+
rubyforge_project:
|
165
|
+
rubygems_version: 2.2.3
|
166
|
+
signing_key:
|
167
|
+
specification_version: 4
|
168
|
+
summary: Helps triggering specific steps on Snap-CI using API
|
169
|
+
test_files: []
|
170
|
+
has_rdoc:
|