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 +4 -4
- data/Dockerfile +29 -0
- data/Gemfile +3 -3
- data/HISTORY.md +3 -0
- data/LATEST_CHANGES.md +7 -0
- data/README.md +41 -22
- data/Rakefile +54 -4
- data/bin/cutting_edge +5 -0
- data/cutting_edge.gemspec +7 -3
- data/docker-compose.yml +23 -0
- data/docker-run.sh +2 -0
- data/heroku.config.rb +11 -2
- data/lib/cutting_edge/repo.rb +1 -1
- data/lib/cutting_edge/workers/dependency.rb +1 -1
- data/lib/cutting_edge/workers/mail.rb +2 -0
- data/lib/cutting_edge.rb +1 -1
- data/spec/email_worker_spec.rb +2 -2
- data/spec/repo_spec.rb +3 -3
- data/spec/spec_helper.rb +7 -4
- metadata +8 -4
- data/Gemfile.lock +0 -131
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f2b2c4c5c7d23ff00b0f4124b7040aa7733b48b6474178f596d35358df8e779a
|
4
|
+
data.tar.gz: de40b5d1c93e556ab5387352cbc3cb9bf5d13b7e2f0db06ba044f7189d000889
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
12
|
-
|
13
|
-
gemspec
|
13
|
+
gemspec
|
data/HISTORY.md
ADDED
data/LATEST_CHANGES.md
ADDED
data/README.md
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
# CuttingEdge -- Simple, self-hosted dependency monitoring
|
2
2
|
|
3
|
-
[![Build
|
4
|
-
[![Coverage Status](https://coveralls.io/repos/github/repotag/cutting_edge/badge.svg?branch=
|
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
|
-
|
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
|
-
|
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. `
|
68
|
-
|
69
|
-
|
70
|
-
|
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 `
|
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` =~ /^\*
|
90
|
-
puts "You must be on the
|
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
|
104
|
+
sh "git pull --rebase origin main"
|
95
105
|
sh "git tag v#{version}"
|
96
|
-
sh "git push origin
|
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.
|
9
|
-
s.date = '
|
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
|
-
|
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
|
data/docker-compose.yml
ADDED
@@ -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
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/
|
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.
|
data/lib/cutting_edge/repo.rb
CHANGED
@@ -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::
|
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
|
data/lib/cutting_edge.rb
CHANGED
data/spec/email_worker_spec.rb
CHANGED
@@ -47,7 +47,7 @@ describe MailWorker do
|
|
47
47
|
expect(worker.perform(identifier, nil)).to eq nil
|
48
48
|
end
|
49
49
|
|
50
|
-
it '
|
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).
|
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=
|
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=
|
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/
|
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['
|
6
|
-
|
7
|
-
|
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.
|
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:
|
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
|
-
-
|
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.
|
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
|