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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 81364a3db7a62867232e95e2823442661975ebb5
4
- data.tar.gz: 2d2ca67447a8e6845036a00bcde8a1368b36b18c
3
+ metadata.gz: 87b7e13b35690cbbe12b7c3f2872c00e1f02842e
4
+ data.tar.gz: 78147b8083a665a96f7fb692717da21b2a338573
5
5
  SHA512:
6
- metadata.gz: e01d6f185eebdb9e8334a9f95bccd20c9bee2c516ce78b85a3a1497e71b3d39bc043a19fd0b757f1cd39769d2f21a6ca7c2d136ac39fb36170153a21a62ab4c9
7
- data.tar.gz: 3f94d7a33624627b33829a97603f58edbc93de7d42a57487e261fe283147490a9de6972fbf3c0c6a0ba88a0002cb814d9a7a7d9ebc5d82e9e7ce73b3a9e11d9e
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.0)
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/octokit') # => success
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
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require "codestatus"
4
- Codestatus.status
4
+ Codestatus::CLI.start(ARGV)
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(slug = ARGV.first)
11
- slug = 'rubygems/apartment' unless slug
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
- status = package_repository.status
19
- success = (status == BuildStatus::SUCCESS)
18
+ package_repository.status
20
19
  else
21
- status = 'Repository not found'
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
- module BuildStatus
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
- x = client.combined_status(@repo, default_branch)
21
-
22
- case x[:state]
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
@@ -28,8 +28,8 @@ module Codestatus
28
28
 
29
29
  def resolver_classes
30
30
  @resolver_classes ||= [
31
- # RubygemsResolver, NpmResolver, ...
32
31
  RepositoryResolver::RubygemsResolver,
32
+ RepositoryResolver::NpmResolver,
33
33
  RepositoryResolver::UserDefinedResolver,
34
34
  ]
35
35
  end
@@ -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>.*)/(?<repo>.*)/?.*}.freeze
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'
@@ -1,3 +1,3 @@
1
1
  module Codestatus
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
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.0
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