examine 0.1.1 → 0.1.2

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
  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: {}