examine 0.1.1 → 0.1.2

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
  SHA256:
3
- metadata.gz: d580d78447a470a51a68c9c9c67a921f223bd982b7d28977885b7b70ea1d9f1f
4
- data.tar.gz: 7775399dbe8b3f043a77de1afb83be5a54e4096e9be051f3089f0a830aa3e1bd
3
+ metadata.gz: d0f7d30f66f0b34778516fcf2b3ce7c78c4e739a89dcf7b5dda1b1669e60b28f
4
+ data.tar.gz: bbe264a31ee2cee91c8039ff45839ced136073f08d7a820e5fa47a43fecc8464
5
5
  SHA512:
6
- metadata.gz: 7deb9c99012fdb03a1a6bf94d49bd168c1590f17ed84be12ab704c0d77612b52fd6e22aa155bf5f64a8ca7367abf6288c2fe1054a5708d5ccc3c02f8d411df3c
7
- data.tar.gz: 9b43e8f24d5b0d14a0f6a8cf797c18712f2f7ffd4299b1bde86a1de4e2fe726cc1c3d5e63dacc947caf5de114f2760023b73d140fc44088b3e88a6430966394c
6
+ metadata.gz: 5bc0f075a47b62872f43635eef0d0cca61e6f998dbbe068fc13061a1b12db3aee7cda41183024292cc29828be2c890aed6ce82d6edaa86c138a95edc2ac1b98b
7
+ data.tar.gz: d4a4f951c73fc4aff984af309397913f1981ebbfc95cf8b8a1bb1f4cc4372706ab7eda9561bae47fb1dc0407a13e20900b74de787f1adcd732ba1ab7e3e562a8
data/.gitlab-ci.yml CHANGED
@@ -25,9 +25,19 @@ rspec:
25
25
  GIT_STRATEGY: none
26
26
  stage: test
27
27
  script:
28
- - cd /examine/ && bundle exec rspec
28
+ - cd /examine/ && ./bin/test
29
29
 
30
- examine:
30
+ lint:
31
+ image:
32
+ name: $DOCKER_IMAGE
33
+ entrypoint: [""]
34
+ variables:
35
+ GIT_STRATEGY: none
36
+ stage: test
37
+ script:
38
+ - cd /examine/ && ./bin/lint
39
+
40
+ container_scanning:
31
41
  image:
32
42
  name: docker:stable
33
43
  allow_failure: true
@@ -43,4 +53,8 @@ examine:
43
53
  - apk add ruby curl
44
54
  - gem install examine --no-document
45
55
  - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
46
- - examine clair scan $DOCKER_IMAGE --clair_url $CLAIR_URL --ip $(hostname -i)
56
+ - examine clair scan $DOCKER_IMAGE --clair_url $CLAIR_URL --ip $(hostname -i) --report gl-container-scanning-report.json
57
+ artifacts:
58
+ reports:
59
+ container_scanning: gl-container-scanning-report.json
60
+ paths: [gl-container-scanning-report.json]
data/.rubocop.yml ADDED
@@ -0,0 +1,30 @@
1
+ require:
2
+ - rubocop/cop/internal_affairs
3
+ - rubocop-rspec
4
+ AllCops:
5
+ Exclude:
6
+ - 'coverage/**/*'
7
+ - 'pkg/**/*'
8
+ - 'tmp/**/*'
9
+ - 'vendor/**/*'
10
+ TargetRubyVersion: 2.5
11
+
12
+ Layout/IndentFirstArrayElement:
13
+ EnforcedStyle: consistent
14
+
15
+ Metrics/BlockLength:
16
+ Exclude:
17
+ - '*.gemspec'
18
+ - 'spec/**/*.rb'
19
+
20
+ Metrics/LineLength:
21
+ Exclude:
22
+ - 'spec/**/*.rb'
23
+ IgnoredPatterns:
24
+ - '^#*'
25
+
26
+ Naming/RescuedExceptionsVariableName:
27
+ PreferredName: error
28
+
29
+ RSpec/NamedSubject:
30
+ Enabled: false
data/Dockerfile CHANGED
@@ -1,11 +1,16 @@
1
1
  FROM docker:stable
2
- RUN apk add ruby git curl
3
- RUN gem install bundler -v '~> 2.0' --no-document
2
+ ENV PACKAGES build-base ruby ruby-dev ruby-json ruby-etc git curl
4
3
  RUN wget https://github.com/arminc/clair-scanner/releases/download/v12/clair-scanner_linux_amd64 && \
5
4
  mv clair-scanner_linux_amd64 /usr/local/bin/clair-scanner && \
6
5
  chmod +x /usr/local/bin/clair-scanner
7
6
  RUN mkdir -p /examine
8
7
  WORKDIR /examine
9
8
  COPY . .
10
- RUN bundle install --jobs "$(nproc)" --quiet
9
+ RUN apk update && \
10
+ apk upgrade && \
11
+ apk add $PACKAGES && \
12
+ rm -fr /var/cache/apk/* && \
13
+ gem install bundler:'~> 2.0' --no-document && \
14
+ bundle install --jobs "$(nproc)" --quiet --path vendor/bundle && \
15
+ apk del build-base
11
16
  ENTRYPOINT ["bundle", "exec", "./exe/examine"]
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in examine.gemspec
4
6
  gemspec
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- examine (0.1.1)
4
+ examine (0.1.2)
5
5
  down (~> 4.8)
6
6
  thor (~> 0.20)
7
7
 
@@ -10,10 +10,19 @@ GEM
10
10
  specs:
11
11
  addressable (2.6.0)
12
12
  public_suffix (>= 2.0.2, < 4.0)
13
+ ast (2.4.0)
14
+ bundler-audit (0.6.1)
15
+ bundler (>= 1.2.0, < 3)
16
+ thor (~> 0.18)
13
17
  diff-lcs (1.3)
14
18
  down (4.8.1)
15
19
  addressable (~> 2.5)
20
+ jaro_winkler (1.5.2)
21
+ parallel (1.17.0)
22
+ parser (2.6.3.0)
23
+ ast (~> 2.4.0)
16
24
  public_suffix (3.1.1)
25
+ rainbow (3.0.0)
17
26
  rake (10.5.0)
18
27
  rspec (3.8.0)
19
28
  rspec-core (~> 3.8.0)
@@ -28,16 +37,30 @@ GEM
28
37
  diff-lcs (>= 1.2.0, < 2.0)
29
38
  rspec-support (~> 3.8.0)
30
39
  rspec-support (3.8.2)
40
+ rubocop (0.71.0)
41
+ jaro_winkler (~> 1.5.1)
42
+ parallel (~> 1.10)
43
+ parser (>= 2.6)
44
+ rainbow (>= 2.2.2, < 4.0)
45
+ ruby-progressbar (~> 1.7)
46
+ unicode-display_width (>= 1.4.0, < 1.7)
47
+ rubocop-rspec (1.33.0)
48
+ rubocop (>= 0.60.0)
49
+ ruby-progressbar (1.10.1)
31
50
  thor (0.20.3)
51
+ unicode-display_width (1.6.0)
32
52
 
33
53
  PLATFORMS
34
54
  ruby
35
55
 
36
56
  DEPENDENCIES
37
57
  bundler (~> 2.0)
58
+ bundler-audit (~> 0.6)
38
59
  examine!
39
60
  rake (~> 10.0)
40
61
  rspec (~> 3.0)
62
+ rubocop (~> 0.52)
63
+ rubocop-rspec (~> 1.22)
41
64
 
42
65
  BUNDLED WITH
43
66
  2.0.2
data/Rakefile CHANGED
@@ -1,6 +1,14 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/audit/task'
4
+ require 'bundler/gem_tasks'
5
+ require 'rspec/core/rake_task'
6
+ require 'rubocop/rake_task'
3
7
 
4
8
  RSpec::Core::RakeTask.new(:spec)
9
+ RuboCop::RakeTask.new(:rubocop)
10
+ Bundler::Audit::Task.new
5
11
 
6
- task :default => :spec
12
+ desc 'run linters'
13
+ task lint: [:rubocop, 'bundle:audit']
14
+ task default: :spec
data/bin/console CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
- require "examine"
4
+ require 'bundler/setup'
5
+ require 'examine'
5
6
 
6
7
  # You can add fixtures and/or initialization code here to make experimenting
7
8
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +11,5 @@ require "examine"
10
11
  # require "pry"
11
12
  # Pry.start
12
13
 
13
- require "irb"
14
+ require 'irb'
14
15
  IRB.start(__FILE__)
data/bin/lint ADDED
@@ -0,0 +1,11 @@
1
+ #!/bin/sh
2
+
3
+ set -e
4
+
5
+ [ -z "$DEBUG" ] || set -x
6
+
7
+ echo [$(date "+%H:%M:%S")] "==> Running setup…"
8
+ bin/setup
9
+
10
+ echo [$(date "+%H:%M:%S")] "==> Running linters…"
11
+ bundle exec rake lint
data/bin/setup CHANGED
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env bash
1
+ #!/bin/sh
2
2
  set -euo pipefail
3
3
  IFS=$'\n\t'
4
4
  set -vx
data/bin/test ADDED
@@ -0,0 +1,28 @@
1
+ #!/bin/sh
2
+
3
+ # script/test: Run test suite for application. Optionally pass in a path to an
4
+ # individual test file to run a single test.
5
+
6
+
7
+ set -e
8
+
9
+ cd "$(dirname "$0")/.."
10
+
11
+ [ -z "$DEBUG" ] || set -x
12
+
13
+ # GC customizations
14
+ export RUBY_GC_MALLOC_LIMIT=79000000
15
+ export RUBY_GC_HEAP_INIT_SLOTS=800000
16
+ export RUBY_HEAP_FREE_MIN=100000
17
+ export RUBY_HEAP_SLOTS_INCREMENT=400000
18
+ export RUBY_HEAP_SLOTS_GROWTH_FACTOR=1
19
+
20
+ echo ["$(date "+%H:%M:%S")"] "==> Running setup…"
21
+ bin/setup
22
+
23
+ echo ["$(date "+%H:%M:%S")"] "==> Running tests…"
24
+ if [[ $# -eq 0 ]]; then
25
+ bundle exec rake spec
26
+ else
27
+ bundle exec rspec "$1"
28
+ fi
data/examine.gemspec CHANGED
@@ -1,31 +1,35 @@
1
+ # frozen_string_literal: true
1
2
 
2
- lib = File.expand_path("../lib", __FILE__)
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "examine/version"
5
+ require 'examine/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = "examine"
8
+ spec.name = 'examine'
8
9
  spec.version = Examine::VERSION
9
- spec.authors = ["mo"]
10
- spec.email = ["mo@mokhan.ca"]
10
+ spec.authors = ['mo']
11
+ spec.email = ['mo@mokhan.ca']
11
12
 
12
- spec.summary = %q{Examine your software.}
13
- spec.description = %q{Examine your software.}
14
- spec.homepage = "https://www.mokhan.ca/"
15
- spec.license = "MIT"
13
+ spec.summary = 'Examine your software.'
14
+ spec.description = 'Examine your software.'
15
+ spec.homepage = 'https://gitlab.com/xlgmokha/examine/'
16
+ spec.license = 'MIT'
16
17
 
17
18
  # Specify which files should be added to the gem when it is released.
18
19
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
19
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
20
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
20
21
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
22
  end
22
- spec.bindir = "exe"
23
+ spec.bindir = 'exe'
23
24
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
- spec.require_paths = ["lib"]
25
+ spec.require_paths = ['lib']
25
26
 
26
- spec.add_dependency "down", "~> 4.8"
27
- spec.add_dependency "thor", "~> 0.20"
28
- spec.add_development_dependency "bundler", "~> 2.0"
29
- spec.add_development_dependency "rake", "~> 10.0"
30
- spec.add_development_dependency "rspec", "~> 3.0"
27
+ spec.add_dependency 'down', '~> 4.8'
28
+ spec.add_dependency 'thor', '~> 0.20'
29
+ spec.add_development_dependency 'bundler', '~> 2.0'
30
+ spec.add_development_dependency 'bundler-audit', '~> 0.6'
31
+ spec.add_development_dependency 'rake', '~> 10.0'
32
+ spec.add_development_dependency 'rspec', '~> 3.0'
33
+ spec.add_development_dependency 'rubocop', '~> 0.52'
34
+ spec.add_development_dependency 'rubocop-rspec', '~> 1.22'
31
35
  end
data/exe/examine CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "examine"
4
+ require 'examine'
4
5
 
5
6
  Examine::CLI::Application.start(ARGV)
data/lib/examine.rb CHANGED
@@ -1,5 +1,7 @@
1
- require "examine/cli"
2
- require "examine/version"
1
+ # frozen_string_literal: true
2
+
3
+ require 'examine/cli'
4
+ require 'examine/version'
3
5
 
4
6
  module Examine
5
7
  class Error < StandardError; end
data/lib/examine/cli.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'down'
2
4
  require 'socket'
3
5
  require 'thor'
@@ -5,8 +7,3 @@ require 'timeout'
5
7
 
6
8
  require 'examine/cli/clair'
7
9
  require 'examine/cli/application'
8
-
9
- module Examine
10
- module CLI
11
- end
12
- end
@@ -1,5 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Examine
2
4
  module CLI
5
+ # Entrypoint to the CLI.
3
6
  class Application < Thor
4
7
  package_name 'examine'
5
8
 
@@ -1,52 +1,55 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Examine
2
4
  module CLI
5
+ # Entrypoint into the `examine clair` subcommand.
3
6
  class Clair < Thor
4
- DOWNLOAD_PATH = 'https://github.com/arminc/clair-scanner/releases/download/v12/'
7
+ DOWNLOAD_PATH = 'https://github.com/arminc/clair-scanner/releases/download/'
8
+ EXECUTABLES = {
9
+ 'x86-darwin' => 'clair-scanner_darwin_386',
10
+ 'x86-linux' => 'clair-scanner_linux_386',
11
+ 'x86_64-darwin' => 'clair-scanner_darwin_amd64',
12
+ 'x86_64-linux' => 'clair-scanner_linux_amd64'
13
+ }.freeze
14
+
15
+ class_option :local_scan_version, desc: 'Version of the arminc/clair-local-scan image', default: 'latest', type: :string
16
+ class_option :scanner_version, desc: 'Version of the clair-scanner', default: 'v12', type: :string
17
+ class_option :url, desc: 'clair url', default: 'http://localhost:6060', type: :string
5
18
 
6
- method_option :clair_url, desc: 'clair url', default: 'http://localhost:6060', type: :string
7
19
  desc 'start', 'start a clair server'
8
20
  def start
9
21
  ensure_docker_installed!
10
- spawn 'docker run -d --name clair-db arminc/clair-db:latest'
11
- wait_until('docker ps --filter="name=clair-db" --filter="status=running" --filter="expose=5432/tcp" | grep -v CONT')
22
+ return if started?
23
+
24
+ spawn clair_db
25
+ wait_until clair_db_running?
12
26
 
13
- spawn 'docker run --restart=unless-stopped -p 6060:6060 --link clair-db:postgres -d --name clair arminc/clair-local-scan:latest'
14
- wait_until('docker ps --filter="name=clair" --filter="status=running" --filter="expose=6060/tcp" | grep -v CONT')
15
- wait_until("curl -s #{options[:clair_url]}/v1/namespaces > /dev/null")
27
+ spawn clair_local_scan(options[:local_scan_version])
28
+ wait_until clair_local_scan_running?
29
+ wait_until clair_local_scan_api_reachable?
16
30
  end
17
31
 
18
32
  method_option :ip, desc: 'ip address', default: nil, type: :string
19
- method_option :clair_url, desc: 'clair url', default: 'http://localhost:6060', type: :string
20
33
  method_option :report, desc: 'report file', default: 'report.json', type: :string
21
34
  method_option :log, desc: 'log file', default: 'clair.log', type: :string
22
35
  method_option :whitelist, desc: 'whitelist file', default: nil, type: :string
23
- desc 'scan <image>', 'scan a specific image'
36
+ desc 'scan <image>', 'scan a specific docker image. E.g mokhan/minbox:latest'
24
37
  def scan(image)
25
- start unless started?
38
+ start
26
39
 
27
- ip = options[:ip] || Socket.ip_address_list[1].ip_address
28
40
  system "docker pull #{image}"
29
- command = [
30
- clair_exe,
31
- "-c #{options[:clair_url]}",
32
- "--ip #{ip}",
33
- "-r #{options[:report]}",
34
- "-l #{options[:log]}",
35
- image,
36
- ]
37
- command.insert(-2, "-w #{options[:whitelist]}") if options[:whitelist]
38
- system command.join(' ')
41
+ system scan_command_for(image, options)
39
42
  end
40
43
 
41
44
  desc 'status', 'status of clair server'
42
45
  def status
43
- system "docker ps -a | grep clair"
46
+ system 'docker ps -a | grep clair'
44
47
  end
45
48
 
46
49
  desc 'stop', 'stop all clair servers'
47
50
  def stop
48
51
  system "docker stop $(docker ps | grep -v CONT | grep clair- | awk '{ print $1 }')"
49
- system "docker system prune -f"
52
+ system 'docker system prune -f'
50
53
  end
51
54
 
52
55
  private
@@ -59,29 +62,34 @@ module Examine
59
62
  @clair_exe ||= executable_exists?('clair-scanner') || download_clair
60
63
  end
61
64
 
65
+ def scan_command_for(image, options)
66
+ command = [
67
+ clair_exe, "-c #{options[:url]}",
68
+ "--ip #{clair_ip}",
69
+ "-r #{options[:report]}", "-l #{options[:log]}", image
70
+ ]
71
+ command.insert(-2, "-w #{options[:whitelist]}") if options[:whitelist]
72
+ command.join(' ')
73
+ end
74
+
75
+ def clair_ip
76
+ options[:ip] || Socket.ip_address_list[1].ip_address
77
+ end
78
+
62
79
  def executable_exists?(exe)
63
- found = ENV['PATH'].split(':').find do |x|
64
- File.exist?(File.join(x, exe))
65
- end
66
- return File.join(found, exe) if found
80
+ ENV['PATH'].split(':').map { |x| File.join(x, exe) }.find { |x| File.exist?(x) }
67
81
  end
68
82
 
69
83
  def download_clair
70
84
  File.join(Dir.tmpdir, 'clair-scanner').tap do |exe|
71
- Down.download(clair_download_path, destination: exe)
85
+ Down.download(clair_download_url, destination: exe)
72
86
  `chmod +x #{exe}`
73
87
  end
74
88
  end
75
89
 
76
- def clair_download_path
77
- platform = Gem::Platform.local
78
- exe = {
79
- 'x86-darwin' => 'clair-scanner_darwin_386',
80
- 'x86-linux' => 'clair-scanner_linux_386',
81
- 'x86_64-darwin' => 'clair-scanner_darwin_amd64',
82
- 'x86_64-linux' => 'clair-scanner_linux_amd64',
83
- }["#{platform.cpu}-#{platform.os}"]
84
- return URI.join(DOWNLOAD_PATH, exe).to_s if exe
90
+ def clair_download_url
91
+ exe = EXECUTABLES["#{Gem::Platform.local.cpu}-#{Gem::Platform.local.os}"]
92
+ return File.join(DOWNLOAD_PATH, options[:scanner_version], exe) if exe
85
93
 
86
94
  raise 'clair-scanner could not be found in your PATH. Download from https://github.com/arminc/clair-scanner/releases'
87
95
  end
@@ -100,6 +108,26 @@ module Examine
100
108
  def ensure_docker_installed!
101
109
  raise 'docker was not detected on the system' unless executable_exists?('docker')
102
110
  end
111
+
112
+ def clair_db_running?
113
+ 'docker ps --filter="name=clair-db" --filter="status=running" --filter="expose=5432/tcp" | grep -v CONT'
114
+ end
115
+
116
+ def clair_db
117
+ 'docker run -d --name clair-db arminc/clair-db:latest'
118
+ end
119
+
120
+ def clair_local_scan(version)
121
+ "docker run --restart=unless-stopped -p 6060:6060 --link clair-db:postgres -d --name clair arminc/clair-local-scan:#{version}"
122
+ end
123
+
124
+ def clair_local_scan_running?
125
+ 'docker ps --filter="name=clair" --filter="status=running" --filter="expose=6060/tcp" | grep -v CONT'
126
+ end
127
+
128
+ def clair_local_scan_api_reachable?(url = options[:url])
129
+ "curl -s #{url}/v1/namespaces > /dev/null"
130
+ end
103
131
  end
104
132
  end
105
133
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Examine
2
- VERSION = "0.1.1"
4
+ VERSION = '0.1.2'
3
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: examine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - mo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-07-24 00:00:00.000000000 Z
11
+ date: 2019-07-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: down
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '2.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler-audit
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.6'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.6'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rake
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +94,34 @@ dependencies:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
96
  version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '0.52'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '0.52'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop-rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '1.22'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '1.22'
83
125
  description: Examine your software.
84
126
  email:
85
127
  - mo@mokhan.ca
@@ -91,6 +133,7 @@ files:
91
133
  - ".gitignore"
92
134
  - ".gitlab-ci.yml"
93
135
  - ".rspec"
136
+ - ".rubocop.yml"
94
137
  - Dockerfile
95
138
  - Gemfile
96
139
  - Gemfile.lock
@@ -98,7 +141,9 @@ files:
98
141
  - README.md
99
142
  - Rakefile
100
143
  - bin/console
144
+ - bin/lint
101
145
  - bin/setup
146
+ - bin/test
102
147
  - examine.gemspec
103
148
  - exe/examine
104
149
  - lib/examine.rb
@@ -106,7 +151,7 @@ files:
106
151
  - lib/examine/cli/application.rb
107
152
  - lib/examine/cli/clair.rb
108
153
  - lib/examine/version.rb
109
- homepage: https://www.mokhan.ca/
154
+ homepage: https://gitlab.com/xlgmokha/examine/
110
155
  licenses:
111
156
  - MIT
112
157
  metadata: {}