codestatus 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +19 -1
- data/README.md +16 -1
- data/codestatus.gemspec +2 -0
- data/exe/codestatus +1 -1
- data/lib/codestatus.rb +7 -11
- data/lib/codestatus/build_status.rb +20 -1
- data/lib/codestatus/cli.rb +27 -0
- data/lib/codestatus/package_repository/github_repository.rb +3 -9
- data/lib/codestatus/repository_resolver.rb +1 -1
- data/lib/codestatus/repository_resolver/npm_resolver.rb +63 -0
- data/lib/codestatus/repository_resolver/rubygems_resolver.rb +1 -1
- data/lib/codestatus/version.rb +1 -1
- metadata +31 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 87b7e13b35690cbbe12b7c3f2872c00e1f02842e
|
4
|
+
data.tar.gz: 78147b8083a665a96f7fb692717da21b2a338573
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 821c2b8b1f0efce58896face9f9d45ca0b1b3c1e4b9a2bc73ae6d49efbfef0c50ea0f8686ab37a31a886f76e9e3707652aa46ed777ce661777400e8fc1c31c51
|
7
|
+
data.tar.gz: adedf790e67684c29fb72946c7e7c84a4aa77482bf88f99b80186c08e006ac7262334b3b79dec31e72e3ecfa6d9c999578a16906d7e4b2bb8ff28cd9e1728d91
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
codestatus (0.1.
|
4
|
+
codestatus (0.1.1)
|
5
5
|
gems
|
6
6
|
octokit
|
7
|
+
rest-client
|
8
|
+
thor
|
7
9
|
|
8
10
|
GEM
|
9
11
|
remote: https://rubygems.org/
|
@@ -13,13 +15,21 @@ GEM
|
|
13
15
|
byebug (9.1.0)
|
14
16
|
coderay (1.1.2)
|
15
17
|
diff-lcs (1.3)
|
18
|
+
domain_name (0.5.20170404)
|
19
|
+
unf (>= 0.0.5, < 1.0.0)
|
16
20
|
faraday (0.13.1)
|
17
21
|
multipart-post (>= 1.2, < 3)
|
18
22
|
gems (1.0.0)
|
19
23
|
json
|
24
|
+
http-cookie (1.0.3)
|
25
|
+
domain_name (~> 0.5)
|
20
26
|
json (2.1.0)
|
21
27
|
method_source (0.9.0)
|
28
|
+
mime-types (3.1)
|
29
|
+
mime-types-data (~> 3.2015)
|
30
|
+
mime-types-data (3.2016.0521)
|
22
31
|
multipart-post (2.0.0)
|
32
|
+
netrc (0.11.0)
|
23
33
|
octokit (4.8.0)
|
24
34
|
sawyer (~> 0.8.0, >= 0.5.3)
|
25
35
|
pry (0.11.3)
|
@@ -30,6 +40,10 @@ GEM
|
|
30
40
|
pry (~> 0.10)
|
31
41
|
public_suffix (3.0.1)
|
32
42
|
rake (10.5.0)
|
43
|
+
rest-client (2.0.2)
|
44
|
+
http-cookie (>= 1.0.2, < 2.0)
|
45
|
+
mime-types (>= 1.16, < 4.0)
|
46
|
+
netrc (~> 0.8)
|
33
47
|
rspec (3.7.0)
|
34
48
|
rspec-core (~> 3.7.0)
|
35
49
|
rspec-expectations (~> 3.7.0)
|
@@ -46,6 +60,10 @@ GEM
|
|
46
60
|
sawyer (0.8.1)
|
47
61
|
addressable (>= 2.3.5, < 2.6)
|
48
62
|
faraday (~> 0.8, < 1.0)
|
63
|
+
thor (0.20.0)
|
64
|
+
unf (0.1.4)
|
65
|
+
unf_ext
|
66
|
+
unf_ext (0.0.7.4)
|
49
67
|
|
50
68
|
PLATFORMS
|
51
69
|
ruby
|
data/README.md
CHANGED
@@ -8,8 +8,23 @@ gem 'codestatus'
|
|
8
8
|
|
9
9
|
## Usage
|
10
10
|
|
11
|
+
```console
|
12
|
+
# Requires public_repo scope
|
13
|
+
$ export CODESTATUS_GITHUB_TOKEN=XXXXXXXXXXXXXXX
|
14
|
+
```
|
15
|
+
|
16
|
+
```console
|
17
|
+
$ codestatus status rubygems/octokit
|
18
|
+
success
|
19
|
+
$ codestatus status npm/react
|
20
|
+
success
|
21
|
+
$ codestatus status --registry=npm react
|
22
|
+
success
|
23
|
+
```
|
24
|
+
|
11
25
|
```ruby
|
12
|
-
puts Codestatus.status('rubygems
|
26
|
+
puts Codestatus.status(registry: 'rubygems', package: 'octokit').status # => success
|
27
|
+
puts Codestatus.status(registry: 'npm', package: 'react').status # => success
|
13
28
|
```
|
14
29
|
|
15
30
|
## Contributing
|
data/codestatus.gemspec
CHANGED
@@ -22,6 +22,8 @@ Gem::Specification.new do |spec|
|
|
22
22
|
|
23
23
|
spec.add_runtime_dependency "octokit"
|
24
24
|
spec.add_runtime_dependency "gems"
|
25
|
+
spec.add_runtime_dependency "rest-client"
|
26
|
+
spec.add_runtime_dependency "thor"
|
25
27
|
|
26
28
|
spec.add_development_dependency "bundler", "~> 1.16"
|
27
29
|
spec.add_development_dependency "rake", "~> 10.0"
|
data/exe/codestatus
CHANGED
data/lib/codestatus.rb
CHANGED
@@ -1,27 +1,23 @@
|
|
1
1
|
require "codestatus/version"
|
2
2
|
require "codestatus/build_status"
|
3
|
+
require "codestatus/cli"
|
3
4
|
require "codestatus/repository_resolver"
|
4
5
|
require "codestatus/repository_resolver/user_defined_resolver"
|
5
6
|
require "codestatus/repository_resolver/rubygems_resolver"
|
7
|
+
require "codestatus/repository_resolver/npm_resolver"
|
6
8
|
require "codestatus/package_repository"
|
7
9
|
require "codestatus/package_repository/github_repository"
|
8
10
|
|
9
11
|
module Codestatus
|
10
|
-
def self.status(
|
11
|
-
|
12
|
-
package_registry, package_name = slug.split('/')
|
13
|
-
|
14
|
-
resolver = RepositoryResolver.new(registry: package_registry, package: package_name)
|
12
|
+
def self.status(registry:, package:)
|
13
|
+
resolver = RepositoryResolver.new(registry: registry, package: package)
|
15
14
|
|
16
15
|
package_repository = resolver.repository
|
16
|
+
|
17
17
|
if package_repository
|
18
|
-
|
19
|
-
success = (status == BuildStatus::SUCCESS)
|
18
|
+
package_repository.status
|
20
19
|
else
|
21
|
-
|
22
|
-
success = 1
|
20
|
+
BuildStatus.new(sha: nil, status: nil)
|
23
21
|
end
|
24
|
-
puts status
|
25
|
-
exit success ? 0 : 1
|
26
22
|
end
|
27
23
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Codestatus
|
2
|
-
|
2
|
+
class BuildStatus
|
3
3
|
UNDEFINED = 'undefined'.freeze
|
4
4
|
|
5
5
|
# Defined in GitHub
|
@@ -7,5 +7,24 @@ module Codestatus
|
|
7
7
|
FAILURE = 'failure'.freeze
|
8
8
|
PENDING = 'pending'.freeze
|
9
9
|
SUCCESS = 'success'.freeze
|
10
|
+
|
11
|
+
STATUSES = [
|
12
|
+
ERROR,
|
13
|
+
FAILURE,
|
14
|
+
PENDING,
|
15
|
+
SUCCESS,
|
16
|
+
].freeze
|
17
|
+
|
18
|
+
def initialize(sha:, status:)
|
19
|
+
@sha = sha
|
20
|
+
|
21
|
+
if STATUSES.include?(status.to_s)
|
22
|
+
@status = status.to_s
|
23
|
+
else
|
24
|
+
@status = UNDEFINED
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
attr_reader :sha, :status
|
10
29
|
end
|
11
30
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require "thor"
|
2
|
+
|
3
|
+
module Codestatus
|
4
|
+
class CLI < Thor
|
5
|
+
desc "status REGISTRY/PACKAGE", "Show status of the package"
|
6
|
+
option :registry, type: :string, aliases: 'r'
|
7
|
+
option 'show-package-name', type: :boolean, default: false
|
8
|
+
def status(slug)
|
9
|
+
if options[:registry]
|
10
|
+
package_registry = options[:registry]
|
11
|
+
package_name = slug
|
12
|
+
else
|
13
|
+
package_registry, package_name = slug.split('/')
|
14
|
+
end
|
15
|
+
|
16
|
+
status = Codestatus.status(registry: package_registry, package: package_name)
|
17
|
+
success = (status.status == BuildStatus::SUCCESS)
|
18
|
+
|
19
|
+
if options['show-package-name']
|
20
|
+
puts "#{package_name}: #{status.status}"
|
21
|
+
else
|
22
|
+
puts status.status
|
23
|
+
end
|
24
|
+
exit success ? 0 : 1
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -17,15 +17,9 @@ module Codestatus
|
|
17
17
|
# combined status on github
|
18
18
|
# https://developer.github.com/v3/repos/statuses/#get-the-combined-status-for-a-specific-ref
|
19
19
|
def status_of_default_branch
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
when 'failure' then BuildStatus::FAILURE
|
24
|
-
when 'pending' then BuildStatus::PENDING
|
25
|
-
when 'success' then BuildStatus::SUCCESS
|
26
|
-
when 'error' then BuildStatus::ERROR
|
27
|
-
else BuildStatus::UNDEFINED
|
28
|
-
end
|
20
|
+
response = client.combined_status(@repo, default_branch)
|
21
|
+
|
22
|
+
BuildStatus.new(sha: response.sha, status: response.state)
|
29
23
|
end
|
30
24
|
|
31
25
|
def default_branch
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'rest-client'
|
2
|
+
|
3
|
+
module Codestatus
|
4
|
+
class RepositoryResolver
|
5
|
+
class NpmResolver
|
6
|
+
GITHUB_REPOSITORY_REGEXP = %r{(https|git)://github.com/(?<owner>[^/]*)/(?<repo>[^/]*)(\.git)?/?.*}.freeze
|
7
|
+
NPM_REGISTRY_ENDPOINT = 'https://registry.npmjs.org/'.freeze
|
8
|
+
|
9
|
+
def resolve(registry:, package:)
|
10
|
+
return unless registry.to_s == 'npm'
|
11
|
+
@package = package
|
12
|
+
|
13
|
+
github_repository
|
14
|
+
end
|
15
|
+
|
16
|
+
attr_reader :package
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
# FIXME: Copied from RubygemsResolver
|
21
|
+
def github_repository
|
22
|
+
result = nil
|
23
|
+
urls.each do |url|
|
24
|
+
matched = GITHUB_REPOSITORY_REGEXP.match(url)
|
25
|
+
next unless matched
|
26
|
+
|
27
|
+
repo = [matched[:owner], matched[:repo]].join('/')
|
28
|
+
result = Codestatus::PackageRepository.new(github: repo)
|
29
|
+
break
|
30
|
+
end
|
31
|
+
result
|
32
|
+
end
|
33
|
+
|
34
|
+
def package_info
|
35
|
+
@package_info ||= JSON.parse(client.get("#{NPM_REGISTRY_ENDPOINT}/#{package}"))
|
36
|
+
end
|
37
|
+
|
38
|
+
def urls
|
39
|
+
[
|
40
|
+
bugs_url,
|
41
|
+
repository_url,
|
42
|
+
homepage_url,
|
43
|
+
].compact
|
44
|
+
end
|
45
|
+
|
46
|
+
def bugs_url
|
47
|
+
package_info.dig('bugs', 'url')
|
48
|
+
end
|
49
|
+
|
50
|
+
def homepage_url
|
51
|
+
package_info.dig('homepage')
|
52
|
+
end
|
53
|
+
|
54
|
+
def repository_url
|
55
|
+
package_info.dig('repository', 'url')
|
56
|
+
end
|
57
|
+
|
58
|
+
def client
|
59
|
+
RestClient
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -3,7 +3,7 @@ require "gems"
|
|
3
3
|
module Codestatus
|
4
4
|
class RepositoryResolver
|
5
5
|
class RubygemsResolver
|
6
|
-
GITHUB_REPOSITORY_REGEXP = %r{https://github.com/(?<owner
|
6
|
+
GITHUB_REPOSITORY_REGEXP = %r{(https|git)://github.com/(?<owner>[^/]*)/(?<repo>[^/]*)(\.git)?/?.*}.freeze
|
7
7
|
|
8
8
|
def resolve(registry:, package:)
|
9
9
|
return unless registry.to_s == 'rubygems'
|
data/lib/codestatus/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: codestatus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- meganemura
|
@@ -38,6 +38,34 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rest-client
|
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: thor
|
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'
|
41
69
|
- !ruby/object:Gem::Dependency
|
42
70
|
name: bundler
|
43
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -130,9 +158,11 @@ files:
|
|
130
158
|
- exe/codestatus
|
131
159
|
- lib/codestatus.rb
|
132
160
|
- lib/codestatus/build_status.rb
|
161
|
+
- lib/codestatus/cli.rb
|
133
162
|
- lib/codestatus/package_repository.rb
|
134
163
|
- lib/codestatus/package_repository/github_repository.rb
|
135
164
|
- lib/codestatus/repository_resolver.rb
|
165
|
+
- lib/codestatus/repository_resolver/npm_resolver.rb
|
136
166
|
- lib/codestatus/repository_resolver/rubygems_resolver.rb
|
137
167
|
- lib/codestatus/repository_resolver/user_defined_resolver.rb
|
138
168
|
- lib/codestatus/version.rb
|