git-semaphore 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/git-semaphore +6 -0
- data/features/cassettes/cucumber_tags/vcr_api_rebuild_last_revision.yml +55 -0
- data/features/cassettes/cucumber_tags/vcr_api_status.yml +1 -1
- data/features/help_and_version.feature +15 -13
- data/features/semaphore_app_api.feature +7 -0
- data/features/step_definitions/vcr_semaphore_steps.rb +4 -0
- data/features/support/vcr.rb +1 -0
- data/lib/git-semaphore/api.rb +26 -22
- data/lib/git-semaphore/app.rb +5 -0
- data/lib/git-semaphore/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d7e775e83a005ec30c5625d2857223a42cb1186c
|
4
|
+
data.tar.gz: a5007fe61d02498243beb875dcc482c93f4b3dea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21e1cf278b62a570c112c69163866e90e1629a140b3f47e6ac4be25f0c7b4b3e57664f00b43a792be1279b17c0b4abe135a48818ddc809fbbe447ae8eee41871
|
7
|
+
data.tar.gz: ecf9201131e0e8e82709a830fa0e2835043e6a61511d15d8866c89d5dabc0bfc0b3a78f604b4cdd3c84d54cda821bffb9e35a06f98b35c7339098d682834bb38
|
data/bin/git-semaphore
CHANGED
@@ -18,6 +18,7 @@ options = Trollop::options do
|
|
18
18
|
opt :branches, 'List all semaphore.app branches for current project', :short => nil, :default => false
|
19
19
|
opt :status, 'List the semaphore.app status for the given branch', :short => nil, :default => false
|
20
20
|
opt :'commit-status', 'Check commit status', :default => false
|
21
|
+
opt :'rebuild-last-revision', 'Rebuild last revision', :default => false
|
21
22
|
|
22
23
|
opt :'working-dir', 'Print working dir', :short => 'w', :default => false
|
23
24
|
opt :'project-name', 'Print project name', :short => 'p', :default => false
|
@@ -42,6 +43,11 @@ if !app.validate
|
|
42
43
|
end
|
43
44
|
end
|
44
45
|
|
46
|
+
if options[:'rebuild-last-revision']
|
47
|
+
puts app.rebuild_last_revision
|
48
|
+
exit 0
|
49
|
+
end
|
50
|
+
|
45
51
|
if options[:'commit-status']
|
46
52
|
puts app.commit_status
|
47
53
|
exit 0
|
@@ -0,0 +1,55 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://semaphoreapp.com/api/v1/projects/649e584dc507ca4b73e1374d3125ef0b567a949c/89/build?auth_token=Yds3w6o26FLfJTnVK2y9
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: auth_token=Yds3w6o26FLfJTnVK2y9
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- '*/*'
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Content-Type:
|
22
|
+
- application/json; charset=utf-8
|
23
|
+
Transfer-Encoding:
|
24
|
+
- chunked
|
25
|
+
Connection:
|
26
|
+
- keep-alive
|
27
|
+
Status:
|
28
|
+
- '200'
|
29
|
+
X-Powered-By:
|
30
|
+
- Phusion Passenger (mod_rails/mod_rack) 3.0.14
|
31
|
+
Strict-Transport-Security:
|
32
|
+
- max-age=31536000
|
33
|
+
X-Ua-Compatible:
|
34
|
+
- IE=Edge,chrome=1
|
35
|
+
Cache-Control:
|
36
|
+
- no-cache
|
37
|
+
Set-Cookie:
|
38
|
+
- _semaphoreappdotcom_session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRkkiJTM4NGFhMzNmMzBlMWYwZWNjZGY1YTVmOTZmM2EwZGM5BjsAVA%3D%3D--221d375194d03282702a20d5dd5be5520e5eccca;
|
39
|
+
path=/; secure; HttpOnly
|
40
|
+
X-Request-Id:
|
41
|
+
- 7ca89a2918f9ed99308b0969f52d04b8
|
42
|
+
X-Runtime:
|
43
|
+
- '0.005673'
|
44
|
+
Date:
|
45
|
+
- Thu, 18 Dec 2014 09:38:06 GMT
|
46
|
+
X-Rack-Cache:
|
47
|
+
- invalidate, pass
|
48
|
+
Server:
|
49
|
+
- nginx/1.2.2 + Phusion Passenger 3.0.14 (mod_rails/mod_rack)
|
50
|
+
body:
|
51
|
+
encoding: UTF-8
|
52
|
+
string: ! '{"commits":[{"id":"dummy_commit","url":"https://github.com/company/dummy_project/commit/dummy_commit","author_name":"Dude","author_email":"dude@company.co.uk","message":"Spiky spike","timestamp":"2014-07-23T09:52:55Z"},{"id":"foobar","url":"https://github.com/company/dummy_project/commit/foobar","author_name":"Dude","author_email":"dude@company.co.uk","message":"Merge branch \"master\" into dumy-branch","timestamp":"2014-07-25T15:33:05Z"},{"id":"dummy_commit4","url":"https://github.com/company/dummy_project/commit/dummy_commit4","author_name":"Dude","author_email":"dude@company.co.uk","message":"Move letter-opener to production gem","timestamp":"2014-07-28T07:32:28Z"},{"id":"dummy_commit2","url":"https://github.com/company/dummy_project/commit/dummy_commit2","author_name":"Dude","author_email":"dude@company.co.uk","message":"Merge branch \"master\" into dumy-branch","timestamp":"2014-07-30T07:25:37Z"},{"id":"dummy_commit3","url":"https://github.com/company/dummy_project/commit/dummy_commit3","author_name":"Dude","author_email":"dude@company.co.uk","message":"Merge branch \"master\" into dumy-branch","timestamp":"2014-08-04T10:08:26Z"},{"id":"dummy_commit5","url":"https://github.com/company/dummy_project/commit/dummy_commit5","author_name":"Dude","author_email":"dude@company.co.uk","message":"Merge branch \"master\" into dumy-branch\n\nConflicts:\n\tGemfile","timestamp":"2014-12-18T09:05:53Z"}],"project_name":"dummy_project","branch_name":"dumy-branch","number":4,"result":null,"created_at":"2014-12-18T09:44:11Z","updated_at":"2014-12-18T09:44:11Z","started_at":null,"finished_at":null,"html_url":"https://semaphoreapp.com/company/dummy_project/branches/dumy-branch/builds/4","build_log_url":"https://semaphoreapp.com/api/v1/projects/dummy_project/313010/builds/4/log?auth_token=Yds3w6o26FLfJTnVK2y9","build_info_url":"https://semaphoreapp.com/api/v1/projects/dummy_project/313010/builds/4?auth_token=Yds3w6o26FLfJTnVK2y9"}'
|
53
|
+
http_version:
|
54
|
+
recorded_at: Thu, 18 Dec 2014 09:38:06 GMT
|
55
|
+
recorded_with: VCR 2.9.3
|
@@ -8,19 +8,21 @@ Feature: Help Me I've Got Versionitis
|
|
8
8
|
And the banner should include the version
|
9
9
|
And the banner should document that this app takes options
|
10
10
|
And the following options should be documented:
|
11
|
-
| --version, -v:
|
12
|
-
| --help, -h:
|
13
|
-
| --working-dir, -w:
|
14
|
-
| --project-name, -p:
|
15
|
-
| --branch-name, -b:
|
16
|
-
| --check-auth, -x:
|
17
|
-
| --check-project, -y:
|
18
|
-
| --check-branch, -z:
|
19
|
-
| --env-config, -e:
|
20
|
-
| --git-config, -g:
|
21
|
-
| --projects, -r:
|
22
|
-
| --branches, -a:
|
23
|
-
| --status, -s:
|
11
|
+
| --version, -v: |
|
12
|
+
| --help, -h: |
|
13
|
+
| --working-dir, -w: |
|
14
|
+
| --project-name, -p: |
|
15
|
+
| --branch-name, -b: |
|
16
|
+
| --check-auth, -x: |
|
17
|
+
| --check-project, -y: |
|
18
|
+
| --check-branch, -z: |
|
19
|
+
| --env-config, -e: |
|
20
|
+
| --git-config, -g: |
|
21
|
+
| --projects, -r: |
|
22
|
+
| --branches, -a: |
|
23
|
+
| --status, -s: |
|
24
|
+
| --commit-status, -c: |
|
25
|
+
| --rebuild-last-revision, -u: |
|
24
26
|
|
25
27
|
Scenario: get the version of the main script
|
26
28
|
|
@@ -20,3 +20,10 @@ Feature: Show Me What You've Got
|
|
20
20
|
Given I am an authenticated user on semaphoreapp.com
|
21
21
|
And get the build status of one of the branches for one of my projects via their API
|
22
22
|
Then the JSON should be a hash
|
23
|
+
|
24
|
+
@vcr_api_rebuild_last_revision
|
25
|
+
Scenario: Rebuild last revision
|
26
|
+
|
27
|
+
Given I am an authenticated user on semaphoreapp.com
|
28
|
+
And request to rebuild the last revision of one of the branches for one of my projects via their API
|
29
|
+
Then the JSON should be a hash
|
@@ -16,6 +16,10 @@ Given /^get the build status of one of the branches for one of my projects via t
|
|
16
16
|
@response = Git::Semaphore::Api.get_response Git::Semaphore::Api.status_uri(@project, @branch, @auth_token)
|
17
17
|
end
|
18
18
|
|
19
|
+
Given /^request to rebuild the last revision of one of the branches for one of my projects via their API$/ do
|
20
|
+
@response = Git::Semaphore::Api.get_response Git::Semaphore::Api.last_revision_uri(@project, @branch, @auth_token), :post
|
21
|
+
end
|
22
|
+
|
19
23
|
def last_json
|
20
24
|
@response.body
|
21
25
|
end
|
data/features/support/vcr.rb
CHANGED
data/lib/git-semaphore/api.rb
CHANGED
@@ -11,45 +11,49 @@ module Git
|
|
11
11
|
SEMAPHORE_API_URI = '/api/v1'
|
12
12
|
|
13
13
|
def self.projects_uri auth_token
|
14
|
-
|
15
|
-
:host => SEMAPHORE_API_HOST,
|
16
|
-
:path => File.join(SEMAPHORE_API_URI, 'projects'),
|
17
|
-
:query => "auth_token=#{auth_token}"
|
18
|
-
)
|
14
|
+
request_uri(auth_token, :path => File.join(SEMAPHORE_API_URI, 'projects'))
|
19
15
|
end
|
20
16
|
|
21
17
|
def self.branches_uri project_hash_id, auth_token
|
22
|
-
|
23
|
-
:host => SEMAPHORE_API_HOST,
|
24
|
-
:path => File.join(SEMAPHORE_API_URI, 'projects', project_hash_id, 'branches'),
|
25
|
-
:query => "auth_token=#{auth_token}"
|
26
|
-
)
|
18
|
+
request_uri(auth_token, :path => File.join(SEMAPHORE_API_URI, 'projects', project_hash_id, 'branches'))
|
27
19
|
end
|
28
20
|
|
29
21
|
def self.status_uri project_hash_id, branch_id, auth_token
|
30
|
-
|
31
|
-
:host => SEMAPHORE_API_HOST,
|
32
|
-
:path => File.join(SEMAPHORE_API_URI, 'projects', project_hash_id, branch_id, 'status'),
|
33
|
-
:query => "auth_token=#{auth_token}"
|
34
|
-
)
|
22
|
+
request_uri(auth_token, :path => File.join(SEMAPHORE_API_URI, 'projects', project_hash_id, branch_id, 'status'))
|
35
23
|
end
|
36
24
|
|
37
25
|
def self.history_uri project_hash_id, branch_id, auth_token
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
)
|
26
|
+
request_uri(auth_token, :path => File.join(SEMAPHORE_API_URI, 'projects', project_hash_id, branch_id))
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.last_revision_uri project_hash_id, branch_id, auth_token
|
30
|
+
request_uri(auth_token, :path => File.join(SEMAPHORE_API_URI, 'projects', project_hash_id, branch_id, 'build'))
|
43
31
|
end
|
44
32
|
|
45
33
|
# helper functions
|
46
34
|
|
47
|
-
def self.get_response uri
|
35
|
+
def self.get_response uri, action=:get
|
48
36
|
::Net::HTTP.start(uri.host, uri.port, :use_ssl => (uri.scheme == 'https'), :verify_mode => OpenSSL::SSL::VERIFY_NONE) do |net_http|
|
49
|
-
|
37
|
+
case action
|
38
|
+
when :get
|
39
|
+
net_http.get uri.request_uri
|
40
|
+
when :post
|
41
|
+
net_http.post uri.request_uri, uri.query
|
42
|
+
else
|
43
|
+
raise 'Unsupported action'
|
44
|
+
end
|
50
45
|
end
|
51
46
|
end
|
52
47
|
|
48
|
+
def self.request_uri auth_token, options={}
|
49
|
+
URI::HTTPS.build(
|
50
|
+
{ :host => SEMAPHORE_API_HOST,
|
51
|
+
:query => "auth_token=#{auth_token}"
|
52
|
+
}.merge(options)
|
53
|
+
)
|
54
|
+
end
|
55
|
+
private_class_method(:request_uri)
|
56
|
+
|
53
57
|
end
|
54
58
|
end
|
55
59
|
end
|
data/lib/git-semaphore/app.rb
CHANGED
@@ -85,6 +85,11 @@ class Git::Semaphore::App
|
|
85
85
|
build = builds.detect { |b| b['commit']['id'] == commit }
|
86
86
|
end
|
87
87
|
|
88
|
+
def rebuild_last_revision
|
89
|
+
uri = Git::Semaphore::Api.last_revision_uri(project_hash_id, branch_id, auth_token)
|
90
|
+
Git::Semaphore::Api.get_response(uri, :post).body
|
91
|
+
end
|
92
|
+
|
88
93
|
private
|
89
94
|
|
90
95
|
def project_hash_for project_name
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: git-semaphore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Vandenberk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-12-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grit
|
@@ -298,6 +298,7 @@ files:
|
|
298
298
|
- features/cassettes/cucumber_tags/api_projects.json
|
299
299
|
- features/cassettes/cucumber_tags/vcr_api_branches.yml
|
300
300
|
- features/cassettes/cucumber_tags/vcr_api_projects.yml
|
301
|
+
- features/cassettes/cucumber_tags/vcr_api_rebuild_last_revision.yml
|
301
302
|
- features/cassettes/cucumber_tags/vcr_api_status.yml
|
302
303
|
- features/coming_soon.feature
|
303
304
|
- features/env_config.feature
|
@@ -350,6 +351,7 @@ test_files:
|
|
350
351
|
- features/cassettes/cucumber_tags/api_projects.json
|
351
352
|
- features/cassettes/cucumber_tags/vcr_api_branches.yml
|
352
353
|
- features/cassettes/cucumber_tags/vcr_api_projects.yml
|
354
|
+
- features/cassettes/cucumber_tags/vcr_api_rebuild_last_revision.yml
|
353
355
|
- features/cassettes/cucumber_tags/vcr_api_status.yml
|
354
356
|
- features/coming_soon.feature
|
355
357
|
- features/env_config.feature
|