roo_on_rails 1.20.0 → 2.1.0

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.
Files changed (39) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +398 -282
  3. data/.circleci/config.yml.erb +63 -21
  4. data/.codecov.yml +3 -0
  5. data/Appraisals +24 -11
  6. data/CHANGELOG.md +39 -0
  7. data/README.md +20 -31
  8. data/appraise +1 -1
  9. data/exe/roo_on_rails +5 -0
  10. data/gemfiles/rails_4.gemfile +3 -1
  11. data/gemfiles/rails_5.gemfile +2 -1
  12. data/gemfiles/rails_5_1.gemfile +3 -2
  13. data/gemfiles/rails_5_2.gemfile +15 -0
  14. data/gemfiles/{rails_3.gemfile → rails_6.gemfile} +5 -4
  15. data/lib/roo_on_rails.rb +1 -4
  16. data/lib/roo_on_rails/checks/documentation/playbook_template.md +0 -4
  17. data/lib/roo_on_rails/concerns/require_api_key.rb +0 -1
  18. data/lib/roo_on_rails/config.rb +0 -8
  19. data/lib/roo_on_rails/default.env +0 -13
  20. data/lib/roo_on_rails/rack/populate_env_from_jwt.rb +25 -4
  21. data/lib/roo_on_rails/railties/database.rb +11 -10
  22. data/lib/roo_on_rails/railties/env.rb +3 -5
  23. data/lib/roo_on_rails/railties/google_oauth.rb +4 -6
  24. data/lib/roo_on_rails/railties/http.rb +34 -32
  25. data/lib/roo_on_rails/railties/roo_identity.rb +12 -8
  26. data/lib/roo_on_rails/railties/{sidekiq.rb → sidekiq_integration.rb} +18 -18
  27. data/lib/roo_on_rails/version.rb +1 -1
  28. data/roo_on_rails.gemspec +5 -6
  29. metadata +28 -57
  30. data/.travis.yml +0 -34
  31. data/README.routemaster_client.md +0 -103
  32. data/lib/roo_on_rails/railties/logging.rb +0 -25
  33. data/lib/roo_on_rails/railties/new_relic.rb +0 -32
  34. data/lib/roo_on_rails/railties/routemaster.rb +0 -42
  35. data/lib/roo_on_rails/routemaster/lifecycle_events.rb +0 -64
  36. data/lib/roo_on_rails/routemaster/publish_lifecycle_events.rb +0 -13
  37. data/lib/roo_on_rails/routemaster/publisher.rb +0 -74
  38. data/lib/roo_on_rails/routemaster/publishers.rb +0 -27
  39. data/lib/roo_on_rails/tasks/newrelic.rake +0 -25
@@ -1,18 +1,36 @@
1
1
  # To update the build configuration, edit the "builds" array below and run:
2
2
  # erb .circleci/config.yml.erb > .circleci/config.yml
3
+
4
+
5
+ # The default Ruby containers modify the behaviour of Bundler in a way that breaks
6
+ # the CI since it makes it harder to run multiple apps in a single container
7
+ # See https://github.com/docker-library/docs/pull/1221/files for a summary
8
+ # Unsettting these variables restores the default behaviour:-
9
+ # * BUNDLE_APP_CONFIG
10
+ # * GEM_HOME
11
+ # * BUNDLE_PATH
12
+ # * BUNDLE_BIN
13
+ common_ruby_environment: &common_ruby_environment
14
+ environment:
15
+ RAILS_ENV: test
16
+ PGHOST: 127.0.0.1
17
+ PGUSER: postgres
18
+ POSTGRES_HOST_AUTH_METHOD: "trust"
19
+ common_pg_environment_vars: &common_pg_environment_vars
20
+ POSTGRES_USER: postgres
21
+ POSTGRES_DB: ror_testapp_test
22
+ POSTGRES_HOST_AUTH_METHOD: "trust"
3
23
  <%
4
24
  builds = [
5
- ['2.2.6', 'rails_3'],
6
- ['2.3.3', 'rails_3'],
7
- ['2.2.6', 'rails_4'],
8
- ['2.3.3', 'rails_4'],
9
- ['2.4.0', 'rails_4'],
10
- ['2.2.6', 'rails_5'],
11
- ['2.3.3', 'rails_5'],
12
- ['2.4.0', 'rails_5'],
13
- ['2.2.6', 'rails_5_1'],
14
- ['2.3.3', 'rails_5_1'],
15
- ['2.4.0', 'rails_5_1'],
25
+ ['2.4.6', 'rails_4'],
26
+ ['2.4.6', 'rails_5'],
27
+ ['2.4.6', 'rails_5_1'],
28
+ ['2.4.6', 'rails_5_2'],
29
+ ['2.5.5', 'rails_4'],
30
+ ['2.5.5', 'rails_5'],
31
+ ['2.5.5', 'rails_5_1'],
32
+ ['2.5.5', 'rails_5_2'],
33
+ ['2.6.5', 'rails_6']
16
34
  ]
17
35
  %>
18
36
  version: 2
@@ -20,11 +38,13 @@ jobs:
20
38
  <% builds.each do |ruby,variant| %>
21
39
  build_<%= ruby %>_<%= variant %>:
22
40
  docker:
23
- - image: deliveroo/multiruby
41
+ - image: ruby:<%= ruby %>-alpine
42
+ <<: *common_ruby_environment
24
43
  - image: postgres:9.6-alpine
25
44
  environment:
26
45
  PGDATA: /dev/shm/pgdata
27
- - image: redis:3-alpine
46
+ <<: *common_pg_environment_vars
47
+ - image: redis:4-alpine
28
48
  steps:
29
49
  - checkout
30
50
 
@@ -36,28 +56,50 @@ jobs:
36
56
  ln -s /dev/shm/tmp ~/project/tmp
37
57
 
38
58
  - run:
39
- name: Select build variant (Ruby <%= ruby %>, <%= variant %>)
59
+ name: Setup requirements
60
+ command: |
61
+ apk add --update git bash build-base postgresql-dev sqlite-dev tzdata nodejs
62
+
63
+ - run:
64
+ name: Configure bundler
40
65
  command: |
41
- rbenv local <%= ruby %> ;
42
- gem install bundler ;
66
+ unset \
67
+ BUNDLE_APP_CONFIG \
68
+ GEM_HOME \
69
+ BUNDLE_PATH \
70
+ BUNDLE_BIN
43
71
  bundle config --local gemfile $PWD/gemfiles/<%= variant %>.gemfile
44
72
 
45
73
  - restore_cache:
46
- keys:
74
+ keys:
47
75
  - v2-bundle-<%= ruby %>-<%= variant %>-{{ .Branch }}
48
76
  - v2-bundle-<%= ruby %>-<%= variant %>
49
77
  - v2-bundle-<%= ruby %>
50
78
 
51
- - run:
52
- name: Install dependencies
79
+ - run:
80
+ name: Install bundle
53
81
  command: |
82
+ unset \
83
+ BUNDLE_APP_CONFIG \
84
+ GEM_HOME \
85
+ BUNDLE_PATH \
86
+ BUNDLE_BIN
54
87
  bundle install --jobs=3 --retry=3 --path=$PWD/vendor/bundle
55
88
 
89
+ # The default Ruby containers modify the behaviour of Bundler in a way that breaks
90
+ # the CI since it makes it harder to run multiple apps in a single container
91
+ # See https://github.com/docker-library/docs/pull/1221/files for a summary
92
+ # Unsettting the variables restores the default behaviour
56
93
  - run:
57
94
  name: Run test suite
58
95
  command: |
59
- unset RACK_ENV &&
60
- unset RAILS_ENV &&
96
+ unset \
97
+ RACK_ENV \
98
+ RAILS_ENV \
99
+ BUNDLE_APP_CONFIG \
100
+ GEM_HOME \
101
+ BUNDLE_PATH \
102
+ BUNDLE_BIN
61
103
  bundle exec rspec
62
104
 
63
105
  - save_cache:
@@ -2,6 +2,9 @@ codecov:
2
2
  notify:
3
3
  require_ci_to_pass: yes
4
4
 
5
+ ignore:
6
+ - "spec/support"
7
+
5
8
  coverage:
6
9
  precision: 2
7
10
  round: down
data/Appraisals CHANGED
@@ -1,24 +1,37 @@
1
- appraise 'rails-3' do
2
- gem 'rails', '~> 3.2'
3
- gem 'sqlite3'
4
- gem 'sidekiq', '< 5'
5
- gem 'pg', '~> 0.11'
6
- end
7
-
8
1
  appraise 'rails-4' do
9
2
  gem 'rails', '~> 4.2'
10
- gem 'sqlite3'
3
+ gem 'sqlite3', '~> 1.3.6'
11
4
  gem 'pg', '~> 0.11'
5
+ gem 'sprockets', '~>3.0'
6
+ gem 'rake', '13.0.1'
12
7
  end
13
8
 
14
9
  appraise 'rails-5' do
15
10
  gem 'rails', '~> 5.0.0'
16
- gem 'sqlite3'
11
+ gem 'sqlite3', '~> 1.3.6'
17
12
  gem 'pg', '~> 0.18'
13
+ gem 'rake', '13.0.1'
18
14
  end
19
15
 
20
16
  appraise 'rails-5-1' do
21
- gem 'rails', '~> 5.1'
22
- gem 'sqlite3'
17
+ gem 'rails', '~> 5.1.0'
18
+ gem 'sqlite3', '~> 1.3.6'
19
+ gem 'pg', '~> 0.18'
20
+ gem 'rake', '13.0.1'
21
+ end
22
+
23
+ appraise 'rails-5-2' do
24
+ gem 'rails', '~> 5.2.0'
25
+ gem 'bootsnap', '>= 1.1.0', require: false
26
+ gem 'sqlite3', '~> 1.3.6'
27
+ gem 'pg', '~> 0.18'
28
+ gem 'rake', '13.0.1'
29
+ end
30
+
31
+ appraise 'rails-6' do
32
+ gem 'rails', '~> 6.0.3'
33
+ gem 'bootsnap', '>= 1.1.0', require: false
34
+ gem 'sqlite3', '~> 1.4'
23
35
  gem 'pg', '~> 0.18'
36
+ gem 'rake', '13.0.1'
24
37
  end
@@ -1,3 +1,42 @@
1
+ # v2.1.0
2
+
3
+ Features:
4
+
5
+ - Rails 6 compatibility
6
+
7
+ # v2.0.0-pre.2
8
+
9
+ Features:
10
+
11
+ - Removes routemaster
12
+
13
+ # v2.0.0-pre.1
14
+
15
+ Features:
16
+
17
+ - Remove New Relic
18
+
19
+ # v1.23.0 (2019-04-24)
20
+
21
+ Features:
22
+
23
+ - Setting DATABASE_STATEMENT_TIMEOUT to -1 will prevent the app setting any timeout.
24
+ Setting timeouts from the app conflicts with PGBouncer and should be disabled if
25
+ using one.
26
+
27
+ # v1.22.0 (2018-08-29)
28
+
29
+ Features:
30
+
31
+ - Allows specifying `BASE_NEW_RELIC_APP_NAME` instead of `NEW_RELIC_APP_NAME`, which reports to New Relic per Hopper service.
32
+
33
+ # v1.21.0 (2018-03-27)
34
+
35
+ Features:
36
+
37
+ - Rails 5.2 compatibility
38
+
39
+
1
40
  # v1.20.0 (2018-03-27)
2
41
 
3
42
  Features:
data/README.md CHANGED
@@ -17,17 +17,20 @@
17
17
 
18
18
  - [Installation](#installation)
19
19
  - [Library usage](#library-usage)
20
- - [New Relic configuration](#new-relic-configuration)
21
20
  - [Rack middleware](#rack-middleware)
21
+ - [Disabling SSL enforcement](#disabling-ssl-enforcement)
22
22
  - [Database configuration](#database-configuration)
23
23
  - [Sidekiq](#sidekiq)
24
24
  - [HireFire](#hirefire)
25
+ - [For Web Dynos](#for-web-dynos)
26
+ - [For Sidekiq Workers](#for-sidekiq-workers)
25
27
  - [Logging](#logging)
26
28
  - [Identity](#identity)
27
29
  - [Google OAuth authentication](#google-oauth-authentication)
28
30
  - [Datadog Integration](#datadog-integration)
29
- - [Routemaster Client](#routemaster-client)
30
- - [API Authentication ](#api-authentication)
31
+ - [Heroku metrics](#heroku-metrics)
32
+ - [Custom application metrics](#custom-application-metrics)
33
+ - [API Authentication](#api-authentication)
31
34
  - [Command features](#command-features)
32
35
  - [Usage](#usage)
33
36
  - [Description](#description)
@@ -48,11 +51,6 @@ Remove the following gems from your Gemfile, as they're provided and configured
48
51
  by `roo_on_rails`:
49
52
 
50
53
  - `dotenv`
51
- - `newrelic_rpm`
52
-
53
- Remove the following configuration files:
54
-
55
- - `newrelic.yml` or `config/newrelic.yml`
56
54
 
57
55
  Also remove any other gem-specific configuration from your repository.
58
56
 
@@ -62,23 +60,19 @@ And then execute:
62
60
 
63
61
  Then re-run your test suite to make sure everything is shipshape.
64
62
 
65
- ## Library usage
63
+ ## Running specs
66
64
 
67
- ### New Relic configuration
65
+ To run the specs locally, you will need to run the following command:
66
+
67
+ ```ruby
68
+ bundle config --local gemfile $PWD/gemfiles/<%= variant %>.gemfile
69
+ ```
68
70
 
69
- We enforce configuration of New Relic.
71
+ Where `<%= variant %>` is the Rails version you'd like to test (e.g. `rails_5_2`).
70
72
 
71
- 1. Your app must be loaded with a `NEW_RELIC_LICENSE_KEY` environment variable,
72
- otherwise it will abort.
73
- 2. No `new_relic.yml` file may be presentin your app. Overrides to New Relic settings
74
- through [environment
75
- variables](https://docs.newrelic.com/docs/agents/ruby-agent/installation-configuration/ruby-agent-configuration)
76
- is permitted.
77
- 3. The `NEW_RELIC_APP_NAME` environment variable must be defined
78
- such that the app will be properly registered in New Relic.
73
+ `bundle exec rspec` should then work as normal.
79
74
 
80
- No further configuration is required for production apps as the gem configures
81
- our standard settings.
75
+ ## Library usage
82
76
 
83
77
  ### Rack middleware
84
78
 
@@ -104,6 +98,11 @@ To do this, you can set the `ROO_ON_RAILS_DISABLE_SSL_ENFORCEMENT` to `YES`.
104
98
  The database statement timeout will be set to a low value by default. Use
105
99
  `DATABASE_STATEMENT_TIMEOUT` (milliseconds, default 200) to customise.
106
100
 
101
+ When using a PGBouncer, setting the timeout from the application will cause
102
+ inconsistent results. The timeout should always be set using the RDS parameter
103
+ group in thise case. To prevent the app trying to set a timeout, set
104
+ `DATABASE_STATEMENT_TIMEOUT` to -1.
105
+
107
106
  For database creation and migration (specifically the `db:create`, `db:migrate`,
108
107
  `db:migrate:down` and `db:rollback` tasks) a much higher statement timeout is
109
108
  set by default. Use `MIGRATION_STATEMENT_TIMEOUT` (milliseconds, default 10000)
@@ -302,16 +301,6 @@ The following tags will automatically be added to all your metrics and their val
302
301
  * `HOPPER_APP_NAME`+`HOPPER_ECS_CLUSTER_NAME` – automatically set by Hopper (e.g. `notifications-staging`);
303
302
  * Defaults to `unknown`.
304
303
 
305
- ### Routemaster Client
306
-
307
- When `ROUTEMASTER_ENABLED` is set to `true` we attempt to configure [`routemaster-client`](https://github.com/deliveroo/routemaster-client) on your application. In order for this to happen, set the following environment variables:
308
-
309
- * `ROUTEMASTER_URL` – the full URL of your Routemaster application (mandatory)
310
- * `ROUTEMASTER_UUID` – the UUID of your application, e.g. `logistics-dashboard` (mandatory)
311
- * `ROUTEMASTER_VERIFY_SSL` – set to false if your Routemaster application is not served with a valid cert. (optional)
312
-
313
- If you then want to enable the publishing of events onto the event bus, you need to set `ROUTEMASTER_PUBLISHING_ENABLED` to `true` and implement publishers as needed. An example of how to do this is detailed in [`README.routemaster_client.md`](README.routemaster_client.md).
314
-
315
304
  ### API Authentication
316
305
 
317
306
  RooOnRails provides a concern which will make adding rotatable API authentication to your service a breeze:
data/appraise CHANGED
@@ -5,7 +5,7 @@
5
5
  require 'yaml'
6
6
 
7
7
 
8
- RUBIES = YAML.load_file('.travis.yml')['rvm']
8
+ RUBIES = ['2.4.5', '2.5.5', '2.6.5']
9
9
  APPRAISALS = `appraisal list`.strip.split(/\s+/)
10
10
 
11
11
  # setup
@@ -36,6 +36,11 @@ module RooOnRails
36
36
  end
37
37
 
38
38
  def run
39
+ # Force output to be unbuffered, otherwise the CI
40
+ # tests will fail because the parent app won't see
41
+ # the log output from the test app
42
+ $stdout.sync = true
43
+ $stderr.sync = true
39
44
  _assert_argv_length(0..0)
40
45
  require 'roo_on_rails/sidekiq/loader'
41
46
  RooOnRails::Sidekiq::Loader.run
@@ -7,7 +7,9 @@ gem "guard-rspec"
7
7
  gem "appraisal"
8
8
  gem "webmock"
9
9
  gem "pg", "~> 0.11"
10
- gem "sqlite3"
10
+ gem "sqlite3", "~> 1.3.6"
11
11
  gem "rails", "~> 4.2"
12
+ gem "sprockets", "~>3.0"
13
+ gem "rake", "13.0.1"
12
14
 
13
15
  gemspec path: "../"
@@ -7,7 +7,8 @@ gem "guard-rspec"
7
7
  gem "appraisal"
8
8
  gem "webmock"
9
9
  gem "pg", "~> 0.18"
10
- gem "sqlite3"
10
+ gem "sqlite3", "~> 1.3.6"
11
11
  gem "rails", "~> 5.0.0"
12
+ gem "rake", "13.0.1"
12
13
 
13
14
  gemspec path: "../"
@@ -7,7 +7,8 @@ gem "guard-rspec"
7
7
  gem "appraisal"
8
8
  gem "webmock"
9
9
  gem "pg", "~> 0.18"
10
- gem "sqlite3"
11
- gem "rails", "~> 5.1"
10
+ gem "sqlite3", "~> 1.3.6"
11
+ gem "rails", "~> 5.1.0"
12
+ gem "rake", "13.0.1"
12
13
 
13
14
  gemspec path: "../"
@@ -0,0 +1,15 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "guard"
6
+ gem "guard-rspec"
7
+ gem "appraisal"
8
+ gem "webmock"
9
+ gem "pg", "~> 0.18"
10
+ gem "sqlite3", "~> 1.3.6"
11
+ gem "rails", "~> 5.2.0"
12
+ gem "bootsnap", ">= 1.1.0", require: false
13
+ gem "rake", "13.0.1"
14
+
15
+ gemspec path: "../"
@@ -6,9 +6,10 @@ gem "guard"
6
6
  gem "guard-rspec"
7
7
  gem "appraisal"
8
8
  gem "webmock"
9
- gem "pg", "~> 0.11"
10
- gem "sqlite3"
11
- gem "rails", "~> 3.2"
12
- gem "sidekiq", "< 5"
9
+ gem "pg", "~> 0.18"
10
+ gem "sqlite3", "~> 1.4"
11
+ gem "rails", "~> 6.0.3"
12
+ gem "bootsnap", ">= 1.1.0", require: false
13
+ gem "rake", "13.0.1"
13
14
 
14
15
  gemspec path: "../"
@@ -5,14 +5,11 @@ end
5
5
 
6
6
  if defined?(Rails)
7
7
  require 'dotenv/rails-now'
8
- require 'roo_on_rails/railties/logging'
9
8
  require 'roo_on_rails/railties/env'
10
- require 'roo_on_rails/railties/new_relic'
11
9
  require 'roo_on_rails/railties/database'
12
10
  require 'roo_on_rails/railties/http'
13
- require 'roo_on_rails/railties/sidekiq'
11
+ require 'roo_on_rails/railties/sidekiq_integration'
14
12
  require 'roo_on_rails/railties/rake_tasks'
15
13
  require 'roo_on_rails/railties/google_oauth'
16
- require 'roo_on_rails/railties/routemaster'
17
14
  require 'roo_on_rails/railties/roo_identity'
18
15
  end
@@ -20,10 +20,6 @@ As a last resort, in an emergency, the following people have experience working
20
20
 
21
21
  FIXME: A very brief high-level explanation of what this functional area does
22
22
 
23
- #### 🚨 FIXME: a New Relic alert which might be raised - named so it can be searched for
24
-
25
- FIXME: A description of the New Relic alert, what it means for the service, and what actions should be taken to remedy the situation.
26
-
27
23
  #### 🚨 FIXME: an action which might need to be taken during an incident
28
24
 
29
25
  FIXME: A description of how to perform this action, and any side-effects that the on-call engineer should be aware of.
@@ -58,7 +58,6 @@ module RooOnRails
58
58
  def valid?(service_name, client_key)
59
59
  return false unless whitelisted?(service_name)
60
60
 
61
- NewRelic::Agent.add_custom_attributes(httpBasicUserId: service_name) if defined?(NewRelic)
62
61
  ClientApiKeys.instance.valid?(service_name, client_key)
63
62
  end
64
63