cutting_edge 0.2.1 → 0.3

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: 4457b31dd15da9184bb394f6d85b9197228e9cadbe6640b0c8b50bfd8ad08650
4
- data.tar.gz: e74cbee369cb51b73c3a0ef2822580913774f6d5a6aa8440b01fe5a2aef83130
3
+ metadata.gz: f2b2c4c5c7d23ff00b0f4124b7040aa7733b48b6474178f596d35358df8e779a
4
+ data.tar.gz: de40b5d1c93e556ab5387352cbc3cb9bf5d13b7e2f0db06ba044f7189d000889
5
5
  SHA512:
6
- metadata.gz: 98f7e1eb93eec5ef97fb942b81b2ab982f3bea1f4b660dfa1356f3930ca68a3dfe35396c610bde83919a7877256e40d2d4a6df5661ac21936111d7f096be3491
7
- data.tar.gz: 655323d084a16337cc5aeee7e271fdd3500eb119380540589b3d6a63027b075ab44651453a67ad2e671fdbcc0e320e8a727f7f12fe8c090f0c43ba0f3285cb50
6
+ metadata.gz: e26af96def69913fcb64680de7a45d1e5faa34f497994d5b7970f136c0d87eb6a4430fa8d68ccab031e7c77d5662778cd084714db74caf52cb41e90f7602e814
7
+ data.tar.gz: da2caeadbed7b997c22ecd0943ad97eed25996199d1355386c758d7d47ada429adde0384b1ee27bece5958b5ecd1c758362f1c1befa22470fd3db95447a9ff82
data/Dockerfile ADDED
@@ -0,0 +1,29 @@
1
+ FROM ruby:3.0.4-alpine AS builder
2
+
3
+ RUN apk add \
4
+ build-base \
5
+ git \
6
+ cmake \
7
+ libffi-dev
8
+
9
+ COPY Gemfile* /tmp/
10
+ COPY cutting_edge.gemspec* /tmp/
11
+ WORKDIR /tmp
12
+ RUN bundle install
13
+
14
+ WORKDIR /app
15
+ COPY . /app
16
+ RUN bundle exec rake install
17
+
18
+ FROM ruby:3.0.4-alpine
19
+
20
+ COPY --from=builder /usr/local/bundle/ /usr/local/bundle/
21
+
22
+ RUN apk add \
23
+ bash \
24
+ tzdata
25
+
26
+ VOLUME /cutting_edge
27
+ WORKDIR /cutting_edge
28
+ COPY docker-run.sh /docker-run.sh
29
+ ENTRYPOINT ["/docker-run.sh"]
data/Gemfile CHANGED
@@ -1,13 +1,13 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem 'redis', require: false
4
+ gem 'thin', require: false
4
5
 
5
6
  group :development do
6
7
  gem 'rspec', '~> 3.9'
7
8
  gem 'simplecov'
9
+ gem 'simplecov-lcov', '~> 0.8.0'
8
10
  gem 'rack-test'
9
11
  end
10
12
 
11
- gem 'coveralls', '~>0.8.23', require: false
12
-
13
- gemspec
13
+ gemspec
data/HISTORY.md ADDED
@@ -0,0 +1,3 @@
1
+ # v0.2.1 / 2021-09-02
2
+
3
+ * Add ~= comparator and translate it to ~>. Resolves #66 (@bartkamphorst)
data/LATEST_CHANGES.md ADDED
@@ -0,0 +1,7 @@
1
+ # 0.3
2
+
3
+ * Added the `--redis` command line argument.
4
+ * Added Docker support.
5
+ * Use Redis on Heroku by default to avoid flakiness caused by Heroku's dynos.
6
+ * Change default branch name to `main`
7
+ * Do not mail when the diff is empty.
data/README.md CHANGED
@@ -1,11 +1,14 @@
1
1
  # CuttingEdge -- Simple, self-hosted dependency monitoring
2
2
 
3
- [![Build Status](https://travis-ci.org/repotag/cutting_edge.svg?branch=master)](https://travis-ci.org/repotag/cutting_edge)
4
- [![Coverage Status](https://coveralls.io/repos/github/repotag/cutting_edge/badge.svg?branch=master)](https://coveralls.io/github/repotag/cutting_edge?branch=master)
3
+ [![Ruby Build](https://github.com/repotag/cutting_edge/actions/workflows/test.yaml/badge.svg)](https://github.com/repotag/cutting_edge/actions/workflows/test.yaml)
4
+ [![Coverage Status](https://coveralls.io/repos/github/repotag/cutting_edge/badge.svg?branch=main)](https://coveralls.io/github/repotag/cutting_edge?branch=main)
5
5
  [![Cutting Edge Dependency Status](https://dometto-cuttingedge.herokuapp.com/github/repotag/cutting_edge/svg 'Cutting Edge Dependency Status')](https://dometto-cuttingedge.herokuapp.com/github/repotag/cutting_edge/info)
6
+ [![Docker Pulls](https://img.shields.io/docker/pulls/dometto/cuttingedge)](https://hub.docker.com/r/dometto/cuttingedge)
6
7
 
7
8
  CuttingEdge monitors the status of the dependencies of your projects and lets you know when any of them go out of date.
8
9
 
10
+ **View the web front end of a [live instance](https://dometto-cuttingedge.herokuapp.com/)**.
11
+
9
12
  ## Features
10
13
 
11
14
  * Generates badge images that you can include in your projects' Readme, like the one above!
@@ -21,8 +24,6 @@ CuttingEdge monitors the status of the dependencies of your projects and lets yo
21
24
  * Gitlab (both gitlab.com and [self-hosted instances](#Adding-self-hosted-repository-servers))
22
25
  * Gitea ([self-hosted](#Adding-self-hosted-repository-servers))
23
26
  * Both public and [private repositories](#Authorization-and-private-repositories)
24
-
25
- **View the web front end of a [live instance](https://dometto-cuttingedge.herokuapp.com/)**.
26
27
 
27
28
  ## Requirements
28
29
 
@@ -36,24 +37,19 @@ CuttingEdge is lightweight and easy to deploy:
36
37
 
37
38
  ## Installation
38
39
 
39
- Simply:
40
+ ### Using Docker
40
41
 
41
- ```
42
- $ gem install cutting_edge
43
- $ cutting_edge
44
- ```
42
+ To run CuttingEdge on port 4567 on the host machine, with config.rb and projects.yml in the current working directory, simply:
45
43
 
46
- Or run from source:
44
+ `docker pull dometto/cuttingedge`
45
+ `docker run -d --rm -p 4567:4567 -v $(pwd):/cutting_edge dometto/cuttingedge:main -c config.r`
47
46
 
48
- ```
49
- $ git clone https://github.com/repotag/cutting_edge.git
50
- $ cd cutting_edge
51
- $ bundle install
52
- $ bundle exec cutting_edge
53
- ```
47
+ (Instead of using `main`, you can also use a release tag, e.g. `dometto/cuttingedge:v0.2.1`.)
54
48
 
55
49
  Before running, define your repositories in [projects.yml](#projects-yml). You may also want to change some settings in [config.rb](#config-rb).
56
50
 
51
+ Also see our example [docker-compose](docker-compose.yml) file for an example of how to use CuttingEdge with [Redis as a datastore](#Using-Redis-and-other-data-stores) via Docker.
52
+
57
53
  ### Deploying on Heroku
58
54
 
59
55
  CuttingEdge runs out of the box on Heroku, and is lightweight enough to function on the Heroku free plan. This repository already contains the `Procfile` needed for deployment.
@@ -63,11 +59,14 @@ CuttingEdge runs out of the box on Heroku, and is lightweight enough to function
63
59
  Steps:
64
60
 
65
61
  1. Clone/fork this repository, as it already contains some settings (in `heroku.config.rb`) relevant to Heroku
66
- 1. Edit `projects.yml` and commit it to the repo
67
- 1. `heroku create my-cuttingedge`
68
- 1. `heroku config:add HEROKU_APP_NAME=my-cuttingedge`
69
- 1. `git push heroku master`
70
- 1. *Optional, if you want to receive [email notifications](#Email-Notifications)*:
62
+ 1. Edit `projects.yml` and commit it to the repo.
63
+ 1. `gem install bundler && bundle install`
64
+ 2. `git add Gemfile.lock && git commit -m "Commit Gemfile.lock for use on Heroku"
65
+ 3. `heroku create my-cuttingedge`
66
+ 4. `heroku config:add HEROKU_APP_NAME=my-cuttingedge`
67
+ 5. `heroku addons:create heroku-redis:hobby-dev -a my-cuttingedge` (using Redis is highly recommended on Heroku)
68
+ 6. `git push heroku master`
69
+ 7. *Optional, if you want to receive [email notifications](#Email-Notifications)*:
71
70
  * `heroku addons:create mailgun:starter`
72
71
  * `heroku config:add CUTTING_EDGE_MAIL_TO=mydependencies@mydependencymonitoring.com`
73
72
  * If you are on the free plan: [add your email addresses as Authorized Recipients](https://help.mailgun.com/hc/en-us/articles/217531258-Authorized-Recipients) in [Mailgun](https://app.mailgun.com/) (login via Heroku)
@@ -76,6 +75,26 @@ You may also want to set some [Heroku config variables](https://devcenter.heroku
76
75
 
77
76
  Note that Heroku switches off apps running on their free plan when they idle, so you may want to look at [this](https://medium.com/better-programming/keeping-my-heroku-app-alive-b19f3a8c3a82).
78
77
 
78
+ ### As a gem
79
+
80
+ Simply:
81
+
82
+ ```
83
+ $ gem install cutting_edge
84
+ $ cutting_edge
85
+ ```
86
+
87
+ Or run from source:
88
+
89
+ ```
90
+ $ git clone https://github.com/repotag/cutting_edge.git
91
+ $ cd cutting_edge
92
+ $ bundle install
93
+ $ bundle exec cutting_edge
94
+ ```
95
+
96
+ Before running, define your repositories in [projects.yml](#projects-yml). You may also want to change some settings in [config.rb](#config-rb).
97
+
79
98
  ## Usage
80
99
 
81
100
  When your instance of CuttingEdge is running, you can visit the landing page by pointing your browser to the root URL of the app. Locally, it is by default accessible at:
@@ -106,7 +125,7 @@ This will make CuttingEdge monitor the GitHub project `my_org/my_project`. You c
106
125
  * `auth_token`: see [here](#Authorization-and-private-repositories)
107
126
  * `hide`: see [here](#Hide-repositories)
108
127
  * `locations`: use to change the default path to dependency definition files. For instance, for a Ruby project, CuttingEdge will by default try to monitor `Gemfile` and `my_project.gemspec`. You can override this with `language: [Gemfile, alternative/file.gemspec]`
109
- * `branch`: use a different branch than the default `master`
128
+ * `branch`: use a different branch than the default `main`
110
129
  * `email`:
111
130
  * disable email notifications for a single project by setting this to `false`
112
131
  * use a non-default address delivery address for this project by setting this to e.g. `myproject@mydependencymonitoring.com`
data/Rakefile CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'date'
3
+ require 'tempfile'
3
4
  require 'rspec/core/rake_task'
4
5
 
5
6
  task :default => :rspec
@@ -26,6 +27,14 @@ def version
26
27
  line.match(/.*VERSION\s*=\s*['"](.*)['"]/)[1]
27
28
  end
28
29
 
30
+ def latest_changes_file
31
+ 'LATEST_CHANGES.md'
32
+ end
33
+
34
+ def history_file
35
+ 'HISTORY.md'
36
+ end
37
+
29
38
  # assumes x.y.z all digit version
30
39
  def next_version
31
40
  # x.y.z
@@ -86,14 +95,15 @@ end
86
95
 
87
96
  desc 'Create a release build and push to rubygems'
88
97
  task :release => :build do
89
- unless `git branch` =~ /^\* master$/
90
- puts "You must be on the master branch to release!"
98
+ unless `git branch` =~ /^\* main$/
99
+ puts "You must be on the main branch to release!"
91
100
  exit!
92
101
  end
102
+ Rake::Task[:changelog].execute
93
103
  sh "git commit --allow-empty -a -m 'Release #{version}'"
94
- sh "git pull --rebase origin master"
104
+ sh "git pull --rebase origin main"
95
105
  sh "git tag v#{version}"
96
- sh "git push origin master"
106
+ sh "git push origin main"
97
107
  sh "git push origin v#{version}"
98
108
  sh "gem push pkg/#{name}-#{version}.gem"
99
109
  end
@@ -152,3 +162,43 @@ task :validate do
152
162
  exit!
153
163
  end
154
164
  end
165
+
166
+ desc 'Build changelog'
167
+ task :changelog do
168
+ [latest_changes_file, history_file].each do |f|
169
+ unless File.exists?(f)
170
+ puts "#{f} does not exist but is required to build a new release."
171
+ exit!
172
+ end
173
+ end
174
+
175
+ latest_changes = File.open(latest_changes_file)
176
+ version_pattern = "# #{version}"
177
+
178
+ if !`grep "#{version_pattern}" #{history_file}`.empty?
179
+ puts "#{version} is already described in #{history_file}"
180
+ exit!
181
+ end
182
+
183
+ begin
184
+ unless latest_changes.readline.chomp! =~ %r{#{version_pattern}}
185
+ puts "#{latest_changes_file} should begin with '#{version_pattern}'"
186
+ exit!
187
+ end
188
+ rescue EOFError
189
+ puts "#{latest_changes_file} is empty!"
190
+ exit!
191
+ end
192
+
193
+ body = latest_changes.read
194
+ body.scan(/\s*#\s+\d\.\d.*/) do |match|
195
+ puts "#{latest_changes_file} may not contain multiple markdown headers!"
196
+ exit!
197
+ end
198
+
199
+ temp = Tempfile.new
200
+ temp.puts("#{version_pattern} / #{date}\n#{body}\n")
201
+ temp.close
202
+ `cat #{history_file} >> #{temp.path}`
203
+ `cat #{temp.path} > #{history_file}`
204
+ end
data/bin/cutting_edge CHANGED
@@ -4,6 +4,7 @@ require 'yaml'
4
4
  require 'rufus-scheduler'
5
5
  require 'optparse'
6
6
  require 'semantic_logger'
7
+ require 'moneta'
7
8
 
8
9
  module CuttingEdge
9
10
  REFRESH_SCHEDULE = '1h'
@@ -42,6 +43,10 @@ opts = OptionParser.new do |opts|
42
43
  opts.on('-c', '--config [FILE]', 'Specify path to a .rb configuration file. Default: config.rb') do |file|
43
44
  options[:config] = file || 'config.rb'
44
45
  end
46
+
47
+ opts.on('-r', '--redis [URL]', 'Use Redis as a datastore. Optionally specify the Redis URL. Default URL: `redis://localhost/.`') do |url|
48
+ ::CuttingEdge::STORE = ::Moneta.new(:Redis, url: (url || 'redis://localhost/'))
49
+ end
45
50
  end
46
51
 
47
52
  begin
data/cutting_edge.gemspec CHANGED
@@ -5,8 +5,8 @@ Gem::Specification.new do |s|
5
5
  s.required_ruby_version = '>= 2.4'
6
6
 
7
7
  s.name = 'cutting_edge'
8
- s.version = '0.2.1'
9
- s.date = '2021-09-02'
8
+ s.version = '0.3'
9
+ s.date = '2022-10-15'
10
10
  s.license = 'GPL-3.0-only'
11
11
 
12
12
  s.summary = 'Self-hosted dependency monitoring, including shiny badges.'
@@ -33,8 +33,10 @@ Gem::Specification.new do |s|
33
33
 
34
34
  # = MANIFEST =
35
35
  s.files = %w[
36
+ Dockerfile
36
37
  Gemfile
37
- Gemfile.lock
38
+ HISTORY.md
39
+ LATEST_CHANGES.md
38
40
  LICENSE
39
41
  Procfile
40
42
  README.md
@@ -42,6 +44,8 @@ Gem::Specification.new do |s|
42
44
  bin/cutting_edge
43
45
  config.rb
44
46
  cutting_edge.gemspec
47
+ docker-compose.yml
48
+ docker-run.sh
45
49
  heroku.config.rb
46
50
  lib/cutting_edge.rb
47
51
  lib/cutting_edge/app.rb
@@ -0,0 +1,23 @@
1
+ # Example of a simple docker-compose file to run CuttingEdge with a redis datastore
2
+ # Simply run `docker-compose up`
3
+ version: '3.8'
4
+ services:
5
+ cache:
6
+ image: redis:7.0.5-alpine
7
+ restart: always
8
+ ports:
9
+ - '6379:6379'
10
+ cuttingedge:
11
+ image: dometto/cuttingedge:main
12
+ environment:
13
+ REDIS_HOST: cache
14
+ command:
15
+ - -r redis://cache
16
+ depends_on:
17
+ - cache
18
+ ports:
19
+ - 4567:4567
20
+ links:
21
+ - cache
22
+ volumes:
23
+ - ./:/cutting_edge
data/docker-run.sh ADDED
@@ -0,0 +1,2 @@
1
+ #!/bin/bash
2
+ exec cutting_edge $@
data/heroku.config.rb CHANGED
@@ -4,10 +4,19 @@ module CuttingEdge
4
4
  SERVER_HOST = "#{ENV['HEROKU_APP_NAME']}.herokuapp.com" # At what domain is this CuttingEdge instance running?
5
5
  SERVER_URL = "https://#{SERVER_HOST}"
6
6
  MAIL_TO = ENV['CUTTING_EDGE_MAIL_TO'] if ENV['CUTTING_EDGE_MAIL_TO']
7
-
7
+ if ENV['REDIS_TLS_URL']
8
+ require 'moneta'
9
+ require 'openssl'
10
+ STORE = ::Moneta.new(:Redis,
11
+ url: ENV['REDIS_TLS_URL'],
12
+ ssl_params: {
13
+ verify_mode: OpenSSL::SSL::VERIFY_NONE
14
+ }
15
+ )
16
+ end
8
17
  # Your additional configuration goes here.
9
18
  # If you are going to host the repository containing this file publically (e.g. on GitHub), please read:
10
- # https://github.com/repotag/cutting_edge/blob/master/README.md#Defining-repositories-in-configrb
19
+ # https://github.com/repotag/cutting_edge/blob/main/README.md#Defining-repositories-in-configrb
11
20
  end
12
21
 
13
22
  # Needed to write to Heroku logs.
@@ -92,7 +92,7 @@ module CuttingEdge
92
92
  @org = org
93
93
  @name = name
94
94
  @auth_token = auth_token
95
- @branch = branch || 'master'
95
+ @branch = branch || 'main'
96
96
  @hidden = hide
97
97
  @lang = lang || DEFAULT_LANG
98
98
  @contact_email = email
@@ -146,7 +146,7 @@ class DependencyWorker < GenericWorker
146
146
  begin
147
147
  response = HTTP.headers(@provider.headers(@auth_token)).get(url)
148
148
  response.status == 200 ? response.to_s : nil
149
- rescue HTTP::TimeoutError => e
149
+ rescue HTTP::Error, OpenSSL::SSL::SSLError, Addressable::URI::InvalidURIError => e
150
150
  log_info("Encountered error when fetching latest version of #{url}: #{e.class} #{e.message}")
151
151
  end
152
152
  end
@@ -22,6 +22,8 @@ class MailWorker < GenericWorker
22
22
  diff = {}
23
23
  end
24
24
 
25
+ return if diff.empty?
26
+
25
27
  Mail.deliver do
26
28
  from "CuttingEdge <#{CuttingEdge::MAIL_FROM}>"
27
29
  to to_addr
data/lib/cutting_edge.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module CuttingEdge
2
- VERSION = '0.2.1'
2
+ VERSION = '0.3'
3
3
  end
@@ -47,7 +47,7 @@ describe MailWorker do
47
47
  expect(worker.perform(identifier, nil)).to eq nil
48
48
  end
49
49
 
50
- it 'handles nil for diff' do
50
+ it 'do not mail for empty diff' do
51
51
  params = {
52
52
  project: identifier,
53
53
  url: CuttingEdge::SERVER_URL,
@@ -55,7 +55,7 @@ describe MailWorker do
55
55
  specs: dependencies
56
56
  }
57
57
  expect(worker).to receive(:delete_from_store).with("diff-#{identifier}").and_return(nil)
58
- expect_any_instance_of(ERB).to receive(:result_with_hash).with(params).and_call_original
58
+ expect_any_instance_of(ERB).not_to receive(:result_with_hash)
59
59
  worker.perform(identifier, test_email)
60
60
  end
61
61
 
data/spec/repo_spec.rb CHANGED
@@ -27,7 +27,7 @@ describe CuttingEdge::Repository do
27
27
  expect(CuttingEdge::GithubRepository).to_not be_nil
28
28
  github = CuttingEdge::GithubRepository.new(org: 'org', name: 'name')
29
29
  expect(github.source).to eq 'github'
30
- expect(github.url_for_file('file')).to eq 'https://api.github.com/repos/org/name/contents/file?ref=master'
30
+ expect(github.url_for_file('file')).to eq 'https://api.github.com/repos/org/name/contents/file?ref=main'
31
31
  expect(github.url_for_project).to eq 'https://github.com/org/name'
32
32
  end
33
33
  end
@@ -40,7 +40,7 @@ describe CuttingEdge::Repository do
40
40
  expect(CuttingEdge::GitlabRepository.headers('token')).to eq ({:authorization => 'Bearer token'})
41
41
  gitlab = CuttingEdge::GitlabRepository.new(org: 'org', name: 'name')
42
42
  expect(gitlab.source).to eq 'gitlab'
43
- expect(gitlab.url_for_file('file')).to eq 'https://gitlab.com/api/v4/projects/org%2fname/repository/files/file/raw?ref=master'
43
+ expect(gitlab.url_for_file('file')).to eq 'https://gitlab.com/api/v4/projects/org%2fname/repository/files/file/raw?ref=main'
44
44
  expect(gitlab.url_for_project).to eq 'https://gitlab.com/org/name'
45
45
  end
46
46
 
@@ -50,7 +50,7 @@ describe CuttingEdge::Repository do
50
50
  expect(defined?(CuttingEdge::GiteaRepository)).to_not be_nil
51
51
  gitea = CuttingEdge::GiteaRepository.new(org: 'org', name: 'name')
52
52
  expect(gitea.source).to eq 'gitea'
53
- expect(gitea.url_for_file('file')).to eq 'https://mydependencymonitoring.com/api/v1/repos/org/name/raw/master/file'
53
+ expect(gitea.url_for_file('file')).to eq 'https://mydependencymonitoring.com/api/v1/repos/org/name/raw/main/file'
54
54
  expect(gitea.url_for_project).to eq 'https://mydependencymonitoring.com/org/name'
55
55
  end
56
56
  end
data/spec/spec_helper.rb CHANGED
@@ -1,11 +1,14 @@
1
1
  require 'simplecov'
2
+ require 'simplecov-lcov'
2
3
  require 'fixtures'
3
4
  require 'rack/test'
4
5
 
5
- if ENV['TRAVIS']
6
- require 'coveralls'
7
- Coveralls.wear!
6
+ if ENV['CI']
7
+ SimpleCov::Formatter::LcovFormatter.config.report_with_single_file = true
8
+ SimpleCov::Formatter::LcovFormatter.config.single_report_path = 'coverage/lcov.info'
9
+ SimpleCov.formatter = SimpleCov::Formatter::LcovFormatter
8
10
  end
11
+ SimpleCov.start
9
12
 
10
13
  ENV['RACK_ENV'] = 'test'
11
14
 
@@ -116,4 +119,4 @@ RSpec.configure do |config|
116
119
  config.include Rack::Test::Methods
117
120
  config.include ::CuttingEdgeHelpers
118
121
  config.include ::WorkerHelpers
119
- end
122
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cutting_edge
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: '0.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dawa Ometto
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-09-02 00:00:00.000000000 Z
12
+ date: 2022-10-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: gemnasium-parser
@@ -158,8 +158,10 @@ executables:
158
158
  extensions: []
159
159
  extra_rdoc_files: []
160
160
  files:
161
+ - Dockerfile
161
162
  - Gemfile
162
- - Gemfile.lock
163
+ - HISTORY.md
164
+ - LATEST_CHANGES.md
163
165
  - LICENSE
164
166
  - Procfile
165
167
  - README.md
@@ -167,6 +169,8 @@ files:
167
169
  - bin/cutting_edge
168
170
  - config.rb
169
171
  - cutting_edge.gemspec
172
+ - docker-compose.yml
173
+ - docker-run.sh
170
174
  - heroku.config.rb
171
175
  - lib/cutting_edge.rb
172
176
  - lib/cutting_edge/app.rb
@@ -227,7 +231,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
227
231
  - !ruby/object:Gem::Version
228
232
  version: '0'
229
233
  requirements: []
230
- rubygems_version: 3.0.3
234
+ rubygems_version: 3.1.4
231
235
  signing_key:
232
236
  specification_version: 2
233
237
  summary: Self-hosted dependency monitoring, including shiny badges.
data/Gemfile.lock DELETED
@@ -1,131 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- cutting_edge (0.2.1)
5
- gemnasium-parser (~> 0.1.9)
6
- hashdiff (~> 1.0)
7
- http (~> 5.0)
8
- mail (~> 2.7)
9
- moneta (~> 1.2)
10
- rufus-scheduler (~> 3.6)
11
- sinatra (~> 2.0)
12
- sinatra-logger (~> 0.3)
13
- sucker_punch (~> 3.0)
14
- toml-rb (~> 2.0)
15
-
16
- GEM
17
- remote: https://rubygems.org/
18
- specs:
19
- addressable (2.8.0)
20
- public_suffix (>= 2.0.2, < 5.0)
21
- citrus (3.0.2)
22
- concurrent-ruby (1.1.9)
23
- coveralls (0.8.23)
24
- json (>= 1.8, < 3)
25
- simplecov (~> 0.16.1)
26
- term-ansicolor (~> 1.3)
27
- thor (>= 0.19.4, < 2.0)
28
- tins (~> 1.6)
29
- diff-lcs (1.4.4)
30
- docile (1.3.2)
31
- domain_name (0.5.20190701)
32
- unf (>= 0.0.5, < 1.0.0)
33
- et-orbi (1.2.4)
34
- tzinfo
35
- ffi (1.15.3)
36
- ffi-compiler (1.0.1)
37
- ffi (>= 1.0.0)
38
- rake
39
- fugit (1.5.1)
40
- et-orbi (~> 1.1, >= 1.1.8)
41
- raabro (~> 1.4)
42
- gemnasium-parser (0.1.9)
43
- hashdiff (1.0.1)
44
- http (5.0.1)
45
- addressable (~> 2.3)
46
- http-cookie (~> 1.0)
47
- http-form_data (~> 2.2)
48
- llhttp-ffi (~> 0.3.0)
49
- http-cookie (1.0.4)
50
- domain_name (~> 0.5)
51
- http-form_data (2.3.0)
52
- json (2.3.1)
53
- llhttp-ffi (0.3.1)
54
- ffi-compiler (~> 1.0)
55
- rake (~> 13.0)
56
- mail (2.7.1)
57
- mini_mime (>= 0.1.1)
58
- mini_mime (1.1.1)
59
- moneta (1.4.2)
60
- mustermann (1.1.1)
61
- ruby2_keywords (~> 0.0.1)
62
- public_suffix (4.0.6)
63
- raabro (1.4.0)
64
- rack (2.2.3)
65
- rack-protection (2.1.0)
66
- rack
67
- rack-test (1.1.0)
68
- rack (>= 1.0, < 3)
69
- rake (13.0.6)
70
- redis (4.2.2)
71
- rspec (3.10.0)
72
- rspec-core (~> 3.10.0)
73
- rspec-expectations (~> 3.10.0)
74
- rspec-mocks (~> 3.10.0)
75
- rspec-core (3.10.0)
76
- rspec-support (~> 3.10.0)
77
- rspec-expectations (3.10.0)
78
- diff-lcs (>= 1.2.0, < 2.0)
79
- rspec-support (~> 3.10.0)
80
- rspec-mocks (3.10.0)
81
- diff-lcs (>= 1.2.0, < 2.0)
82
- rspec-support (~> 3.10.0)
83
- rspec-support (3.10.0)
84
- ruby2_keywords (0.0.5)
85
- rufus-scheduler (3.8.0)
86
- fugit (~> 1.1, >= 1.1.6)
87
- semantic_logger (4.8.2)
88
- concurrent-ruby (~> 1.0)
89
- simplecov (0.16.1)
90
- docile (~> 1.1)
91
- json (>= 1.8, < 3)
92
- simplecov-html (~> 0.10.0)
93
- simplecov-html (0.10.2)
94
- sinatra (2.1.0)
95
- mustermann (~> 1.0)
96
- rack (~> 2.2)
97
- rack-protection (= 2.1.0)
98
- tilt (~> 2.0)
99
- sinatra-logger (0.3.2)
100
- semantic_logger
101
- sinatra
102
- sucker_punch (3.0.1)
103
- concurrent-ruby (~> 1.0)
104
- sync (0.5.0)
105
- term-ansicolor (1.7.1)
106
- tins (~> 1.0)
107
- thor (1.0.1)
108
- tilt (2.0.10)
109
- tins (1.26.0)
110
- sync
111
- toml-rb (2.0.1)
112
- citrus (~> 3.0, > 3.0)
113
- tzinfo (2.0.4)
114
- concurrent-ruby (~> 1.0)
115
- unf (0.1.4)
116
- unf_ext
117
- unf_ext (0.0.7.7)
118
-
119
- PLATFORMS
120
- ruby
121
-
122
- DEPENDENCIES
123
- coveralls (~> 0.8.23)
124
- cutting_edge!
125
- rack-test
126
- redis
127
- rspec (~> 3.9)
128
- simplecov
129
-
130
- BUNDLED WITH
131
- 2.1.4