code42template 2.0.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.
- checksums.yaml +7 -0
- data/.gitignore +5 -0
- data/.ruby-version +1 -0
- data/.travis.yml +11 -0
- data/Gemfile +3 -0
- data/NEWS.md +56 -0
- data/README.md +280 -0
- data/Rakefile +8 -0
- data/bin/code42template +24 -0
- data/bin/rake +16 -0
- data/bin/rspec +16 -0
- data/bin/setup +13 -0
- data/code42template.gemspec +30 -0
- data/lib/code42template/actions.rb +28 -0
- data/lib/code42template/adapters/heroku.rb +174 -0
- data/lib/code42template/app_builder.rb +251 -0
- data/lib/code42template/generators/app_generator.rb +208 -0
- data/lib/code42template/version.rb +9 -0
- data/lib/code42template.rb +5 -0
- data/spec/adapters/heroku_spec.rb +56 -0
- data/spec/code42template.rb +58 -0
- data/spec/fakes/bin/heroku +5 -0
- data/spec/fakes/bin/hub +5 -0
- data/spec/features/heroku_spec.rb +83 -0
- data/spec/features/new_project_spec.rb +186 -0
- data/spec/fixtures/feature_smoke_test.rb +15 -0
- data/spec/fixtures/home_controller.rb +4 -0
- data/spec/fixtures/index.html.erb +1 -0
- data/spec/fixtures/routes.rb +3 -0
- data/spec/fixtures/smoke_test.rb +10 -0
- data/spec/spec_helper.rb +14 -0
- data/spec/support/code42template.rb +83 -0
- data/spec/support/fake_heroku.rb +83 -0
- data/templates/Gemfile.erb +42 -0
- data/templates/Procfile +3 -0
- data/templates/README.md.erb +10 -0
- data/templates/active_job.rb +1 -0
- data/templates/application.js +1 -0
- data/templates/bin_deploy +12 -0
- data/templates/bin_setup +21 -0
- data/templates/bin_setup_review_app.erb +19 -0
- data/templates/code42_gitignore +16 -0
- data/templates/config_locales_pt-BR.yml.erb +17 -0
- data/templates/dotfiles/.babelrc +5 -0
- data/templates/dotfiles/.codeclimate.yml +3 -0
- data/templates/dotfiles/.env +8 -0
- data/templates/dotfiles/.rspec +2 -0
- data/templates/dotfiles/.rubocop.yml +20 -0
- data/templates/feature_helper.rb.erb +5 -0
- data/templates/health.rake +22 -0
- data/templates/karma.conf.js +48 -0
- data/templates/mocha-webpack.opts +4 -0
- data/templates/package.json +39 -0
- data/templates/postgresql_database.yml.erb +22 -0
- data/templates/puma.rb +28 -0
- data/templates/rails_helper.rb +59 -0
- data/templates/secrets.yml +14 -0
- data/templates/setup +32 -0
- data/templates/sidekiq.yml +7 -0
- data/templates/spec/javascripts/.gitkeep +0 -0
- data/templates/spec/javascripts/index.browser.js +5 -0
- data/templates/spec/javascripts/index.integration.js +5 -0
- data/templates/spec/javascripts/integration/smoke.spec.js +7 -0
- data/templates/spec/javascripts/unit/smoke.spec.js +7 -0
- data/templates/spec_helper.rb +15 -0
- data/templates/travis.yml.erb +12 -0
- data/templates/webpack.config.js +68 -0
- data/templates/webpack.config.test.browser.js +17 -0
- data/templates/webpack.config.test.js +5 -0
- data/templates/webpack.rake +26 -0
- metadata +158 -0
@@ -0,0 +1,186 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
RSpec.describe "Create a new project with default configuration" do
|
4
|
+
before(:all) do
|
5
|
+
drop_dummy_database
|
6
|
+
remove_project_directory
|
7
|
+
run_code42template
|
8
|
+
end
|
9
|
+
|
10
|
+
it "uses custom Gemfile" do
|
11
|
+
gemfile_file = IO.read("#{project_path}/Gemfile")
|
12
|
+
|
13
|
+
expect(gemfile_file).to match(
|
14
|
+
/^ruby "#{Code42Template::RUBY_VERSION}"$/,
|
15
|
+
)
|
16
|
+
expect(gemfile_file).to match(
|
17
|
+
/^gem "rails", "#{Code42Template::RAILS_VERSION}"$/,
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "ensures project specs pass" do
|
22
|
+
copy_file 'smoke_test.rb', 'spec/models/smoke_test_spec.rb'
|
23
|
+
copy_file 'feature_smoke_test.rb', 'spec/models/feature_smoke_spec.rb'
|
24
|
+
copy_file 'routes.rb', 'config/routes.rb'
|
25
|
+
copy_file 'home_controller.rb', 'app/controllers/home_controller.rb'
|
26
|
+
copy_file 'index.html.erb', 'app/views/home/index.html.erb'
|
27
|
+
|
28
|
+
Dir.chdir(project_path) do
|
29
|
+
Bundler.with_clean_env do
|
30
|
+
expect(`rake health`).to include(
|
31
|
+
'3 examples, 0 failures', # rspec
|
32
|
+
'LOC (100.0%) covered.', # simplecov
|
33
|
+
'no offenses detected', # rubocop
|
34
|
+
'Security Warnings | 0', # brakeman
|
35
|
+
'No vulnerabilities found', # bundler-audit
|
36
|
+
'1 passing', # mocha
|
37
|
+
'TOTAL: 1 SUCCESS' # karma
|
38
|
+
)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
it "creates .ruby-version from template's .ruby-version" do
|
44
|
+
ruby_version_file = IO.read("#{project_path}/.ruby-version")
|
45
|
+
|
46
|
+
expect(ruby_version_file).to eq "#{RUBY_VERSION}\n"
|
47
|
+
end
|
48
|
+
|
49
|
+
it "copies dotfiles" do
|
50
|
+
%w[.env .rspec .codeclimate.yml].each do |dotfile|
|
51
|
+
expect(File).to exist("#{project_path}/#{dotfile}")
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'copies rspec configuration' do
|
56
|
+
%w[spec_helper.rb rails_helper.rb].each do |spec_config|
|
57
|
+
expect(File).to exist(file_path("spec/#{spec_config}"))
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'copies NPM and javascript files' do
|
62
|
+
%w[
|
63
|
+
config/karma.conf.js
|
64
|
+
config/webpack.config.js
|
65
|
+
config/webpack.config.test.js
|
66
|
+
config/webpack.config.test.browser.js
|
67
|
+
spec/javascripts/index.browser.js
|
68
|
+
spec/javascripts/index.integration.js
|
69
|
+
spec/javascripts/unit/smoke.spec.js
|
70
|
+
package.json
|
71
|
+
Procfile
|
72
|
+
mocha-webpack.opts
|
73
|
+
].each do |file|
|
74
|
+
expect(File).to exist(file_path(file))
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'copies health task and continuous integration setup' do
|
79
|
+
expect(File).to exist(file_path('lib/tasks/health.rake'))
|
80
|
+
expect(File).to exist(file_path('.travis.yml'))
|
81
|
+
end
|
82
|
+
|
83
|
+
it "loads secret_key_base from env" do
|
84
|
+
secrets_file = IO.read("#{project_path}/config/secrets.yml")
|
85
|
+
|
86
|
+
expect(secrets_file).to match(/secret_key_base: <%= ENV\["SECRET_KEY_BASE"\] %>/)
|
87
|
+
end
|
88
|
+
|
89
|
+
it "adds bin/setup file" do
|
90
|
+
expect(File).to exist("#{project_path}/bin/setup")
|
91
|
+
end
|
92
|
+
|
93
|
+
it "makes bin/setup executable" do
|
94
|
+
bin_setup_path = "#{project_path}/bin/setup"
|
95
|
+
|
96
|
+
expect(File.stat(bin_setup_path)).to be_executable
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'sets action dispatch show exceptions to true in test env' do
|
100
|
+
test_config = read_file('config/environments/test.rb')
|
101
|
+
|
102
|
+
expect(test_config).to match(
|
103
|
+
/config.action_dispatch.show_exceptions.*=.*true/
|
104
|
+
)
|
105
|
+
expect(test_config).not_to match(
|
106
|
+
/config.action_dispatch.show_exceptions.*=.*false/
|
107
|
+
)
|
108
|
+
end
|
109
|
+
|
110
|
+
it "adds explicit quiet_assets configuration" do
|
111
|
+
result = IO.read("#{project_path}/config/application.rb")
|
112
|
+
|
113
|
+
expect(result).to match(/^ +config.assets.quiet = true$/)
|
114
|
+
end
|
115
|
+
|
116
|
+
it "adds spring to binstubs" do
|
117
|
+
expect(File).to exist("#{project_path}/bin/spring")
|
118
|
+
|
119
|
+
bin_stubs = %w(rake rails rspec)
|
120
|
+
bin_stubs.each do |bin_stub|
|
121
|
+
expect(IO.read("#{project_path}/bin/#{bin_stub}")).to match(/spring/)
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
it "configs bullet gem in development" do
|
126
|
+
test_config = IO.read("#{project_path}/config/environments/development.rb")
|
127
|
+
|
128
|
+
expect(test_config).to match /^ +Bullet.enable = true$/
|
129
|
+
expect(test_config).to match /^ +Bullet.bullet_logger = true$/
|
130
|
+
expect(test_config).to match /^ +Bullet.rails_logger = true$/
|
131
|
+
end
|
132
|
+
|
133
|
+
it "creates review apps setup script" do
|
134
|
+
bin_setup_path = "#{project_path}/bin/setup_review_app"
|
135
|
+
bin_setup = IO.read(bin_setup_path)
|
136
|
+
|
137
|
+
expect(bin_setup).to include(
|
138
|
+
"heroku run rake db:migrate --exit-code "\
|
139
|
+
"--app #{app_name.dasherize}-staging-pr-$1"
|
140
|
+
)
|
141
|
+
expect(bin_setup).to include(
|
142
|
+
"heroku ps:scale worker=1 "\
|
143
|
+
"--app #{app_name.dasherize}-staging-pr-$1"
|
144
|
+
)
|
145
|
+
expect(bin_setup).to include(
|
146
|
+
"heroku restart "\
|
147
|
+
"--app #{app_name.dasherize}-staging-pr-$1"
|
148
|
+
)
|
149
|
+
expect(File.stat(bin_setup_path)).to be_executable
|
150
|
+
end
|
151
|
+
|
152
|
+
it "creates deploy script" do
|
153
|
+
bin_deploy_path = "#{project_path}/bin/deploy"
|
154
|
+
bin_deploy = IO.read(bin_deploy_path)
|
155
|
+
|
156
|
+
expect(bin_deploy).to include("heroku run rake db:migrate --exit-code")
|
157
|
+
expect(File.stat(bin_deploy_path)).to be_executable
|
158
|
+
end
|
159
|
+
|
160
|
+
it "sets up heroku specific gems" do
|
161
|
+
gemfile_file = IO.read("#{project_path}/Gemfile")
|
162
|
+
|
163
|
+
expect(gemfile_file).to include %{gem 'rails_12factor'}
|
164
|
+
end
|
165
|
+
|
166
|
+
def app_name
|
167
|
+
Code42TemplateTestHelpers::APP_NAME
|
168
|
+
end
|
169
|
+
|
170
|
+
def read_file(path)
|
171
|
+
IO.read(file_path(path))
|
172
|
+
end
|
173
|
+
|
174
|
+
def file_path(path)
|
175
|
+
File.join(project_path, path)
|
176
|
+
end
|
177
|
+
|
178
|
+
def copy_file(source_fixture_name, destination_path)
|
179
|
+
source_path = Pathname(__dir__).join('..', 'fixtures', source_fixture_name)
|
180
|
+
destination_path = Pathname(project_path).join(destination_path)
|
181
|
+
destination_dir = destination_path.join('..')
|
182
|
+
FileUtils.mkdir_p(destination_dir) unless destination_dir.exist?
|
183
|
+
|
184
|
+
FileUtils.cp(source_path, destination_path)
|
185
|
+
end
|
186
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'feature_helper'
|
2
|
+
|
3
|
+
RSpec.feature 'feature smoke test' do
|
4
|
+
it 'works with js', js: true do
|
5
|
+
visit '/'
|
6
|
+
|
7
|
+
expect(page).to have_content('It works!')
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'works without js' do
|
11
|
+
visit '/'
|
12
|
+
|
13
|
+
expect(page).to have_content('It works!')
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
<p>It works!</p>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'rails_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'rails_helper smoke test' do
|
4
|
+
it 'is configured correctly' do
|
5
|
+
expect(Rails.env).to be_test
|
6
|
+
expect(RSpec.configuration.use_transactional_fixtures).to eq true
|
7
|
+
expect(Capybara.javascript_driver).to eq :poltergeist
|
8
|
+
expect(Capybara.default_driver).to eq :rack_test
|
9
|
+
end
|
10
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
|
3
|
+
require (Pathname.new(__FILE__).dirname + '../lib/code42template').expand_path
|
4
|
+
|
5
|
+
Dir['./spec/support/**/*.rb'].each { |file| require file }
|
6
|
+
|
7
|
+
RSpec.configure do |config|
|
8
|
+
config.include Code42TemplateTestHelpers
|
9
|
+
|
10
|
+
config.before(:all) do
|
11
|
+
add_fakes_to_path
|
12
|
+
create_tmp_directory
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
module Code42TemplateTestHelpers
|
2
|
+
APP_NAME = "dummy_app"
|
3
|
+
|
4
|
+
def remove_project_directory
|
5
|
+
FileUtils.rm_rf(project_path)
|
6
|
+
end
|
7
|
+
|
8
|
+
def create_tmp_directory
|
9
|
+
FileUtils.mkdir_p(tmp_path)
|
10
|
+
end
|
11
|
+
|
12
|
+
def run_code42template(arguments = nil)
|
13
|
+
arguments = "--path=#{root_path} #{arguments}"
|
14
|
+
Dir.chdir(tmp_path) do
|
15
|
+
Bundler.with_clean_env do
|
16
|
+
add_fakes_to_path
|
17
|
+
`
|
18
|
+
#{code42template_bin} #{APP_NAME} #{arguments}
|
19
|
+
`
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def code42template_help_command
|
25
|
+
Dir.chdir(tmp_path) do
|
26
|
+
Bundler.with_clean_env do
|
27
|
+
`
|
28
|
+
#{code42template_bin} -h
|
29
|
+
`
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def setup_app_dependencies
|
35
|
+
if File.exist?(project_path)
|
36
|
+
Dir.chdir(project_path) do
|
37
|
+
Bundler.with_clean_env do
|
38
|
+
`bundle check || bundle install`
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def drop_dummy_database
|
45
|
+
if File.exist?(project_path)
|
46
|
+
Dir.chdir(project_path) do
|
47
|
+
Bundler.with_clean_env do
|
48
|
+
`rake db:drop`
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def add_fakes_to_path
|
55
|
+
ENV["PATH"] = "#{support_bin}:#{ENV['PATH']}"
|
56
|
+
end
|
57
|
+
|
58
|
+
def project_path
|
59
|
+
@project_path ||= Pathname.new("#{tmp_path}/#{APP_NAME}")
|
60
|
+
end
|
61
|
+
|
62
|
+
def usage_file
|
63
|
+
@usage_path ||= File.join(root_path, "USAGE")
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def tmp_path
|
69
|
+
@tmp_path ||= Pathname.new("#{root_path}/tmp")
|
70
|
+
end
|
71
|
+
|
72
|
+
def code42template_bin
|
73
|
+
File.join(root_path, 'bin', 'code42template')
|
74
|
+
end
|
75
|
+
|
76
|
+
def support_bin
|
77
|
+
File.join(root_path, "spec", "fakes", "bin")
|
78
|
+
end
|
79
|
+
|
80
|
+
def root_path
|
81
|
+
File.expand_path('../../../', __FILE__)
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
class FakeHeroku
|
4
|
+
RECORDER = Pathname(__dir__).join('..', '..', 'tmp', 'heroku_commands')
|
5
|
+
|
6
|
+
def initialize(args)
|
7
|
+
@args = args
|
8
|
+
end
|
9
|
+
|
10
|
+
def run!
|
11
|
+
if @args.first == "plugins"
|
12
|
+
puts "heroku-pipelines@0.29.0"
|
13
|
+
end
|
14
|
+
|
15
|
+
File.open(RECORDER, 'a') do |file|
|
16
|
+
file.puts @args.join(' ')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.clear!
|
21
|
+
FileUtils.rm_rf RECORDER
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.has_gem_included?(project_path, gem_name)
|
25
|
+
gemfile = File.open(File.join(project_path, 'Gemfile'), 'a')
|
26
|
+
|
27
|
+
File.foreach(gemfile).any? do |line|
|
28
|
+
line.match(/#{Regexp.quote(gem_name)}/)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.has_configured_buildpacks_sequentially?(environment, buildpack_urls)
|
33
|
+
lines = commands_ran.each_line.grep(
|
34
|
+
/.*buildpacks:(add|clear).*#{environment}.*/
|
35
|
+
)
|
36
|
+
app_name = app_name_for(environment)
|
37
|
+
|
38
|
+
if lines.shift !~ /^buildpacks:clear -a #{app_name} --remote #{environment}/
|
39
|
+
fail "Expected #{environment} to have cleared buildpacks before "\
|
40
|
+
"adding new ones"
|
41
|
+
end
|
42
|
+
|
43
|
+
if lines.count != buildpack_urls.count
|
44
|
+
fail "Expected #{environment} to have #{buildpack_urls.count} "\
|
45
|
+
"buildpacks configured but has #{lines.count}"
|
46
|
+
end
|
47
|
+
|
48
|
+
lines.zip(buildpack_urls).all? do |line, buildpack_url|
|
49
|
+
line =~ /^buildpacks:add #{buildpack_url} -a #{app_name} --remote #{environment}/
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.has_created_app_for?(environment, flags = nil)
|
54
|
+
app_name = app_name_for(environment)
|
55
|
+
|
56
|
+
command = if flags
|
57
|
+
"create #{app_name} #{flags} --remote #{environment}\n"
|
58
|
+
else
|
59
|
+
"create #{app_name} --remote #{environment}\n"
|
60
|
+
end
|
61
|
+
|
62
|
+
File.foreach(RECORDER).any? { |line| line == command }
|
63
|
+
end
|
64
|
+
|
65
|
+
def self.has_configured_vars?(remote_name, var, value = '.+')
|
66
|
+
commands_ran =~ /^config:add #{var}=#{value} --remote #{remote_name}\n/
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.has_setup_pipeline_for?(app_name)
|
70
|
+
commands_ran =~ /^pipelines:create #{app_name} -a #{app_name}-staging --stage staging/ &&
|
71
|
+
commands_ran =~ /^pipelines:add #{app_name} -a #{app_name}-production --stage production/
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.commands_ran
|
75
|
+
@commands_ran ||= File.read(RECORDER)
|
76
|
+
end
|
77
|
+
private_class_method :commands_ran
|
78
|
+
|
79
|
+
def self.app_name_for(environment)
|
80
|
+
"#{Code42TemplateTestHelpers::APP_NAME.dasherize}-#{environment}"
|
81
|
+
end
|
82
|
+
private_class_method :app_name_for
|
83
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
source "https://rubygems.org"
|
2
|
+
|
3
|
+
ruby "<%= Code42Template::RUBY_VERSION %>"
|
4
|
+
|
5
|
+
gem "pg"
|
6
|
+
gem "rails", "<%= Code42Template::RAILS_VERSION %>"
|
7
|
+
gem 'puma'
|
8
|
+
gem 'rack-mini-profiler'
|
9
|
+
gem 'rubocop', require: false
|
10
|
+
gem 'webpack-rails'
|
11
|
+
gem 'foreman'
|
12
|
+
gem 'sidekiq'
|
13
|
+
|
14
|
+
group :development do
|
15
|
+
gem "spring"
|
16
|
+
gem "spring-commands-rspec"
|
17
|
+
gem "binding_of_caller"
|
18
|
+
gem "better_errors"
|
19
|
+
end
|
20
|
+
|
21
|
+
group :development, :test do
|
22
|
+
gem 'brakeman', require: false
|
23
|
+
gem "bullet"
|
24
|
+
gem 'listen'
|
25
|
+
gem "bundler-audit", require: false
|
26
|
+
gem "dotenv-rails"
|
27
|
+
gem "pry-byebug"
|
28
|
+
gem "pry-rails"
|
29
|
+
gem "rspec-rails", "~> 3.5.1"
|
30
|
+
end
|
31
|
+
|
32
|
+
group :test do
|
33
|
+
gem 'database_cleaner'
|
34
|
+
gem 'capybara'
|
35
|
+
gem 'factory_girl_rails'
|
36
|
+
gem 'simplecov', require: false
|
37
|
+
gem 'poltergeist'
|
38
|
+
end
|
39
|
+
|
40
|
+
group :staging, :production do
|
41
|
+
gem 'rails_12factor'
|
42
|
+
end
|
data/templates/Procfile
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
# <%= app_name.humanize %>
|
2
|
+
|
3
|
+
## Getting Started
|
4
|
+
|
5
|
+
After you have cloned this repo, run this setup script to set up your machine
|
6
|
+
with the necessary dependencies to run and test this app:
|
7
|
+
|
8
|
+
% ./bin/setup
|
9
|
+
|
10
|
+
It assumes you have a machine equipped with Ruby, Postgres, etc.
|
@@ -0,0 +1 @@
|
|
1
|
+
ActiveJob::Base.queue_adapter = :sidekiq
|
@@ -0,0 +1 @@
|
|
1
|
+
(() => console.log('I am alive!'))()
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
# Run this script to deploy the app to Heroku.
|
4
|
+
|
5
|
+
set -e
|
6
|
+
|
7
|
+
branch="$(git symbolic-ref HEAD --short)"
|
8
|
+
target="${1:-staging}"
|
9
|
+
|
10
|
+
git push "$target" "$branch:master"
|
11
|
+
heroku run rake db:migrate --exit-code --remote "$target"
|
12
|
+
heroku restart --remote "$target"
|
data/templates/bin_setup
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
# Set up Rails app. Run this script immediately after cloning the codebase.
|
4
|
+
# https://github.com/thoughtbot/guides/tree/master/protocol
|
5
|
+
|
6
|
+
# Exit if any subcommand fails
|
7
|
+
set -e
|
8
|
+
|
9
|
+
# Set up Ruby dependencies via Bundler
|
10
|
+
gem install bundler --conservative
|
11
|
+
bundle check || bundle install
|
12
|
+
|
13
|
+
# Set up database and add any development seed data
|
14
|
+
bin/rake dev:prime
|
15
|
+
|
16
|
+
# Add binstubs to PATH via export PATH=".git/safe/../../bin:$PATH" in ~/.zshenv
|
17
|
+
mkdir -p .git/safe
|
18
|
+
|
19
|
+
# Only if this isn't CI
|
20
|
+
# if [ -z "$CI" ]; then
|
21
|
+
# fi
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
|
3
|
+
# Run this script to set up a review app's database and worker dyno
|
4
|
+
|
5
|
+
set -e
|
6
|
+
|
7
|
+
if [ -z "$1" ]; then
|
8
|
+
printf "You must provide a review app (same as the pull request) id.\n"
|
9
|
+
exit 64
|
10
|
+
fi
|
11
|
+
|
12
|
+
heroku pg:backups restore \
|
13
|
+
`heroku pg:backups public-url -a <%= app_name.dasherize %>-staging` \
|
14
|
+
DATABASE_URL \
|
15
|
+
--confirm <%= app_name.dasherize %>-staging-pr-$1 \
|
16
|
+
--app <%= app_name.dasherize %>-staging-pr-$1
|
17
|
+
heroku run rake db:migrate --exit-code --app <%= app_name.dasherize %>-staging-pr-$1
|
18
|
+
heroku ps:scale worker=1 --app <%= app_name.dasherize %>-staging-pr-$1
|
19
|
+
heroku restart --app <%= app_name.dasherize %>-staging-pr-$1
|
@@ -0,0 +1,20 @@
|
|
1
|
+
AllCops:
|
2
|
+
Exclude:
|
3
|
+
- Rakefile
|
4
|
+
- db/*
|
5
|
+
- bin/*
|
6
|
+
- config/**/*
|
7
|
+
FrozenStringLiteralComment:
|
8
|
+
Enabled: false
|
9
|
+
AndOr:
|
10
|
+
Enabled: false
|
11
|
+
IfUnlessModifier:
|
12
|
+
Enabled: false
|
13
|
+
LeadingCommentSpace:
|
14
|
+
Enabled: false
|
15
|
+
StringLiterals:
|
16
|
+
Enabled: false
|
17
|
+
SignalException:
|
18
|
+
EnforcedStyle: semantic
|
19
|
+
Documentation:
|
20
|
+
Enabled: false
|
@@ -0,0 +1,22 @@
|
|
1
|
+
if Rails.env.development? || Rails.env.test?
|
2
|
+
def run_command(command, env = {})
|
3
|
+
description = "Running '#{command}'"
|
4
|
+
separator = '-' * description.length
|
5
|
+
|
6
|
+
puts '', separator, description, separator, ''
|
7
|
+
|
8
|
+
system(env, command) or fail "There was an error while running '#{command}'"
|
9
|
+
end
|
10
|
+
|
11
|
+
desc 'Checks app health: runs tests, security checks and rubocop'
|
12
|
+
task :health do
|
13
|
+
rails_helper = Rails.root / 'spec/rails_helper.rb'
|
14
|
+
|
15
|
+
run_command "bundle exec rspec -r#{rails_helper}", 'COVERAGE' => 'true'
|
16
|
+
run_command 'npm run test'
|
17
|
+
run_command 'bundle exec bundle-audit update'
|
18
|
+
run_command 'bundle exec bundle-audit check'
|
19
|
+
run_command 'bundle exec brakeman -z'
|
20
|
+
run_command 'bundle exec rubocop'
|
21
|
+
end
|
22
|
+
end
|