suspenders 1.52.0 → 1.55.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/.standard.yml +2 -0
- data/.travis.yml +6 -3
- data/CONTRIBUTING.md +15 -15
- data/GOALS.md +65 -0
- data/Gemfile +1 -1
- data/NEWS.md +52 -0
- data/README.md +6 -5
- data/Rakefile +6 -5
- data/docs/heroku_deploy.md +19 -0
- data/lib/suspenders.rb +7 -0
- data/lib/suspenders/actions.rb +2 -2
- data/lib/suspenders/adapters/heroku.rb +27 -14
- data/lib/suspenders/app_builder.rb +42 -111
- data/lib/suspenders/generators/advisories_generator.rb +15 -0
- data/lib/suspenders/generators/analytics_generator.rb +1 -1
- data/lib/suspenders/generators/app_generator.rb +36 -58
- data/lib/suspenders/generators/base.rb +40 -1
- data/lib/suspenders/generators/ci_generator.rb +19 -9
- data/lib/suspenders/generators/db_optimizations_generator.rb +5 -17
- data/lib/suspenders/generators/factories_generator.rb +2 -2
- data/lib/suspenders/generators/forms_generator.rb +1 -1
- data/lib/suspenders/generators/inline_svg_generator.rb +14 -0
- data/lib/suspenders/generators/jobs_generator.rb +4 -4
- data/lib/suspenders/generators/js_driver_generator.rb +7 -4
- data/lib/suspenders/generators/json_generator.rb +1 -1
- data/lib/suspenders/generators/lint_generator.rb +5 -0
- data/lib/suspenders/generators/preloader_generator.rb +122 -0
- data/lib/suspenders/generators/production/compression_generator.rb +14 -0
- data/lib/suspenders/generators/production/deployment_generator.rb +1 -12
- data/lib/suspenders/generators/production/email_generator.rb +9 -12
- data/lib/suspenders/generators/production/manifest_generator.rb +8 -7
- data/lib/suspenders/generators/production/single_redirect.rb +15 -0
- data/lib/suspenders/generators/production/timeout_generator.rb +3 -2
- data/lib/suspenders/generators/profiler_generator.rb +35 -0
- data/lib/suspenders/generators/runner_generator.rb +48 -0
- data/lib/suspenders/generators/staging/pull_requests_generator.rb +4 -12
- data/lib/suspenders/generators/static_generator.rb +5 -1
- data/lib/suspenders/generators/stylelint_generator.rb +2 -1
- data/lib/suspenders/generators/stylesheet_base_generator.rb +7 -8
- data/lib/suspenders/generators/testing_generator.rb +3 -14
- data/lib/suspenders/version.rb +6 -6
- data/spec/adapters/heroku_spec.rb +36 -10
- data/spec/expand_json_spec.rb +89 -0
- data/spec/fakes/bin/heroku +1 -1
- data/spec/fakes/bin/hub +1 -1
- data/spec/features/advisories_spec.rb +24 -0
- data/spec/features/api_spec.rb +1 -1
- data/spec/features/ci_spec.rb +31 -0
- data/spec/features/cli_help_spec.rb +4 -4
- data/spec/features/db_optimizations_spec.rb +19 -0
- data/spec/features/heroku_spec.rb +9 -16
- data/spec/features/inline_svg_spec.rb +10 -0
- data/spec/features/lint_spec.rb +26 -0
- data/spec/features/new_project_spec.rb +40 -60
- data/spec/features/preloader_spec.rb +25 -0
- data/spec/features/production/compression_spec.rb +23 -0
- data/spec/features/production/email_spec.rb +10 -10
- data/spec/features/production/manifest_spec.rb +16 -14
- data/spec/features/production/single_redirect_spec.rb +25 -0
- data/spec/features/profiler_spec.rb +20 -0
- data/spec/features/runner_spec.rb +30 -0
- data/spec/features/staging/pull_requests_spec.rb +1 -1
- data/spec/features/static_spec.rb +17 -0
- data/spec/features/stylelint_spec.rb +7 -7
- data/spec/spec_helper.rb +3 -3
- data/spec/support/contain_json_matcher.rb +16 -10
- data/spec/support/fake_github.rb +3 -3
- data/spec/support/fake_heroku.rb +8 -8
- data/spec/support/project_files.rb +12 -0
- data/spec/support/rails_template.rb +1 -0
- data/spec/support/suspenders.rb +21 -19
- data/suspenders.gemspec +20 -20
- data/templates/Gemfile.erb +2 -10
- data/templates/_javascript.html.erb +1 -1
- data/templates/application.scss +0 -1
- data/templates/bin_auto_migrate +5 -0
- data/templates/bin_deploy +0 -2
- data/templates/bin_setup +2 -2
- data/templates/bin_setup_review_app.erb +0 -1
- data/templates/capybara_silence_puma.rb +1 -0
- data/templates/chromedriver.rb +14 -4
- data/templates/descriptions/advisories.md +5 -0
- data/templates/descriptions/analytics.md +4 -0
- data/templates/descriptions/ci.md +4 -0
- data/templates/descriptions/compression.md +4 -0
- data/templates/descriptions/db_optimizations.md +2 -0
- data/templates/descriptions/deployment.md +5 -0
- data/templates/descriptions/email.md +9 -0
- data/templates/descriptions/factories.md +12 -0
- data/templates/descriptions/force_tls.md +1 -0
- data/templates/descriptions/forms.md +1 -0
- data/templates/descriptions/inline_svg.md +2 -0
- data/templates/descriptions/jobs.md +3 -0
- data/templates/descriptions/js_driver.md +4 -0
- data/templates/descriptions/json.md +1 -0
- data/templates/descriptions/lint.md +3 -0
- data/templates/descriptions/manifest.md +2 -0
- data/templates/descriptions/preloader.md +3 -0
- data/templates/descriptions/profiler.md +7 -0
- data/templates/descriptions/pull_requests.md +4 -0
- data/templates/descriptions/runner.md +10 -0
- data/templates/descriptions/single_redirect.md +1 -0
- data/templates/descriptions/static.md +5 -0
- data/templates/descriptions/stylelint.md +3 -0
- data/templates/descriptions/stylesheet_base.md +4 -0
- data/templates/descriptions/testing.md +9 -0
- data/templates/descriptions/timeout.md +4 -0
- data/templates/descriptions/views.md +8 -0
- data/templates/errors.rb +3 -3
- data/templates/hound.yml +1 -2
- data/templates/inline_svg.rb +3 -0
- data/templates/partials/ci_simplecov.rb +14 -0
- data/templates/partials/db_optimizations_configuration.rb +7 -0
- data/templates/partials/deployment_readme.md +8 -0
- data/templates/partials/email_smtp.rb +2 -0
- data/templates/partials/profiler_readme.md +8 -0
- data/templates/partials/pull_requests_config.rb +4 -0
- data/templates/partials/runner_readme.md +31 -0
- data/templates/partials/runner_setup.rb +2 -0
- data/templates/rack_mini_profiler.rb +2 -0
- data/templates/rails_helper.rb +4 -1
- data/templates/{dotfiles/.env → sample_env} +0 -2
- data/templates/spec_helper.rb +4 -7
- data/templates/spring.rb +6 -0
- data/templates/suspenders_gitignore +1 -1
- metadata +103 -17
- data/templates/browserslist +0 -3
- data/templates/dotfiles/.ctags +0 -2
- data/templates/puma.rb +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61b9cb4553f3ffae97642ec3aa15c218be90a047c89c3ba0373fad360dd942fc
|
4
|
+
data.tar.gz: 962cf7626ca047b3a8e414ead6043476778717c5647dd0928efc5fd3b0b65ec6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8905a5aeafa593a8d81430529f5d7bbbe1a532d87da0c7039834aa84122113f817f1ff180c055929146a40c79b772254a5faf4625d4ec49c30bc48983d4c61a2
|
7
|
+
data.tar.gz: 39a8250d0f32c5d09990f786625e3864400e8a41ad27fffe44d69bf2d6365c8fe765db2b99eb40d17ecf9ef86daca7a02d851b0ed9f69f6aa927558787ff3894
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.6.
|
1
|
+
2.6.6
|
data/.standard.yml
ADDED
data/.travis.yml
CHANGED
@@ -1,12 +1,15 @@
|
|
1
1
|
language: ruby
|
2
|
-
rvm: 2.6.
|
2
|
+
rvm: 2.6.6
|
3
3
|
cache: bundler
|
4
|
-
sudo: false
|
5
4
|
before_install:
|
5
|
+
- nvm install 13.12.0
|
6
6
|
- git config --global user.name 'Travis CI'
|
7
7
|
- git config --global user.email 'travis-ci@example.com'
|
8
8
|
- gem update --system
|
9
|
-
- gem install bundler
|
9
|
+
- gem install bundler
|
10
|
+
- bundler config --global disable_platform_warnings true
|
10
11
|
install: bundle install
|
11
12
|
notifications:
|
12
13
|
email: false
|
14
|
+
services:
|
15
|
+
- postgresql
|
data/CONTRIBUTING.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Contributing
|
2
2
|
|
3
|
-
We love pull requests from everyone. By participating in this project, you
|
4
|
-
to abide by the thoughtbot [code of conduct].
|
3
|
+
We love pull requests from everyone. By participating in this project, you
|
4
|
+
agree to abide by the thoughtbot [code of conduct].
|
5
5
|
|
6
6
|
[code of conduct]: https://thoughtbot.com/open-source-code-of-conduct
|
7
7
|
|
@@ -17,17 +17,15 @@ Make sure the tests pass:
|
|
17
17
|
|
18
18
|
rake
|
19
19
|
|
20
|
-
Make your change.
|
21
|
-
|
22
|
-
Follow our [style guide][style].
|
23
|
-
Make the tests pass:
|
20
|
+
Make your change. Write tests. Follow our [style guide][style]. Make the tests
|
21
|
+
pass:
|
24
22
|
|
25
23
|
[style]: https://github.com/thoughtbot/guides/tree/master/style
|
26
24
|
|
27
25
|
rake
|
28
26
|
|
29
|
-
Mention how your changes affect the project to other developers and users in
|
30
|
-
`NEWS.md` file.
|
27
|
+
Mention how your changes affect the project to other developers and users in
|
28
|
+
the `NEWS.md` file.
|
31
29
|
|
32
30
|
Write a [good commit message][commit].
|
33
31
|
Push to your fork.
|
@@ -36,19 +34,21 @@ Push to your fork.
|
|
36
34
|
[commit]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
|
37
35
|
[pr]: https://github.com/thoughtbot/suspenders/compare/
|
38
36
|
|
39
|
-
If [Hound] catches style violations,
|
40
|
-
fix them.
|
37
|
+
If [Hound] catches style violations, fix them.
|
41
38
|
|
42
39
|
[hound]: https://houndci.com
|
43
40
|
|
44
|
-
Wait for us.
|
45
|
-
We
|
46
|
-
|
41
|
+
Wait for us. We try to at least comment on pull requests within one business
|
42
|
+
day. We may suggest changes.
|
43
|
+
|
44
|
+
## Generators
|
45
|
+
|
46
|
+
All new contributions must be within the generator framework, as described in
|
47
|
+
[our goals](GOALS.md).
|
47
48
|
|
48
49
|
## Versions
|
49
50
|
|
50
|
-
To update the Ruby version,
|
51
|
-
change `.ruby-version` and `.travis.yml`.
|
51
|
+
To update the Ruby version, change `.ruby-version` and `.travis.yml`.
|
52
52
|
|
53
53
|
If you see this error while running tests:
|
54
54
|
|
data/GOALS.md
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
# Goals
|
2
|
+
|
3
|
+
Suspenders is an opinionated platform for adding functionality to a Rails app.
|
4
|
+
It encodes thoughtbot's opinions and decisions in tooling and best practices.
|
5
|
+
|
6
|
+
We are transitioning to a library of generators. All new functionality must be
|
7
|
+
in the form of a well-tested, self-contained generator that fits within the
|
8
|
+
Suspenders framework.
|
9
|
+
|
10
|
+
## History and transitions
|
11
|
+
|
12
|
+
In the beginning suspenders was a git repo that we would clone then use as a
|
13
|
+
template for starting a new Rails app.
|
14
|
+
|
15
|
+
It then became a command-line tool that would generate a Rails app then modify
|
16
|
+
the files in place. Over time, and with intention, most of the modifications
|
17
|
+
were focused on modifying the Gemfile.
|
18
|
+
|
19
|
+
This was identified as unscalable and we have been slowing been moving in a new
|
20
|
+
direction: a library of generators.
|
21
|
+
|
22
|
+
## The future
|
23
|
+
|
24
|
+
The problem with a script that adds a bunch of gem requirements to the Gemfile
|
25
|
+
is: what if you don't want all those gems? Suspenders adds gem requirements and
|
26
|
+
then configures each one. On a typical project we would run Suspenders then
|
27
|
+
spend the rest of the day un-doing the parts we don't want.
|
28
|
+
|
29
|
+
In 2015, [PR #511], we discussed what we want: a gem that is a library of
|
30
|
+
generators that we can run on demand. The ideal future workflow goes like this:
|
31
|
+
|
32
|
+
[PR #511]: https://github.com/thoughtbot/suspenders/pull/511
|
33
|
+
|
34
|
+
1. `rails new my-cool-project && cd my-cool-project`
|
35
|
+
2. `echo "gem 'suspenders', group: :development" >> Gemfile && bundle`
|
36
|
+
3. `rails g suspenders:ci`
|
37
|
+
4. Repeat with other generators as needed.
|
38
|
+
|
39
|
+
In this future you would use `rails new` as normal and instead add Suspenders
|
40
|
+
as a development gem. This gives you access to opinionated generators for
|
41
|
+
adding (and removing!) whole functionality, but on demand and with your
|
42
|
+
knowledge.
|
43
|
+
|
44
|
+
The generators are all named to generically describe what functionality they
|
45
|
+
add. In this way we can change our opinions on the implementation without
|
46
|
+
needing to know new generator names. For example, `suspenders:ci` could
|
47
|
+
configure the app for CircleCI now, but down the road we may decide to switch
|
48
|
+
everything to Jenkins; we could update the implementation of the generator
|
49
|
+
without changing its name.
|
50
|
+
|
51
|
+
## From here to there
|
52
|
+
|
53
|
+
The transition looks like this:
|
54
|
+
|
55
|
+
1. Introduce a `suspenders:all` generator that runs Suspenders against an
|
56
|
+
existing Rails app.
|
57
|
+
2. Change the Suspenders program to create a Rails app, add Suspenders to the
|
58
|
+
Gemfile, and run `suspenders:all` inside of it.
|
59
|
+
3. Slowly split functionality out from the "all" generator and into smaller,
|
60
|
+
well-tested, self-contained generators. The "all" generator invokes these
|
61
|
+
generators.
|
62
|
+
4. Once that is completed -- once "all" _only_ calls other generators -- then
|
63
|
+
remove the Suspenders program and only distribute the gem.
|
64
|
+
|
65
|
+
We are on step (3), and it's a big one. Come help out!
|
data/Gemfile
CHANGED
data/NEWS.md
CHANGED
@@ -1,3 +1,55 @@
|
|
1
|
+
Unreleased
|
2
|
+
|
3
|
+
1.55.1 (September 11, 2020)
|
4
|
+
|
5
|
+
* Fixed: Missing newline in generated development config
|
6
|
+
|
7
|
+
1.55.0 (July 15, 2020)
|
8
|
+
|
9
|
+
* Changed: lint generator to install standard instead of RuboCop
|
10
|
+
* Changed: profile generator and timeout generator to write to `.sample.env`
|
11
|
+
instead of `.env`
|
12
|
+
|
13
|
+
1.54.1 (June 30, 2020)
|
14
|
+
|
15
|
+
* Fixed: invalid Gemfile entry for bundler-audit
|
16
|
+
* Fixed: Deprecation warning for `Bundler.with_clean_env`
|
17
|
+
|
18
|
+
1.54.0 (June 24, 2020)
|
19
|
+
|
20
|
+
* New generator: `suspenders:single_redirect` for setting up `Rack::CanonicalHost`
|
21
|
+
* New generator: `suspenders:production:compression` for setting up `Rack::Deflater`
|
22
|
+
* New generator: `suspenders:preloader` for managing spring
|
23
|
+
* New generator: `suspenders:advisories` for installing bundler-audit
|
24
|
+
* New generator: `suspenders:profiler` for setting up rack\_mini\_profiler
|
25
|
+
* New generator: `suspenders:runner` for making an app runnable locally
|
26
|
+
* Added: generator descriptions
|
27
|
+
* Added: Heroku release phase for running database migrations
|
28
|
+
* Added: automatic buildpack configuration for Heroku
|
29
|
+
* Added: system test configuration to opt into JavaScript as needed
|
30
|
+
* Added: spring-watcher-listen gem
|
31
|
+
* Changed: from `chromedriver-helper` to `webdrivers`
|
32
|
+
* Changed: replace `heroku join` calls with `heroku apps:info` in `bin/setup`
|
33
|
+
* Changed: check environment instead of `DATABASE\_URL` in test helper
|
34
|
+
* Fixed: `ExpandJson` merging
|
35
|
+
* Fixed: spacing in the generated config file
|
36
|
+
* Upgraded: bitters to version 2.x
|
37
|
+
* Upgraded: bourbon to version 6.x
|
38
|
+
* Upgraded: Ruby to version 2.6.6
|
39
|
+
* Removed: neat gem
|
40
|
+
* Removed: ctags configuration
|
41
|
+
* Removed: custom placeholder directories
|
42
|
+
* Removed: customization for error pages
|
43
|
+
* Removed: custom Puma config
|
44
|
+
|
45
|
+
1.53.0 (August 23, 2019)
|
46
|
+
* Upgraded: Rails 6.0.
|
47
|
+
* New generator: `suspenders:inline_svg` for setting up the inline_svg gem.
|
48
|
+
* Changed: silence Puma's startup messages in JS specs.
|
49
|
+
* Changed: improve chromedriver configuration.
|
50
|
+
* Added: documentation for deploying to Heroku.
|
51
|
+
* Fixed: indentation in production config file.
|
52
|
+
|
1
53
|
1.52.0 (June 7, 2019)
|
2
54
|
* Changed: Setup system tests instead of feature specs
|
3
55
|
* Upgraded: Rails 5.2.3
|
data/README.md
CHANGED
@@ -37,8 +37,7 @@ It includes application gems like:
|
|
37
37
|
* [Delayed Job](https://github.com/collectiveidea/delayed_job) for background
|
38
38
|
processing
|
39
39
|
* [High Voltage](https://github.com/thoughtbot/high_voltage) for static pages
|
40
|
-
* [Honeybadger](https://honeybadger.io) for exception notification
|
41
|
-
* [Neat](https://github.com/thoughtbot/neat) for semantic grids
|
40
|
+
* [Honeybadger](https://www.honeybadger.io/?affiliate=A43uwl) for exception notification
|
42
41
|
* [Normalize](https://necolas.github.io/normalize.css/) for resetting browser styles
|
43
42
|
* [Oj](http://www.ohler.com/oj/)
|
44
43
|
* [Postgres](https://github.com/ged/ruby-pg) for access to the Postgres database
|
@@ -53,7 +52,6 @@ It includes application gems like:
|
|
53
52
|
* [Skylight](https://www.skylight.io/) for monitoring performance
|
54
53
|
* [Title](https://github.com/calebthompson/title) for storing titles in
|
55
54
|
translations
|
56
|
-
* [Puma](https://github.com/puma/puma) to serve HTTP requests
|
57
55
|
|
58
56
|
And development gems like:
|
59
57
|
|
@@ -117,6 +115,8 @@ Suspenders also comes with:
|
|
117
115
|
|
118
116
|
## Heroku
|
119
117
|
|
118
|
+
Read the documentation on [deploying to Heroku][heroku deploy]
|
119
|
+
|
120
120
|
You can optionally create Heroku staging and production apps:
|
121
121
|
|
122
122
|
suspenders app --heroku true
|
@@ -131,6 +131,7 @@ This:
|
|
131
131
|
* Schedules automated backups for 10AM UTC for both `staging` and `production`
|
132
132
|
|
133
133
|
[Heroku Pipeline]: https://devcenter.heroku.com/articles/pipelines
|
134
|
+
[heroku deploy]: https://github.com/thoughtbot/suspenders/blob/master/docs/heroku_deploy.md
|
134
135
|
|
135
136
|
You can optionally specify alternate Heroku flags:
|
136
137
|
|
@@ -154,7 +155,7 @@ bypass this with the `--skip-git` option:
|
|
154
155
|
You can optionally create a GitHub repository for the suspended Rails app. It
|
155
156
|
requires that you have [Hub](https://github.com/github/hub) on your system:
|
156
157
|
|
157
|
-
|
158
|
+
brew install hub # macOS, for other systems see https://github.com/github/hub#installation
|
158
159
|
suspenders app --github organization/project
|
159
160
|
|
160
161
|
This has the same effect as running:
|
@@ -222,6 +223,6 @@ See [our other projects][community].
|
|
222
223
|
We are [available for hire][hire].
|
223
224
|
|
224
225
|
[thoughtbot]: https://thoughtbot.com?utm_source=github
|
225
|
-
[thoughtbot-logo]:
|
226
|
+
[thoughtbot-logo]: https://thoughtbot.com/brand_assets/93:44.svg
|
226
227
|
[community]: https://thoughtbot.com/community?utm_source=github
|
227
228
|
[hire]: https://thoughtbot.com?utm_source=github
|
data/Rakefile
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require "bundler/setup"
|
2
|
+
require "bundler/gem_tasks"
|
3
|
+
require "rspec/core/rake_task"
|
4
|
+
require "standard/rake"
|
4
5
|
|
5
6
|
RSpec::Core::RakeTask.new(:rspec)
|
6
7
|
|
7
|
-
desc
|
8
|
-
task :
|
8
|
+
desc "Run the test suite"
|
9
|
+
task default: [:rspec, :standard]
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# Deploying to Heroku
|
2
|
+
|
3
|
+
## Setup
|
4
|
+
|
5
|
+
Deploying to Heroku requires two additional steps:
|
6
|
+
|
7
|
+
1. Set the following environment variables:
|
8
|
+
|
9
|
+
- `ASSET_HOST`: `siteURL.herokuapp.com`
|
10
|
+
- `APPLICATION_HOST`: `siteURL.herokuapp.com`
|
11
|
+
- `SMTP_ADDRESS`: `smtp.example.com`
|
12
|
+
- `SMTP_DOMAIN`: `example.com`
|
13
|
+
- `SMTP_USERNAME`: `username`
|
14
|
+
- `SMTP_PASSWORD`: `password`
|
15
|
+
- `AUTO_MIGRATE_DB`: `true`
|
16
|
+
|
17
|
+
## Execution
|
18
|
+
|
19
|
+
- Use the `./bin/deploy` convention for deploying to Heroku
|
data/lib/suspenders.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require "suspenders/version"
|
2
|
+
require "suspenders/generators/advisories_generator"
|
2
3
|
require "suspenders/generators/app_generator"
|
3
4
|
require "suspenders/generators/static_generator"
|
4
5
|
require "suspenders/generators/stylesheet_base_generator"
|
@@ -14,11 +15,17 @@ require "suspenders/generators/views_generator"
|
|
14
15
|
require "suspenders/generators/js_driver_generator"
|
15
16
|
require "suspenders/generators/json_generator"
|
16
17
|
require "suspenders/generators/testing_generator"
|
18
|
+
require "suspenders/generators/inline_svg_generator"
|
19
|
+
require "suspenders/generators/preloader_generator"
|
20
|
+
require "suspenders/generators/profiler_generator"
|
21
|
+
require "suspenders/generators/runner_generator"
|
17
22
|
require "suspenders/generators/production/force_tls_generator"
|
23
|
+
require "suspenders/generators/production/compression_generator"
|
18
24
|
require "suspenders/generators/production/email_generator"
|
19
25
|
require "suspenders/generators/production/timeout_generator"
|
20
26
|
require "suspenders/generators/production/deployment_generator"
|
21
27
|
require "suspenders/generators/production/manifest_generator"
|
28
|
+
require "suspenders/generators/production/single_redirect"
|
22
29
|
require "suspenders/generators/staging/pull_requests_generator"
|
23
30
|
require "suspenders/actions"
|
24
31
|
require "suspenders/adapters/heroku"
|
data/lib/suspenders/actions.rb
CHANGED
@@ -39,7 +39,7 @@ module Suspenders
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def invoke!
|
42
|
-
write_out { |existing_json| existing_json.
|
42
|
+
write_out { |existing_json| existing_json.deep_merge(data) }
|
43
43
|
end
|
44
44
|
|
45
45
|
def revoke!
|
@@ -60,7 +60,7 @@ module Suspenders
|
|
60
60
|
end
|
61
61
|
|
62
62
|
def existing_json
|
63
|
-
JSON.parse(IO.read(destination_file))
|
63
|
+
JSON.parse(IO.read(destination_file), symbolize_names: true)
|
64
64
|
rescue Errno::ENOENT
|
65
65
|
{}
|
66
66
|
end
|
@@ -7,8 +7,8 @@ module Suspenders
|
|
7
7
|
|
8
8
|
def set_heroku_remotes
|
9
9
|
remotes = <<~SHELL
|
10
|
-
#{command_to_join_heroku_app(
|
11
|
-
#{command_to_join_heroku_app(
|
10
|
+
#{command_to_join_heroku_app("staging")}
|
11
|
+
#{command_to_join_heroku_app("production")}
|
12
12
|
|
13
13
|
git config heroku.remote staging
|
14
14
|
SHELL
|
@@ -29,28 +29,28 @@ module Suspenders
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def set_heroku_rails_secrets
|
32
|
-
%w
|
32
|
+
%w[staging production].each do |environment|
|
33
33
|
run_toolbelt_command(
|
34
34
|
"config:add SECRET_KEY_BASE=#{generate_secret}",
|
35
|
-
environment
|
35
|
+
environment
|
36
36
|
)
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
40
|
def set_heroku_honeybadger_env
|
41
|
-
%w
|
41
|
+
%w[staging production].each do |environment|
|
42
42
|
run_toolbelt_command(
|
43
43
|
"config:add HONEYBADGER_ENV=#{environment}",
|
44
|
-
environment
|
44
|
+
environment
|
45
45
|
)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
49
49
|
def set_heroku_backup_schedule
|
50
|
-
%w
|
50
|
+
%w[staging production].each do |environment|
|
51
51
|
run_toolbelt_command(
|
52
52
|
"pg:backups:schedule DATABASE_URL --at '10:00 UTC'",
|
53
|
-
environment
|
53
|
+
environment
|
54
54
|
)
|
55
55
|
end
|
56
56
|
end
|
@@ -65,21 +65,34 @@ module Suspenders
|
|
65
65
|
run_toolbelt_command(
|
66
66
|
"pipelines:create #{heroku_app_name} \
|
67
67
|
-a #{heroku_app_name}-staging --stage staging",
|
68
|
-
"staging"
|
68
|
+
"staging"
|
69
69
|
)
|
70
70
|
|
71
71
|
run_toolbelt_command(
|
72
72
|
"pipelines:add #{heroku_app_name} \
|
73
73
|
-a #{heroku_app_name}-production --stage production",
|
74
|
-
"production"
|
74
|
+
"production"
|
75
75
|
)
|
76
76
|
end
|
77
77
|
|
78
78
|
def set_heroku_application_host
|
79
|
-
%w
|
79
|
+
%w[staging production].each do |environment|
|
80
80
|
run_toolbelt_command(
|
81
81
|
"config:add APPLICATION_HOST=#{heroku_app_name}-#{environment}.herokuapp.com",
|
82
|
-
environment
|
82
|
+
environment
|
83
|
+
)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def set_heroku_buildpacks
|
88
|
+
%w[staging production].each do |environment|
|
89
|
+
run_toolbelt_command(
|
90
|
+
"buildpacks:add --index 1 heroku/nodejs",
|
91
|
+
environment
|
92
|
+
)
|
93
|
+
run_toolbelt_command(
|
94
|
+
"buildpacks:add --index 2 heroku/ruby",
|
95
|
+
environment
|
83
96
|
)
|
84
97
|
end
|
85
98
|
end
|
@@ -92,7 +105,7 @@ module Suspenders
|
|
92
105
|
heroku_app_name = heroku_app_name_for(environment)
|
93
106
|
<<~SHELL
|
94
107
|
|
95
|
-
if heroku
|
108
|
+
if heroku apps:info --app #{heroku_app_name} > /dev/null 2>&1; then
|
96
109
|
git remote add #{environment} git@heroku.com:#{heroku_app_name}.git || true
|
97
110
|
printf 'You are a collaborator on the "#{heroku_app_name}" Heroku app\n'
|
98
111
|
else
|
@@ -115,7 +128,7 @@ module Suspenders
|
|
115
128
|
|
116
129
|
def run_toolbelt_command(command, environment)
|
117
130
|
app_builder.run(
|
118
|
-
"heroku #{command} --remote #{environment}"
|
131
|
+
"heroku #{command} --remote #{environment}"
|
119
132
|
)
|
120
133
|
end
|
121
134
|
end
|