git-semaphore 1.2.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.pryrc +6 -2
- data/README.md +46 -8
- data/exe/git-semaphore +27 -16
- data/git-semaphore.gemspec +1 -1
- data/lib/git/semaphore.rb +12 -5
- data/lib/git/semaphore/project.rb +176 -0
- data/lib/git/semaphore/version.rb +1 -1
- metadata +6 -6
- data/lib/git/semaphore/app.rb +0 -133
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 59236af413fec5cad9c165b9450fdb9817be6379
|
4
|
+
data.tar.gz: 3a94ad7ec8bd108fc641fc8d046616459aa4737c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a1116948c842d29d2f84197a8d3ba6c987f0f36ac08f95c72403b9b32d00107c34f9ee3c5939cd8c244e65c49a20ab2bcd5e18247dd06c1481306a8ab9131de9
|
7
|
+
data.tar.gz: e9b6969e61247975e23149de4ac36f335cffb5c1acef1fb5f25993a8e2d1ce640dbdbdfb2071b32e194b23c04d978e05eb1328e882c753a14107fadc67003694
|
data/.pryrc
CHANGED
@@ -2,5 +2,9 @@
|
|
2
2
|
load "exe/git-semaphore" unless Kernel.const_defined? 'Git::Semaphore'
|
3
3
|
|
4
4
|
# utility function to set pry context
|
5
|
-
# to an instance of <
|
6
|
-
def
|
5
|
+
# to an instance of <Rugged::Repository>
|
6
|
+
def repository() pry Git::Semaphore.git_repo ; end
|
7
|
+
|
8
|
+
# utility function to set pry context
|
9
|
+
# to an instance of <Git::Semaphore::Project>
|
10
|
+
def project() pry Git::Semaphore::Project.from_repo(Git::Semaphore.git_repo) ; end
|
data/README.md
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
[![Travis CI](https://travis-ci.org/pvdb/git-semaphore.svg?branch=v0.0.6)](https://travis-ci.org/pvdb/git-semaphore)
|
6
6
|
|
7
|
-
Integrate git repositories with their corresponding project on [semaphoreci.com][] _(via the
|
7
|
+
Integrate git repositories with their corresponding project on [semaphoreci.com][] _(via the Semaphore API)_
|
8
8
|
|
9
9
|
## Features
|
10
10
|
|
@@ -108,27 +108,62 @@ When used inside a git repository, `git semaphore` uses [convention over configu
|
|
108
108
|
|
109
109
|
| setting | inside git repo | pseudo-code | override |
|
110
110
|
|--------------|--------------------|---------------------------------|---------------------------------|
|
111
|
-
|
|
111
|
+
| owner & name | based on `${PWD}` | `Dir.pwd.split('/').last(2)` | `ENV['SEMAPHORE_PROJECT_NAME']` |
|
112
112
|
| branch name | current git branch | `git symbolic-ref --short HEAD` | `ENV['SEMAPHORE_BRANCH_NAME']` |
|
113
113
|
| commit SHA | current git head | `git rev-parse HEAD` | `ENV['SEMAPHORE_COMMIT_SHA']` |
|
114
114
|
| build number | last branch build | `N/A` | `ENV['SEMAPHORE_BUILD_NUMBER']` |
|
115
115
|
|
116
116
|
However, each of these defaults can be overridden by setting the corresponding environment variable, as documented in the above table. The same `ENV`-based override mechanism can be leveraged to use `git semaphore` outside of a git repository.
|
117
117
|
|
118
|
-
|
118
|
+
## Using the "full name" convention
|
119
|
+
|
120
|
+
On your local filesystem, git repositories need to use paths that follow the "full name" convention in use on `github.com` and `semaphoreci.com`, ie. the last two path components for the `pvdb/git-semaphore` repository should be `pvdb` and `git-semaphore` respectively, as illustrated on this table:
|
121
|
+
|
122
|
+
| | full name | owner | name | URL / path |
|
123
|
+
|-----------|----------------------|--------|-----------------|----------------------------------------------|
|
124
|
+
| | `pvdb/git-semaphore` | `pvdb` | `git-semaphore` | |
|
125
|
+
| GitHub | | | | `https://github.com/pvdb/git-semaphore` |
|
126
|
+
| Semaphore | | | | `https://semaphoreci.com/pvdb/git-semaphore` |
|
127
|
+
| filesytem | | | | `${HOME}/Projects/pvdb/git-semaphore` |
|
128
|
+
|
129
|
+
Put differently: if you typically create your git repositories in `${HOME}/Projects`, and you have the following three git repos...
|
130
|
+
|
131
|
+
pvdb/git-meta
|
132
|
+
pvdb/git-semaphore
|
133
|
+
pvdb/git-switcher
|
134
|
+
|
135
|
+
... then the directory tree should be as follows:
|
136
|
+
|
137
|
+
${HOME}/Projects
|
138
|
+
└── pvdb
|
139
|
+
├── git-meta
|
140
|
+
│ └── .git
|
141
|
+
├── git-semaphore
|
142
|
+
│ └── .git
|
143
|
+
└── git-switcher
|
144
|
+
└── .git
|
145
|
+
|
146
|
+
So first you have a directory corresponding to the repository owner (`pvdb`) and one level down you have a directory corresponding to the repository name (`git-meta`, `git-semaphore` and `git-switcher` respectively).
|
147
|
+
|
148
|
+
## A look behind the scences
|
149
|
+
|
150
|
+
The `git semaphore --settings` command can be used to print out the values for the most relevant settings:
|
119
151
|
|
120
152
|
$ git semaphore --settings | jq '.'
|
121
153
|
{
|
122
|
-
"
|
123
|
-
"
|
124
|
-
"
|
125
|
-
"
|
154
|
+
"auth_token": "Yds3w6o26FLfJTnVK2y9",
|
155
|
+
"project_name": "pvdb/git-semaphore",
|
156
|
+
"branch_name": "master",
|
157
|
+
"commit_sha": "4b59c3e41ca4592dfb01f77f2163154f3d3532fe",
|
158
|
+
"build_number": "35"
|
126
159
|
}
|
127
160
|
$ _
|
128
161
|
|
162
|
+
The `git semaphore --internals` command adds all internal settings to the above settings hash.
|
163
|
+
|
129
164
|
## Available commands
|
130
165
|
|
131
|
-
> ⚠️ all of the below examples need to be run from within a git repository ⚠️
|
166
|
+
> ⚠️ all of the below examples need to be run from within a git repository that follows the "full name" convention documented above ⚠️
|
132
167
|
|
133
168
|
### list the Semaphore settings
|
134
169
|
|
@@ -189,6 +224,9 @@ After installing [the indispensable jq utility][jq] (`brew install jq`), the raw
|
|
189
224
|
# pretty-print the git semaphore settings
|
190
225
|
git semaphore --settings | jq '.'
|
191
226
|
|
227
|
+
# pretty-print the git semaphore internals
|
228
|
+
git semaphore --internals | jq '.'
|
229
|
+
|
192
230
|
# list the full name of all Semaphore projects
|
193
231
|
git semaphore --projects | jq -r '.[] | .full_name'
|
194
232
|
|
data/exe/git-semaphore
CHANGED
@@ -17,7 +17,9 @@ if __FILE__ == $0
|
|
17
17
|
|
18
18
|
banner Git::Semaphore::BANNER
|
19
19
|
|
20
|
-
on :settings,
|
20
|
+
on :settings, 'Display most relevant settings'
|
21
|
+
on :internals, 'Display all internal settings'
|
22
|
+
|
21
23
|
on :browse, 'Open the project on https://semaphoreci.com/'
|
22
24
|
|
23
25
|
on :clean, 'Deletes the cached API query results'
|
@@ -32,55 +34,64 @@ if __FILE__ == $0
|
|
32
34
|
|
33
35
|
end
|
34
36
|
|
35
|
-
|
37
|
+
if options.clean?
|
38
|
+
Git::Semaphore.empty_cache_dir
|
39
|
+
exit 0
|
40
|
+
end
|
36
41
|
|
37
|
-
if options.
|
38
|
-
puts
|
42
|
+
if options.projects?
|
43
|
+
puts Git::Semaphore::Project.all.to_json
|
39
44
|
exit 0
|
40
45
|
end
|
41
46
|
|
42
|
-
if
|
43
|
-
|
47
|
+
project = if (git_repo = Git::Semaphore.git_repo)
|
48
|
+
Git::Semaphore::Project.from_repo(git_repo)
|
49
|
+
else
|
50
|
+
Git::Semaphore::Project.from_config(ENV)
|
51
|
+
end
|
52
|
+
|
53
|
+
if options.settings?
|
54
|
+
puts project.settings.to_json
|
44
55
|
exit 0
|
45
56
|
end
|
46
57
|
|
47
|
-
if options.
|
48
|
-
|
58
|
+
if options.internals?
|
59
|
+
puts project.internals.to_json
|
49
60
|
exit 0
|
50
61
|
end
|
51
62
|
|
52
|
-
if options.
|
53
|
-
|
63
|
+
if options.browse?
|
64
|
+
`open #{project.branch_url}`
|
54
65
|
exit 0
|
55
66
|
end
|
56
67
|
|
57
68
|
if options.branches?
|
58
|
-
puts
|
69
|
+
puts project.branches.to_json
|
59
70
|
exit 0
|
60
71
|
end
|
61
72
|
|
62
73
|
if options.status?
|
63
|
-
puts
|
74
|
+
puts project.status.to_json
|
64
75
|
exit 0
|
65
76
|
end
|
66
77
|
|
67
78
|
if options.history?
|
68
|
-
puts
|
79
|
+
puts project.history.to_json
|
69
80
|
exit 0
|
70
81
|
end
|
71
82
|
|
72
83
|
if options.information?
|
73
|
-
puts
|
84
|
+
puts project.information.to_json
|
74
85
|
exit 0
|
75
86
|
end
|
76
87
|
|
77
88
|
if options.log?
|
78
|
-
puts
|
89
|
+
puts project.log.to_json
|
79
90
|
exit 0
|
80
91
|
end
|
81
92
|
|
82
93
|
if options.rebuild?
|
83
|
-
puts
|
94
|
+
puts project.rebuild
|
84
95
|
exit 0
|
85
96
|
end
|
86
97
|
|
data/git-semaphore.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.require_paths = ["lib"]
|
21
21
|
|
22
22
|
spec.add_dependency "slop", "~> 3.0"
|
23
|
-
spec.add_dependency "
|
23
|
+
spec.add_dependency "rugged" , "~> 0.24"
|
24
24
|
|
25
25
|
spec.add_development_dependency "bundler", "~> 1.12"
|
26
26
|
spec.add_development_dependency "rake", "~> 10.0"
|
data/lib/git/semaphore.rb
CHANGED
@@ -1,10 +1,17 @@
|
|
1
1
|
require 'uri'
|
2
|
+
require 'date'
|
2
3
|
require 'json'
|
3
4
|
require 'openssl'
|
4
5
|
require 'net/http'
|
5
6
|
require 'fileutils'
|
6
7
|
|
7
|
-
require '
|
8
|
+
require 'rugged'
|
9
|
+
|
10
|
+
class Rugged::Repository
|
11
|
+
def owner() File.basename(File.dirname(workdir)) ; end
|
12
|
+
def name() File.basename(workdir) ; end
|
13
|
+
def full_name() "#{owner}/#{name}" ; end
|
14
|
+
end
|
8
15
|
|
9
16
|
module Git
|
10
17
|
module Semaphore
|
@@ -44,9 +51,9 @@ module Git
|
|
44
51
|
end
|
45
52
|
|
46
53
|
def self.git_repo
|
47
|
-
|
48
|
-
|
49
|
-
rescue
|
54
|
+
begin
|
55
|
+
Rugged::Repository.new(Dir.pwd)
|
56
|
+
rescue Rugged::RepositoryError
|
50
57
|
nil
|
51
58
|
end
|
52
59
|
end
|
@@ -74,4 +81,4 @@ require 'git/semaphore/api'
|
|
74
81
|
require 'git/semaphore/api_cache'
|
75
82
|
require 'git/semaphore/api_enrich'
|
76
83
|
|
77
|
-
require 'git/semaphore/
|
84
|
+
require 'git/semaphore/project'
|
@@ -0,0 +1,176 @@
|
|
1
|
+
class Git::Semaphore::Project
|
2
|
+
|
3
|
+
def self.env_overrides
|
4
|
+
ENV.to_h.select { |key, _| key.start_with? 'SEMAPHORE_' }
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.from_repo git_repo
|
8
|
+
self.from_config({
|
9
|
+
'SEMAPHORE_PROJECT_NAME' => git_repo.full_name,
|
10
|
+
'SEMAPHORE_BRANCH_NAME' => git_repo.head.name.split('/').last,
|
11
|
+
'SEMAPHORE_COMMIT_SHA' => git_repo.head.target.oid,
|
12
|
+
'SEMAPHORE_BUILD_NUMBER' => nil
|
13
|
+
}.merge(env_overrides))
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.from_config config
|
17
|
+
self.new(
|
18
|
+
full_name: config['SEMAPHORE_PROJECT_NAME'],
|
19
|
+
branch_name: config['SEMAPHORE_BRANCH_NAME'],
|
20
|
+
options: {
|
21
|
+
commit_sha: config['SEMAPHORE_COMMIT_SHA'],
|
22
|
+
build_number: config['SEMAPHORE_BUILD_NUMBER'],
|
23
|
+
}
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
def initialize full_name:, branch_name:, options:
|
28
|
+
@auth_token = Git::Semaphore.auth_token
|
29
|
+
@full_name = full_name
|
30
|
+
@owner, @name = full_name.split('/')
|
31
|
+
@branch_name = branch_name || 'master'
|
32
|
+
@commit_sha = options[:commit_sha]
|
33
|
+
@build_number = options[:build_number]
|
34
|
+
end
|
35
|
+
|
36
|
+
def settings
|
37
|
+
{
|
38
|
+
auth_token: @auth_token,
|
39
|
+
project_name: @full_name,
|
40
|
+
branch_name: @branch_name,
|
41
|
+
commit_sha: @commit_sha,
|
42
|
+
build_number: @build_number,
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
def internals
|
47
|
+
settings.merge({
|
48
|
+
project: {
|
49
|
+
owner: @owner,
|
50
|
+
name: @name,
|
51
|
+
full_name: @full_name,
|
52
|
+
hash_id: project_hash_id,
|
53
|
+
url: project_url,
|
54
|
+
},
|
55
|
+
branch: {
|
56
|
+
name: @branch_name,
|
57
|
+
id: branch_id,
|
58
|
+
url: branch_url,
|
59
|
+
},
|
60
|
+
build: {
|
61
|
+
number: build_number,
|
62
|
+
result: build_result,
|
63
|
+
url: build_url,
|
64
|
+
},
|
65
|
+
})
|
66
|
+
end
|
67
|
+
|
68
|
+
#
|
69
|
+
# build-related queries: default to latest one...
|
70
|
+
#
|
71
|
+
|
72
|
+
def build_number
|
73
|
+
@build_number ||= history['builds'].first['build_number'].to_s
|
74
|
+
end
|
75
|
+
|
76
|
+
def build_result
|
77
|
+
@build_result ||= history['builds'].first['result']
|
78
|
+
end
|
79
|
+
|
80
|
+
#
|
81
|
+
# direct links to semaphore.ci
|
82
|
+
#
|
83
|
+
|
84
|
+
def project_url
|
85
|
+
project_hash['html_url']
|
86
|
+
end
|
87
|
+
|
88
|
+
def branch_url
|
89
|
+
branch_hash = project_hash['branches'].find { |hash|
|
90
|
+
hash['branch_name'] == @branch_name
|
91
|
+
}
|
92
|
+
branch_hash['branch_url']
|
93
|
+
end
|
94
|
+
|
95
|
+
def build_url
|
96
|
+
build_hash = history['builds'].find { |hash|
|
97
|
+
hash['build_number'].to_s == @build_number
|
98
|
+
}
|
99
|
+
build_hash['build_url']
|
100
|
+
end
|
101
|
+
|
102
|
+
#
|
103
|
+
# API related queries
|
104
|
+
#
|
105
|
+
|
106
|
+
def self.all
|
107
|
+
Git::Semaphore::API::Cache.projects(Git::Semaphore.auth_token)
|
108
|
+
end
|
109
|
+
|
110
|
+
class << self
|
111
|
+
alias_method :projects, :all
|
112
|
+
end
|
113
|
+
|
114
|
+
def branches
|
115
|
+
Git::Semaphore::API::Cache.branches(project_hash_id, @auth_token)
|
116
|
+
end
|
117
|
+
|
118
|
+
def status
|
119
|
+
Git::Semaphore::API::Cache.status(project_hash_id, branch_id, @auth_token)
|
120
|
+
end
|
121
|
+
|
122
|
+
def history
|
123
|
+
Git::Semaphore::API::Cache.history(project_hash_id, branch_id, @auth_token)
|
124
|
+
end
|
125
|
+
|
126
|
+
def information
|
127
|
+
Git::Semaphore::API::Cache.information(project_hash_id, branch_id, build_number, @auth_token,)
|
128
|
+
end
|
129
|
+
|
130
|
+
def log
|
131
|
+
Git::Semaphore::API::Cache.log(project_hash_id, branch_id, build_number, @auth_token,)
|
132
|
+
end
|
133
|
+
|
134
|
+
def rebuild
|
135
|
+
Git::Semaphore::API.rebuild(project_hash_id, branch_id, @auth_token)
|
136
|
+
end
|
137
|
+
|
138
|
+
private
|
139
|
+
|
140
|
+
def project_hash_for owner, name
|
141
|
+
self.class.projects.find { |project_hash|
|
142
|
+
project_hash['owner'] == owner && project_hash['name'] == name
|
143
|
+
}
|
144
|
+
end
|
145
|
+
|
146
|
+
def project_hash
|
147
|
+
project_hash_for(@owner, @name)
|
148
|
+
end
|
149
|
+
|
150
|
+
def project_hash_id_for owner, name
|
151
|
+
project_hash_for(owner, name)['hash_id']
|
152
|
+
end
|
153
|
+
|
154
|
+
def project_hash_id
|
155
|
+
project_hash_id_for(@owner, @name)
|
156
|
+
end
|
157
|
+
|
158
|
+
def branch_hash_for branch_name
|
159
|
+
branches.find { |branch_hash|
|
160
|
+
branch_hash['name'] == branch_name
|
161
|
+
}
|
162
|
+
end
|
163
|
+
|
164
|
+
def branch_hash
|
165
|
+
branch_hash_for(@branch_name)
|
166
|
+
end
|
167
|
+
|
168
|
+
def branch_id_for branch_name
|
169
|
+
branch_hash_for(branch_name)['id'].to_s
|
170
|
+
end
|
171
|
+
|
172
|
+
def branch_id
|
173
|
+
branch_id_for(@branch_name)
|
174
|
+
end
|
175
|
+
|
176
|
+
end
|
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:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Vandenberk
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slop
|
@@ -25,19 +25,19 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: rugged
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0.24'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0.24'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -134,9 +134,9 @@ files:
|
|
134
134
|
- lib/git/semaphore/api.rb
|
135
135
|
- lib/git/semaphore/api_cache.rb
|
136
136
|
- lib/git/semaphore/api_enrich.rb
|
137
|
-
- lib/git/semaphore/app.rb
|
138
137
|
- lib/git/semaphore/banner.rb
|
139
138
|
- lib/git/semaphore/copyright.rb
|
139
|
+
- lib/git/semaphore/project.rb
|
140
140
|
- lib/git/semaphore/version.rb
|
141
141
|
homepage: https://github.com/pvdb/git-semaphore
|
142
142
|
licenses:
|
data/lib/git/semaphore/app.rb
DELETED
@@ -1,133 +0,0 @@
|
|
1
|
-
class Git::Semaphore::App
|
2
|
-
|
3
|
-
attr_writer :project_name
|
4
|
-
attr_writer :branch_name
|
5
|
-
attr_writer :commit_sha
|
6
|
-
attr_writer :build_number
|
7
|
-
|
8
|
-
attr_reader :branch_url
|
9
|
-
|
10
|
-
def initialize auth_token, git_repo, config = ENV
|
11
|
-
@auth_token = auth_token
|
12
|
-
@git_repo = git_repo
|
13
|
-
|
14
|
-
self.project_name = config['SEMAPHORE_PROJECT_NAME']
|
15
|
-
self.branch_name = config['SEMAPHORE_BRANCH_NAME']
|
16
|
-
self.commit_sha = config['SEMAPHORE_COMMIT_SHA']
|
17
|
-
self.build_number = config['SEMAPHORE_BUILD_NUMBER']
|
18
|
-
end
|
19
|
-
|
20
|
-
def to_json
|
21
|
-
{
|
22
|
-
semaphore_auth_token: @auth_token,
|
23
|
-
semaphore_project_name: self.project_name,
|
24
|
-
semaphore_branch_name: self.branch_name,
|
25
|
-
semaphore_commit_sha: self.commit_sha,
|
26
|
-
semaphore_build_number: self.build_number,
|
27
|
-
}.to_json
|
28
|
-
end
|
29
|
-
|
30
|
-
def project_name
|
31
|
-
return @project_name unless @project_name.nil?
|
32
|
-
File.basename @git_repo.git.work_tree if @git_repo
|
33
|
-
end
|
34
|
-
|
35
|
-
def branch_name
|
36
|
-
return @branch_name unless @branch_name.nil?
|
37
|
-
@git_repo.head.name if @git_repo
|
38
|
-
end
|
39
|
-
|
40
|
-
def commit_sha
|
41
|
-
return @commit_sha unless @commit_sha.nil?
|
42
|
-
@git_repo.head.commit.id if @git_repo
|
43
|
-
end
|
44
|
-
|
45
|
-
def build_number
|
46
|
-
return @build_number unless @build_number.nil?
|
47
|
-
history['builds'].first['build_number'].to_s
|
48
|
-
end
|
49
|
-
|
50
|
-
def projects
|
51
|
-
Git::Semaphore::API::Cache.projects(@auth_token)
|
52
|
-
end
|
53
|
-
|
54
|
-
def branches
|
55
|
-
Git::Semaphore::API::Cache.branches(project_hash_id, @auth_token)
|
56
|
-
end
|
57
|
-
|
58
|
-
def status
|
59
|
-
Git::Semaphore::API::Cache.status(project_hash_id, branch_id, @auth_token)
|
60
|
-
end
|
61
|
-
|
62
|
-
def history
|
63
|
-
Git::Semaphore::API::Cache.history(project_hash_id, branch_id, @auth_token)
|
64
|
-
end
|
65
|
-
|
66
|
-
def information
|
67
|
-
Git::Semaphore::API::Cache.information(project_hash_id, branch_id, build_number, @auth_token,)
|
68
|
-
end
|
69
|
-
|
70
|
-
def log
|
71
|
-
Git::Semaphore::API::Cache.log(project_hash_id, branch_id, build_number, @auth_token,)
|
72
|
-
end
|
73
|
-
|
74
|
-
def rebuild
|
75
|
-
Git::Semaphore::API.rebuild(project_hash_id, branch_id, @auth_token)
|
76
|
-
end
|
77
|
-
|
78
|
-
def branch_url
|
79
|
-
branch_hash = project_hash['branches'].find { |hash|
|
80
|
-
hash['branch_name'] == branch_name
|
81
|
-
}
|
82
|
-
branch_hash['branch_url']
|
83
|
-
end
|
84
|
-
|
85
|
-
private
|
86
|
-
|
87
|
-
def project_hash_for project_name
|
88
|
-
projects.find { |project_hash|
|
89
|
-
project_hash['name'] == project_name
|
90
|
-
}
|
91
|
-
end
|
92
|
-
|
93
|
-
def project_hash
|
94
|
-
project_hash_for(project_name)
|
95
|
-
end
|
96
|
-
|
97
|
-
def project_hash_id_for project_name
|
98
|
-
project_hash_for(project_name)['hash_id']
|
99
|
-
end
|
100
|
-
|
101
|
-
def project_hash_id
|
102
|
-
project_hash_id_for(project_name)
|
103
|
-
end
|
104
|
-
|
105
|
-
def branch_hash_for branch_name
|
106
|
-
branches.find { |branch_hash|
|
107
|
-
branch_hash['name'] == branch_name
|
108
|
-
}
|
109
|
-
end
|
110
|
-
|
111
|
-
def branch_hash
|
112
|
-
branch_hash_for(branch_name)
|
113
|
-
end
|
114
|
-
|
115
|
-
def branch_id_for branch_name
|
116
|
-
branch_hash_for(branch_name)['id'].to_s
|
117
|
-
end
|
118
|
-
|
119
|
-
def branch_id
|
120
|
-
branch_id_for(branch_name)
|
121
|
-
end
|
122
|
-
|
123
|
-
def build_status_for commit_sha
|
124
|
-
history['builds'].find { |build_status|
|
125
|
-
build_status['commit']['id'] == commit_sha
|
126
|
-
}
|
127
|
-
end
|
128
|
-
|
129
|
-
def build_status
|
130
|
-
build_status_for(commit_sha)
|
131
|
-
end
|
132
|
-
|
133
|
-
end
|