rails_template_18f 0.1.0 → 0.2.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 (49) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/Gemfile +2 -0
  4. data/Gemfile.lock +3 -1
  5. data/README.md +4 -4
  6. data/lib/generators/rails_template18f/circleci/circleci_generator.rb +26 -10
  7. data/lib/generators/rails_template18f/dap/dap_generator.rb +72 -0
  8. data/lib/generators/rails_template18f/github_actions/github_actions_generator.rb +27 -11
  9. data/lib/generators/rails_template18f/newrelic/newrelic_generator.rb +79 -0
  10. data/{templates/config/newrelic.yml → lib/generators/rails_template18f/newrelic/templates/config/newrelic.yml.tt} +7 -7
  11. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/README.md.tt +0 -0
  12. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/bootstrap/import.sh +0 -0
  13. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/bootstrap/main.tf.tt +3 -3
  14. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/bootstrap/providers.tf +0 -0
  15. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/bootstrap/run.sh.tt +1 -1
  16. data/lib/generators/rails_template18f/terraform/templates/terraform/bootstrap/teardown_creds.sh.tt +5 -0
  17. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/bootstrap/variables.tf +0 -0
  18. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/create_space_deployer.sh +0 -0
  19. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/destroy_space_deployer.sh +0 -0
  20. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/production/main.tf.tt +4 -4
  21. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/production/providers.tf.tt +0 -0
  22. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/production/variables.tf +0 -0
  23. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/shared/database/main.tf.tt +0 -0
  24. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/shared/database/providers.tf +0 -0
  25. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/shared/database/variables.tf +0 -0
  26. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/shared/domain/main.tf.tt +1 -1
  27. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/shared/domain/providers.tf +0 -0
  28. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/shared/domain/variables.tf +0 -0
  29. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/shared/s3/main.tf +0 -0
  30. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/shared/s3/providers.tf +0 -0
  31. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/shared/s3/variables.tf +0 -0
  32. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/staging/main.tf.tt +4 -4
  33. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/staging/providers.tf.tt +0 -0
  34. data/{templates → lib/generators/rails_template18f/terraform/templates}/terraform/staging/variables.tf +0 -0
  35. data/lib/generators/rails_template18f/terraform/terraform_generator.rb +95 -0
  36. data/lib/rails_template18f/generators/base.rb +36 -0
  37. data/lib/rails_template18f/generators/cloud_gov_options.rb +57 -0
  38. data/lib/rails_template18f/generators/pipeline_options.rb +18 -0
  39. data/lib/rails_template18f/generators.rb +11 -0
  40. data/lib/rails_template18f/version.rb +1 -1
  41. data/lib/rails_template_18f.rb +1 -4
  42. data/template.rb +17 -61
  43. data/templates/README.md.tt +7 -44
  44. data/templates/doc/compliance/apps/application.boundary.md.tt +4 -24
  45. data/templates/githooks/{pre-commit.tt → pre-commit} +0 -15
  46. data/templates/manifest.yml.tt +1 -2
  47. metadata +35 -29
  48. data/lib/rails_template18f/terraform_options.rb +0 -68
  49. data/templates/terraform/bootstrap/teardown_creds.sh.tt +0 -5
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsTemplate18f
4
+ module Generators
5
+ module Base
6
+ extend ActiveSupport::Concern
7
+ include ::Rails::Generators::AppName
8
+
9
+ included do
10
+ self.source_path = RailsTemplate18f::Generators.const_source_location(name).first
11
+ end
12
+
13
+ class_methods do
14
+ attr_accessor :source_path
15
+
16
+ def source_root
17
+ @source_root ||= File.expand_path("templates", File.dirname(source_path))
18
+ end
19
+ end
20
+
21
+ private
22
+
23
+ def file_content(filename)
24
+ File.read(File.expand_path(filename, destination_root))
25
+ end
26
+
27
+ def ruby_version
28
+ RUBY_VERSION
29
+ end
30
+
31
+ def skip_git?
32
+ !Dir.exist?(File.expand_path(".git", destination_root))
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsTemplate18f
4
+ module Generators
5
+ module CloudGovOptions
6
+ extend ActiveSupport::Concern
7
+
8
+ included do
9
+ class_option :cg_org, desc: "cloud.gov organization name"
10
+ class_option :cg_staging, desc: "cloud.gov space name for staging"
11
+ class_option :cg_prod, desc: "cloud.gov space name for production"
12
+ end
13
+
14
+ private
15
+
16
+ def cloud_gov_organization
17
+ if options[:cg_org].present?
18
+ return options[:cg_org]
19
+ elsif terraform_dir_exists?
20
+ staging_main = file_content("terraform/staging/main.tf")
21
+ if (matches = staging_main.match(/cf_org_name\s+= "(?<org_name>.*)"/))
22
+ return matches[:org_name]
23
+ end
24
+ end
25
+ "TKTK-cloud.gov-org-name"
26
+ end
27
+
28
+ def cloud_gov_staging_space
29
+ if options[:cg_staging].present?
30
+ return options[:cg_staging]
31
+ elsif terraform_dir_exists?
32
+ staging_main = file_content("terraform/staging/main.tf")
33
+ if (matches = staging_main.match(/cf_space_name\s+= "(?<space_name>.*)"/))
34
+ return matches[:space_name]
35
+ end
36
+ end
37
+ "staging"
38
+ end
39
+
40
+ def cloud_gov_production_space
41
+ if options[:cg_prod].present?
42
+ return options[:cg_prod]
43
+ elsif terraform_dir_exists?
44
+ prod_main = file_content("terraform/production/main.tf")
45
+ if (matches = prod_main.match(/cf_space_name\s+= "(?<space_name>.*)"/))
46
+ return matches[:space_name]
47
+ end
48
+ end
49
+ "prod"
50
+ end
51
+
52
+ def terraform_dir_exists?
53
+ Dir.exist? File.expand_path("terraform", destination_root)
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsTemplate18f
4
+ module Generators
5
+ module PipelineOptions
6
+ extend ActiveSupport::Concern
7
+ include CloudGovOptions
8
+
9
+ included do
10
+ class_option :terraform, type: :boolean, desc: "Generate actions for planning and applying terraform"
11
+ end
12
+
13
+ def terraform?
14
+ options[:terraform].nil? ? terraform_dir_exists? : options[:terraform]
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RailsTemplate18f
4
+ module Generators
5
+ extend ActiveSupport::Autoload
6
+
7
+ autoload :Base
8
+ autoload :CloudGovOptions
9
+ autoload :PipelineOptions
10
+ end
11
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsTemplate18f
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
@@ -1,12 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "rails_template18f/version"
4
+ require_relative "rails_template18f/generators"
4
5
 
5
6
  module RailsTemplate18f
6
- extend ActiveSupport::Autoload
7
-
8
- autoload :TerraformOptions
9
-
10
7
  class Error < StandardError; end
11
8
 
12
9
  class Railtie < ::Rails::Railtie; end
data/template.rb CHANGED
@@ -60,7 +60,6 @@ default_prod_space = "prod"
60
60
 
61
61
  @github_actions = yes?("Create Github Actions? (y/n)")
62
62
  @circleci_pipeline = yes?("Create CircleCI config? (y/n)")
63
- @adrs = yes?("Create initial Architecture Decision Records? (y/n)")
64
63
  @newrelic = yes?("Create FEDRAMP New Relic config files? (y/n)")
65
64
  @dap = yes?("If this will be a public site, should we include Digital Analytics Program code? (y/n)")
66
65
  @supported_languages = [:en]
@@ -151,34 +150,16 @@ else
151
150
  "policy.style_src :self"
152
151
  end
153
152
 
154
- script_policy = [":self"]
155
- connect_policy = [":self"]
156
- image_policy = [":self", ":data"]
157
-
158
- if @newrelic
159
- script_policy << '"https://js-agent.newrelic.com"'
160
- script_policy << '"https://*.nr-data.net"'
161
- connect_policy << '"https://*.nr-data.net"'
162
- end
163
-
164
- if @dap
165
- image_policy << '"https://www.google-analytics.com"'
166
- script_policy << '"https://dap.digitalgov.gov"'
167
- script_policy << '"https://www.google-analytics.com"'
168
- connect_policy << '"https://dap.digitalgov.gov"'
169
- connect_policy << '"https://www.google-analytics.com"'
170
- end
171
-
172
153
  gsub_file csp_initializer, /^# config.*\|policy\|$.+^# end$/m, <<EOM
173
154
  config.content_security_policy do |policy|
174
155
  policy.default_src :self
175
156
  policy.font_src :self
176
157
  policy.form_action :self
177
158
  policy.frame_ancestors :none
178
- policy.img_src #{image_policy.join(", ")}
159
+ policy.img_src :self, :data
179
160
  policy.object_src :none
180
- policy.script_src #{script_policy.join(", ")}
181
- policy.connect_src #{connect_policy.join(", ")}
161
+ policy.script_src :self
162
+ policy.connect_src :self
182
163
  #{style_policy}
183
164
  end
184
165
  EOM
@@ -188,21 +169,13 @@ uncomment_lines csp_initializer, /end$/
188
169
  uncomment_lines csp_initializer, "content_security_policy_nonce"
189
170
 
190
171
  if @newrelic
191
- gem "newrelic_rpm", "~> 8.4"
192
- copy_file "config/newrelic.yml"
193
-
172
+ after_bundle do
173
+ generate "rails_template18f:newrelic"
174
+ end
194
175
  register_announcement("New Relic", <<~EOM)
195
176
  A New Relic config file has been written to `config/newrelic.yml`
196
177
 
197
- To get started sending metrics via New Relic APM:
198
- 1. Replace `<APPNAME>` with what is registered for your application in New Relic
199
- 2. Add your New Relic license key to the Rails credentials with key `new_relic_key`.
200
- 3. Comment out the `agent_enabled: false` line
201
-
202
- To enable browser monitoring:
203
- 4. Embed the Javascript snippet provided by New Relic into `application.html.erb`.
204
- It is recommended to vary this based on environment (i.e. include one snippet
205
- for staging and another for production).
178
+ See instructions in README to get started sending data to New Relic
206
179
  EOM
207
180
  end
208
181
 
@@ -222,11 +195,10 @@ end
222
195
 
223
196
  copy_file "lib/tasks/scanning.rake"
224
197
  copy_file "env", ".env"
198
+ copy_file "githooks/pre-commit", ".githooks/pre-commit", mode: :preserve
225
199
 
226
200
  unless skip_git?
227
201
  rails_command "credentials:diff --enroll"
228
- template "githooks/pre-commit", ".githooks/pre-commit"
229
- chmod ".githooks/pre-commit", 0o755
230
202
  append_to_file ".gitignore", <<~EOM
231
203
 
232
204
  # Ignore local dotenv overrides
@@ -377,19 +349,13 @@ after_bundle do
377
349
  end
378
350
 
379
351
  if @terraform
380
- directory "terraform", mode: :preserve
381
- chmod "terraform/bootstrap/run.sh", 0o755
382
- chmod "terraform/bootstrap/teardown_creds.sh", 0o755
383
- unless skip_git?
384
- append_to_file ".gitignore", <<~EOM
385
-
386
- # Terraform
387
- .terraform.lock.hcl
388
- **/.terraform/*
389
- secrets.auto.tfvars
390
- terraform.tfstate
391
- terraform.tfstate.backup
392
- EOM
352
+ after_bundle do
353
+ generator_arguments = [
354
+ "--cg-org=#{@cloud_gov_organization}",
355
+ "--cg-staging=#{@cloud_gov_staging_space}",
356
+ "--cg-prod=#{@cloud_gov_production_space}"
357
+ ]
358
+ generate "rails_template18f:terraform", *generator_arguments
393
359
  end
394
360
  if cloud_gov_org_tktk?
395
361
  register_announcement("Terraform", <<~EOM)
@@ -437,11 +403,7 @@ if @circleci_pipeline
437
403
  EOM
438
404
  end
439
405
 
440
- if @adrs
441
- directory "doc"
442
- else
443
- directory "doc/compliance"
444
- end
406
+ directory "doc"
445
407
  register_announcement("Documentation", <<~EOM)
446
408
  * Include a short description of your application in doc/compliance/apps/application.boundary.md
447
409
  * Remember to keep your Logical Data Model up to date in doc/compliance/apps/data.logical.md
@@ -449,13 +411,7 @@ EOM
449
411
 
450
412
  if @dap
451
413
  after_bundle do
452
- insert_into_file "app/views/layouts/application.html.erb", <<-EODAP, before: /^\s+<\/head>/
453
-
454
- <% if Rails.env.production? %>
455
- <!-- We participate in the US government's analytics program. See the data at analytics.usa.gov. -->
456
- <%= javascript_include_tag "https://dap.digitalgov.gov/Universal-Federated-Analytics-Min.js?agency=GSA", async: true, id:"_fed_an_ua_tag" %>
457
- <% end %>
458
- EODAP
414
+ generate "rails_template18f:dap"
459
415
  end
460
416
  register_announcement("Digital Analytics Program", "Update the DAP agency code in app/views/layouts/application.html.erb")
461
417
  end
@@ -53,10 +53,9 @@ TBD
53
53
 
54
54
  The system's Content-Security-Policy header prevents `<script>` and `<style>` tags from working without further
55
55
  configuration. Use `<%%= javascript_tag nonce: true %>` for inline javascript.
56
- <% if @adrs %>
56
+
57
57
  See the [CSP compliant script tag helpers](./doc/adr/0004-rails-csp-compliant-script-tag-helpers.md) ADR for
58
58
  more information on setting these up successfully.
59
- <% end %>
60
59
 
61
60
  ## Internationalization
62
61
 
@@ -101,10 +100,9 @@ Run everything: `bundle exec rake`
101
100
 
102
101
  When new pages are added to the application, ensure they are added to `./.pa11yci` so that they can be scanned.
103
102
 
104
- ### Automatic linting <% if @terraform %>and terraform formatting<% end %>
103
+ ### Automatic linting
105
104
 
106
- To enable automatic ruby linting<% if @terraform %> and terraform formatting<% end %> on every `git commit`
107
- follow the instructions at the top of `.githooks/pre-commit`
105
+ To enable automatic ruby linting on every `git commit` follow the instructions at the top of `.githooks/pre-commit`
108
106
 
109
107
  ## CI/CD
110
108
 
@@ -114,24 +112,16 @@ Each environment has dependencies on a PostgreSQL RDS instance managed by cloud.
114
112
  See [cloud.gov docs](https://cloud.gov/docs/services/relational-database/) for information on RDS.
115
113
 
116
114
  #### Staging
117
-
118
115
  <% if !@github_actions && !@circleci_pipeline %>
119
- <% if @terraform %>
120
- Follow the instructions in `terraform/README.md` to create the supporting services.
121
- <% else %>
122
116
  Before the first deploy only, create DB service with `cf create-service aws-rds micro-psql <%= app_name %>-rds-staging`
123
- <% end %>
117
+
124
118
  `cf push --strategy rolling --vars-file config/deployment/staging.yml --var rails_master_key=$(cat config/master.key)`
125
119
  <% end %>
126
120
 
127
121
  #### Production
128
-
129
122
  <% if !@github_actions && !@circleci_pipeline %>
130
- <% if @terraform %>
131
- Follow the instructions in `terraform/README.md` to create the supporting services.
132
- <% else %>
133
123
  Before the first deploy only, create DB service with `cf create-service aws-rds <<SERVICE_PLAN_NAME>> <%= app_name %>-rds-production`
134
- <% end %>
124
+
135
125
  `cf push --strategy rolling --vars-file config/deployment/production.yml --var rails_master_key=$(cat config/credentials/production.key)`
136
126
  <% end %>
137
127
 
@@ -150,34 +140,8 @@ Otherwise, they are set as a `((variable))` within `manifest.yml` and the variab
150
140
 
151
141
  Configuration that changes from staging to production, but is public, should be added to `config/deployment/staging.yml` and `config/deployment/production.yml`
152
142
 
153
- <% if @newrelic %>
154
- ## Monitoring with New Relic
155
-
156
- The [New Relic Ruby agent](https://docs.newrelic.com/docs/apm/agents/ruby-agent/getting-started/introduction-new-relic-ruby) has been installed for monitoring this application.
157
-
158
- The config lives at `config/newrelic.yml`, and points to a [FEDRAMP version of the New Relic service as its host](https://docs.newrelic.com/docs/security/security-privacy/compliance/fedramp-compliant-endpoints/). To access the metrics dashboard, you will need to be connected to VPN.
159
-
160
- ### Getting started
161
-
162
- To get started sending metrics via New Relic APM:
163
- 1. Replace `<APPNAME>` in `config/newrelic.yml` with what is registered for your application in New Relic
164
- 1. Add your New Relic license key to the Rails credentials with key `new_relic_key`.
165
- 1. Comment out the `agent_enabled: false` line in `config/newrelic.yml`
166
- 1. Add the [Javascript snippet provided by New Relic](https://docs.newrelic.com/docs/browser/browser-monitoring/installation/install-browser-monitoring-agent) into `application.html.erb`. It is recommended to vary this based on environment (i.e. include one snippet for staging and another for production).
167
- <% end %>
168
-
169
- <% if @dap %>
170
- ## Analytics
171
-
172
- Digital Analytics Program (DAP) code has been included for the Production environment, associated with GSA.
173
-
174
- If <%= app_name.titleize %> is for another agency, update the agency line in `app/views/layouts/application.html.erb`
175
- <% end %>
176
-
177
143
  ## Documentation
178
144
 
179
- <% if @adrs %>
180
-
181
145
  Architectural Decision Records (ADR) are stored in `doc/adr`
182
146
  To create a new ADR, first install [ADR-tools](https://github.com/npryce/adr-tools) if you don't
183
147
  already have it installed.
@@ -187,7 +151,6 @@ Then create the ADR:
187
151
  * `adr new Title Of Architectural Decision`
188
152
 
189
153
  This will create a new, numbered ADR in the `doc/adr` directory.
190
- <% end %>
191
154
 
192
155
  Compliance diagrams are stored in `doc/compliance`. See the README there for more information on
193
156
  generating diagram updates.
@@ -197,8 +160,8 @@ generating diagram updates.
197
160
  *This will continue to evolve as the project moves forward.*
198
161
 
199
162
  * Pull down the most recent main before checking out a branch
200
- * Write your code<% if @adrs %>
201
- * If a big architectural decision was made, add an ADR<% end %>
163
+ * Write your code
164
+ * If a big architectural decision was made, add an ADR
202
165
  * Submit a PR
203
166
  * If you added functionality, please add tests.
204
167
  * All tests must pass!
@@ -11,6 +11,7 @@ LAYOUT_WITH_LEGEND()
11
11
  title application boundary view
12
12
 
13
13
  Person_Ext(public, "Public", "A member of the public")
14
+ Person(developer, "Developer", "Application developers")
14
15
 
15
16
  Boundary(device, "Computing Device", "Windows, OS X, Linux, iOS, Android"){
16
17
  System_Ext(browser, "Web Browser", "any modern version")
@@ -39,20 +40,10 @@ Boundary(aws, "AWS GovCloud") {
39
40
 
40
41
 
41
42
  Boundary(gsa_saas, "GSA-authorized SaaS") {
42
- <% if @dap %>
43
- System_Ext(dap, "DAP", "Analytics collection")
44
- <% end %>
45
- <% if @newrelic %>
46
- System_Ext(newrelic, "New Relic", "Monitoring SaaS")
47
- <% end %>
48
43
  }
49
- <% if @dap %>
50
- Rel(browser, dap, "reports usage", "https (443)")
51
- <% end %>
52
- <% if @newrelic %>
53
- Rel(app, newrelic, "reports telemetry (ruby agent)", "tcp (443)")
54
- Rel(browser, newrelic, "reports ux metrics (javascript agent)", "https (443)")
55
- <% end %>
44
+
45
+ Boundary(cicd, "CI/CD Pipeline") {
46
+ }
56
47
 
57
48
  Rel(browser, aws_alb, "request info, submit requests", "https GET/POST (443)")
58
49
  Rel(aws_alb, cloudgov_router, "proxies requests", "https GET/POST (443)")
@@ -61,17 +52,6 @@ Rel(app, app_db, "reads/writes primary data", "psql (5432)")
61
52
  <% if !skip_active_storage? %>
62
53
  Rel(app, app_s3, "reads/writes file data", "https (443)")
63
54
  <% end %>
64
-
65
- Person(developer, "Developer", "Application developers")
66
- Boundary(cicd, "CI/CD Pipeline") {
67
- }
68
-
69
- <% if @dap %>
70
- Rel(developer, dap, "View traffic statistics", "https GET (443)")
71
- <% end %>
72
- <% if @newrelic %>
73
- Rel(developer, newrelic, "Manage performance", "https (443)")
74
- <% end %>
75
55
  @enduml
76
56
  ```
77
57
 
@@ -18,18 +18,3 @@ if [ $linter_status -ne 0 ]; then
18
18
  echo "Fix above before committing. Run 'git commit -n' to bypass linter."
19
19
  exit 1
20
20
  fi
21
-
22
- <% if @terraform %>
23
- echo "Running Terraform formatter"
24
- # imitates https://github.com/HHS/Head-Start-TTADP/blob/3b72ff05d94fab4cda877c63d8cd6970f0eeffc7/.githooks/pre-commit
25
-
26
- files=$(git diff --cached --name-only terraform)
27
- for f in $files
28
- do
29
- # Format any *.tf files that were cached/staged
30
- if [ -e "$f" ] && [[ $f == *.tf ]]; then
31
- terraform fmt "$f"
32
- git add "$f"
33
- fi
34
- done
35
- <% end %>
@@ -8,8 +8,7 @@ applications:
8
8
  RAILS_MASTER_KEY: ((rails_master_key))
9
9
  RAILS_ENV: ((env))
10
10
  RAILS_LOG_TO_STDOUT: true
11
- RAILS_SERVE_STATIC_FILES: true<% if @newrelic %>
12
- NEW_RELIC_LOG: stdout<% end %>
11
+ RAILS_SERVE_STATIC_FILES: true
13
12
  processes:
14
13
  - type: web
15
14
  instances: ((web_instances))
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_template_18f
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Ahearn
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-02-14 00:00:00.000000000 Z
11
+ date: 2022-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -103,6 +103,7 @@ files:
103
103
  - lib/generators/rails_template18f/circleci/templates/bin/ci-server-start
104
104
  - lib/generators/rails_template18f/circleci/templates/circleci/config.yml.tt
105
105
  - lib/generators/rails_template18f/circleci/templates/docker-compose.ci.yml
106
+ - lib/generators/rails_template18f/dap/dap_generator.rb
106
107
  - lib/generators/rails_template18f/github_actions/github_actions_generator.rb
107
108
  - lib/generators/rails_template18f/github_actions/templates/github/actions/run-server/action.yml
108
109
  - lib/generators/rails_template18f/github_actions/templates/github/actions/setup-languages/action.yml.tt
@@ -117,7 +118,37 @@ files:
117
118
  - lib/generators/rails_template18f/github_actions/templates/github/workflows/rspec.yml.tt
118
119
  - lib/generators/rails_template18f/github_actions/templates/github/workflows/terraform-production.yml
119
120
  - lib/generators/rails_template18f/github_actions/templates/github/workflows/terraform-staging.yml
120
- - lib/rails_template18f/terraform_options.rb
121
+ - lib/generators/rails_template18f/newrelic/newrelic_generator.rb
122
+ - lib/generators/rails_template18f/newrelic/templates/config/newrelic.yml.tt
123
+ - lib/generators/rails_template18f/terraform/templates/terraform/README.md.tt
124
+ - lib/generators/rails_template18f/terraform/templates/terraform/bootstrap/import.sh
125
+ - lib/generators/rails_template18f/terraform/templates/terraform/bootstrap/main.tf.tt
126
+ - lib/generators/rails_template18f/terraform/templates/terraform/bootstrap/providers.tf
127
+ - lib/generators/rails_template18f/terraform/templates/terraform/bootstrap/run.sh.tt
128
+ - lib/generators/rails_template18f/terraform/templates/terraform/bootstrap/teardown_creds.sh.tt
129
+ - lib/generators/rails_template18f/terraform/templates/terraform/bootstrap/variables.tf
130
+ - lib/generators/rails_template18f/terraform/templates/terraform/create_space_deployer.sh
131
+ - lib/generators/rails_template18f/terraform/templates/terraform/destroy_space_deployer.sh
132
+ - lib/generators/rails_template18f/terraform/templates/terraform/production/main.tf.tt
133
+ - lib/generators/rails_template18f/terraform/templates/terraform/production/providers.tf.tt
134
+ - lib/generators/rails_template18f/terraform/templates/terraform/production/variables.tf
135
+ - lib/generators/rails_template18f/terraform/templates/terraform/shared/database/main.tf.tt
136
+ - lib/generators/rails_template18f/terraform/templates/terraform/shared/database/providers.tf
137
+ - lib/generators/rails_template18f/terraform/templates/terraform/shared/database/variables.tf
138
+ - lib/generators/rails_template18f/terraform/templates/terraform/shared/domain/main.tf.tt
139
+ - lib/generators/rails_template18f/terraform/templates/terraform/shared/domain/providers.tf
140
+ - lib/generators/rails_template18f/terraform/templates/terraform/shared/domain/variables.tf
141
+ - lib/generators/rails_template18f/terraform/templates/terraform/shared/s3/main.tf
142
+ - lib/generators/rails_template18f/terraform/templates/terraform/shared/s3/providers.tf
143
+ - lib/generators/rails_template18f/terraform/templates/terraform/shared/s3/variables.tf
144
+ - lib/generators/rails_template18f/terraform/templates/terraform/staging/main.tf.tt
145
+ - lib/generators/rails_template18f/terraform/templates/terraform/staging/providers.tf.tt
146
+ - lib/generators/rails_template18f/terraform/templates/terraform/staging/variables.tf
147
+ - lib/generators/rails_template18f/terraform/terraform_generator.rb
148
+ - lib/rails_template18f/generators.rb
149
+ - lib/rails_template18f/generators/base.rb
150
+ - lib/rails_template18f/generators/cloud_gov_options.rb
151
+ - lib/rails_template18f/generators/pipeline_options.rb
121
152
  - lib/rails_template18f/version.rb
122
153
  - lib/rails_template_18f.rb
123
154
  - rails-template-18f.gemspec
@@ -143,7 +174,6 @@ files:
143
174
  - templates/config/locales/es.yml
144
175
  - templates/config/locales/fr.yml
145
176
  - templates/config/locales/zh.yml
146
- - templates/config/newrelic.yml
147
177
  - templates/doc/adr/0001-record-architecture-decisions.md.tt
148
178
  - templates/doc/adr/0002-initial-architecture-decisions.md.tt
149
179
  - templates/doc/adr/0003-security-scans.md.tt
@@ -154,35 +184,11 @@ files:
154
184
  - templates/doc/compliance/rendered/apps/.keep
155
185
  - templates/editorconfig
156
186
  - templates/env
157
- - templates/githooks/pre-commit.tt
187
+ - templates/githooks/pre-commit
158
188
  - templates/lib/tasks/cf.rake
159
189
  - templates/lib/tasks/scanning.rake
160
190
  - templates/manifest.yml.tt
161
191
  - templates/pa11yci
162
- - templates/terraform/README.md.tt
163
- - templates/terraform/bootstrap/import.sh
164
- - templates/terraform/bootstrap/main.tf.tt
165
- - templates/terraform/bootstrap/providers.tf
166
- - templates/terraform/bootstrap/run.sh.tt
167
- - templates/terraform/bootstrap/teardown_creds.sh.tt
168
- - templates/terraform/bootstrap/variables.tf
169
- - templates/terraform/create_space_deployer.sh
170
- - templates/terraform/destroy_space_deployer.sh
171
- - templates/terraform/production/main.tf.tt
172
- - templates/terraform/production/providers.tf.tt
173
- - templates/terraform/production/variables.tf
174
- - templates/terraform/shared/database/main.tf.tt
175
- - templates/terraform/shared/database/providers.tf
176
- - templates/terraform/shared/database/variables.tf
177
- - templates/terraform/shared/domain/main.tf.tt
178
- - templates/terraform/shared/domain/providers.tf
179
- - templates/terraform/shared/domain/variables.tf
180
- - templates/terraform/shared/s3/main.tf
181
- - templates/terraform/shared/s3/providers.tf
182
- - templates/terraform/shared/s3/variables.tf
183
- - templates/terraform/staging/main.tf.tt
184
- - templates/terraform/staging/providers.tf.tt
185
- - templates/terraform/staging/variables.tf
186
192
  - templates/zap.conf
187
193
  homepage: https://github.com/18f/rails-template
188
194
  licenses: []
@@ -1,68 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RailsTemplate18f
4
- module TerraformOptions
5
- extend ActiveSupport::Concern
6
-
7
- included do
8
- class_option :cg_org, desc: "cloud.gov organization name"
9
- class_option :cg_staging, desc: "cloud.gov space name for staging"
10
- class_option :cg_prod, desc: "cloud.gov space name for production"
11
- class_option :terraform, type: :boolean, desc: "Generate actions for planning and applying terraform"
12
- end
13
-
14
- private
15
-
16
- def ruby_version
17
- RUBY_VERSION
18
- end
19
-
20
- def terraform?
21
- options[:terraform].nil? ? terraform_dir_exists? : options[:terraform]
22
- end
23
-
24
- def cloud_gov_organization
25
- if options[:cg_org].present?
26
- return options[:cg_org]
27
- elsif terraform_dir_exists?
28
- staging_main = File.read(terraform_path.join("staging", "main.tf"))
29
- if (matches = staging_main.match(/cf_org_name\s+= "(?<org_name>.*)"/))
30
- return matches[:org_name]
31
- end
32
- end
33
- "TKTK-cloud.gov-org-name"
34
- end
35
-
36
- def cloud_gov_staging_space
37
- if options[:cg_staging].present?
38
- return options[:cg_staging]
39
- elsif terraform_dir_exists?
40
- staging_main = File.read(terraform_path.join("staging", "main.tf"))
41
- if (matches = staging_main.match(/cf_space_name\s+= "(?<space_name>.*)"/))
42
- return matches[:space_name]
43
- end
44
- end
45
- "staging"
46
- end
47
-
48
- def cloud_gov_production_space
49
- if options[:cg_prod].present?
50
- return options[:cg_prod]
51
- elsif terraform_dir_exists?
52
- prod_main = File.read(terraform_path.join("production", "main.tf"))
53
- if (matches = prod_main.match(/cf_space_name\s+= "(?<space_name>.*)"/))
54
- return matches[:space_name]
55
- end
56
- end
57
- "prod"
58
- end
59
-
60
- def terraform_path
61
- Pathname.new File.expand_path("terraform", destination_root)
62
- end
63
-
64
- def terraform_dir_exists?
65
- Dir.exist? terraform_path
66
- end
67
- end
68
- end
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
- ../destroy_space_deployer.sh <%= @cloud_gov_production_space %> config-bootstrap-deployer
4
-
5
- rm secrets.auto.tfvars