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 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
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,13 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.2
4
+ before_install: gem install bundler -v 1.10.5
5
+
6
+ script: 'bundle exec rake spec'
7
+
8
+ notifications:
9
+ email:
10
+ recipients:
11
+ - eturino@eturino.com
12
+ on_failure: change
13
+ on_success: never
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
+ [![Gem Version](https://badge.fury.io/rb/snap_ci_manual_trigger.svg)](http://badge.fury.io/rb/snap_ci_manual_trigger)
4
+ [![Build Status](https://travis-ci.org/artirix/snap_ci_manual_trigger.svg?branch=master)](https://travis-ci.org/artirix/snap_ci_manual_trigger)
5
+ [![Code Climate](https://codeclimate.com/github/artirix/snap_ci_manual_trigger.png)](https://codeclimate.com/github/artirix/snap_ci_manual_trigger)
6
+ [![Code Climate Coverage](https://codeclimate.com/github/artirix/snap_ci_manual_trigger/coverage.png)](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
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
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,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -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,2 @@
1
+ class SnapCiManualTrigger::InvalidCredentialsError < StandardError
2
+ end
@@ -0,0 +1,2 @@
1
+ class SnapCiManualTrigger::InvalidResourceError < StandardError
2
+ 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,3 @@
1
+ module SnapCiManualTrigger
2
+ VERSION = '0.1.0'
3
+ 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: