codestatus 0.1.0 → 0.1.1

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 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