rails_template_18f 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.standard.yml +2 -0
  4. data/CHANGELOG.md +6 -0
  5. data/CODE_OF_CONDUCT.md +84 -0
  6. data/Gemfile +10 -0
  7. data/Gemfile.lock +132 -0
  8. data/LICENSE.md +21 -0
  9. data/README.md +140 -0
  10. data/Rakefile +10 -0
  11. data/bin/console +16 -0
  12. data/bin/setup +8 -0
  13. data/lib/generators/rails_template18f/circleci/circleci_generator.rb +116 -0
  14. data/lib/generators/rails_template18f/circleci/templates/Dockerfile.tt +13 -0
  15. data/lib/generators/rails_template18f/circleci/templates/bin/ci-server-start +8 -0
  16. data/lib/generators/rails_template18f/circleci/templates/circleci/config.yml.tt +413 -0
  17. data/lib/generators/rails_template18f/circleci/templates/docker-compose.ci.yml +26 -0
  18. data/lib/generators/rails_template18f/github_actions/github_actions_generator.rb +137 -0
  19. data/lib/generators/rails_template18f/github_actions/templates/github/actions/run-server/action.yml +28 -0
  20. data/lib/generators/rails_template18f/github_actions/templates/github/actions/setup-languages/action.yml.tt +20 -0
  21. data/lib/generators/rails_template18f/github_actions/templates/github/actions/setup-project/action.yml.tt +33 -0
  22. data/lib/generators/rails_template18f/github_actions/templates/github/workflows/brakeman-analysis.yml +44 -0
  23. data/lib/generators/rails_template18f/github_actions/templates/github/workflows/dependency-scans.yml +39 -0
  24. data/lib/generators/rails_template18f/github_actions/templates/github/workflows/deploy-production.yml.tt +53 -0
  25. data/lib/generators/rails_template18f/github_actions/templates/github/workflows/deploy-staging.yml.tt +53 -0
  26. data/lib/generators/rails_template18f/github_actions/templates/github/workflows/owasp-daily-scan.yml.tt +44 -0
  27. data/lib/generators/rails_template18f/github_actions/templates/github/workflows/owasp-scan.yml.tt +47 -0
  28. data/lib/generators/rails_template18f/github_actions/templates/github/workflows/pa11y.yml.tt +65 -0
  29. data/lib/generators/rails_template18f/github_actions/templates/github/workflows/rspec.yml.tt +34 -0
  30. data/lib/generators/rails_template18f/github_actions/templates/github/workflows/terraform-production.yml +79 -0
  31. data/lib/generators/rails_template18f/github_actions/templates/github/workflows/terraform-staging.yml +79 -0
  32. data/lib/rails_template18f/terraform_options.rb +68 -0
  33. data/lib/rails_template18f/version.rb +5 -0
  34. data/lib/rails_template_18f.rb +13 -0
  35. data/rails-template-18f.gemspec +40 -0
  36. data/railsrc +10 -0
  37. data/railsrc-hotwire +8 -0
  38. data/template.rb +506 -0
  39. data/templates/README.md.tt +213 -0
  40. data/templates/app/assets/images/uswds.js +5 -0
  41. data/templates/app/assets/stylesheets/uswds-settings.scss +7 -0
  42. data/templates/app/views/application/_banner_lock_icon.html.erb +19 -0
  43. data/templates/app/views/application/_demo_site_banner.html.erb +3 -0
  44. data/templates/app/views/application/_header.html.erb +26 -0
  45. data/templates/app/views/application/_usa_banner.html.erb +51 -0
  46. data/templates/bin/owasp-scan +49 -0
  47. data/templates/bin/pa11y-scan +10 -0
  48. data/templates/bin/with-server +35 -0
  49. data/templates/browserslistrc +5 -0
  50. data/templates/config/deployment/production.yml +3 -0
  51. data/templates/config/deployment/staging.yml +3 -0
  52. data/templates/config/environments/ci.rb +10 -0
  53. data/templates/config/environments/staging.rb +6 -0
  54. data/templates/config/locales/en.yml.tt +25 -0
  55. data/templates/config/locales/es.yml +19 -0
  56. data/templates/config/locales/fr.yml +22 -0
  57. data/templates/config/locales/zh.yml +16 -0
  58. data/templates/config/newrelic.yml +65 -0
  59. data/templates/doc/adr/0001-record-architecture-decisions.md.tt +21 -0
  60. data/templates/doc/adr/0002-initial-architecture-decisions.md.tt +24 -0
  61. data/templates/doc/adr/0003-security-scans.md.tt +44 -0
  62. data/templates/doc/adr/0004-rails-csp-compliant-script-tag-helpers.md.tt +53 -0
  63. data/templates/doc/compliance/README.md +37 -0
  64. data/templates/doc/compliance/apps/application.boundary.md.tt +80 -0
  65. data/templates/doc/compliance/apps/data.logical.md +21 -0
  66. data/templates/doc/compliance/rendered/apps/.keep +0 -0
  67. data/templates/editorconfig +5 -0
  68. data/templates/env +10 -0
  69. data/templates/githooks/pre-commit.tt +35 -0
  70. data/templates/lib/tasks/cf.rake +9 -0
  71. data/templates/lib/tasks/scanning.rake +63 -0
  72. data/templates/manifest.yml.tt +19 -0
  73. data/templates/pa11yci +9 -0
  74. data/templates/terraform/README.md.tt +148 -0
  75. data/templates/terraform/bootstrap/import.sh +12 -0
  76. data/templates/terraform/bootstrap/main.tf.tt +25 -0
  77. data/templates/terraform/bootstrap/providers.tf +16 -0
  78. data/templates/terraform/bootstrap/run.sh.tt +12 -0
  79. data/templates/terraform/bootstrap/teardown_creds.sh.tt +5 -0
  80. data/templates/terraform/bootstrap/variables.tf +2 -0
  81. data/templates/terraform/create_space_deployer.sh +33 -0
  82. data/templates/terraform/destroy_space_deployer.sh +19 -0
  83. data/templates/terraform/production/main.tf.tt +50 -0
  84. data/templates/terraform/production/providers.tf.tt +17 -0
  85. data/templates/terraform/production/variables.tf +2 -0
  86. data/templates/terraform/shared/database/main.tf.tt +23 -0
  87. data/templates/terraform/shared/database/providers.tf +16 -0
  88. data/templates/terraform/shared/database/variables.tf +42 -0
  89. data/templates/terraform/shared/domain/main.tf.tt +46 -0
  90. data/templates/terraform/shared/domain/providers.tf +16 -0
  91. data/templates/terraform/shared/domain/variables.tf +47 -0
  92. data/templates/terraform/shared/s3/main.tf +27 -0
  93. data/templates/terraform/shared/s3/providers.tf +16 -0
  94. data/templates/terraform/shared/s3/variables.tf +43 -0
  95. data/templates/terraform/staging/main.tf.tt +30 -0
  96. data/templates/terraform/staging/providers.tf.tt +17 -0
  97. data/templates/terraform/staging/variables.tf +2 -0
  98. data/templates/zap.conf +121 -0
  99. metadata +213 -0
@@ -0,0 +1,213 @@
1
+ <%= app_name.titleize %>
2
+ ========================
3
+
4
+ <<TKTK: quick summary of project>>
5
+
6
+ ## Development
7
+
8
+ If you're new to Rails, see the [Getting Started with Rails](https://guides.rubyonrails.org/getting_started.html)
9
+ guide for an introduction to the framework.
10
+
11
+ ### Local Setup
12
+
13
+ * Install Ruby <%= @ruby_version %>
14
+ * Install NodeJS <%= @node_version %>
15
+ * Install PostgreSQL: `brew install postgresql`
16
+ * Add postgres to your PATH if it wasn't done automatically
17
+ `echo 'export PATH="/usr/local/opt/postgresql/bin:$PATH"' >> ~/.zshrc`
18
+ * Start the server
19
+ `brew services start postgresql`
20
+ * Install Ruby dependencies: `bundle install`
21
+ * Install chromedriver for integration tests: `brew install --cask chromedriver`
22
+ * Chromedriver must be allowed to run. You can either do that by:
23
+ * The command line: `xattr -d com.apple.quarantine $(which chromedriver)` (this is the only option if you are on Big Sur)
24
+ * Manually: clicking "allow" when you run the integration tests for the first time and a dialogue opens up
25
+ * Install JS dependencies: `yarn install`
26
+ * Create database: `bundle exec rake db:create`
27
+ * Run migrations: `bundle exec rake db:migrate`
28
+ * Run the server: `bundle exec rails s`
29
+ * Visit the site: http://localhost:3000
30
+
31
+ ### Local Configuration
32
+
33
+ Environment variables can be set in development using the [dotenv](https://github.com/bkeepers/dotenv) gem.
34
+
35
+ Consistent but sensitive credentials should be added to `config/credentials.yml.env` by using `$ rails credentials:edit`
36
+
37
+ Production credentials should be added to `config/credentials/production.yml.env` by using `$ rails credentials:edit --environment production`
38
+
39
+ Any changes to variables in `.env` that should not be checked into git should be set
40
+ in `.env.local`.
41
+
42
+ If you wish to override a config globally for the `test` Rails environment you can set it in `.env.test.local`.
43
+ However, any config that should be set on other machines should either go into `.env` or be explicitly set as part
44
+ of the test.
45
+
46
+ ## Security
47
+
48
+ ### Authentication
49
+
50
+ TBD
51
+
52
+ ### Inline `<script>` and `<style>` security
53
+
54
+ The system's Content-Security-Policy header prevents `<script>` and `<style>` tags from working without further
55
+ configuration. Use `<%%= javascript_tag nonce: true %>` for inline javascript.
56
+ <% if @adrs %>
57
+ See the [CSP compliant script tag helpers](./doc/adr/0004-rails-csp-compliant-script-tag-helpers.md) ADR for
58
+ more information on setting these up successfully.
59
+ <% end %>
60
+
61
+ ## Internationalization
62
+
63
+ ### Managing locale files
64
+
65
+ We use the gem `i18n-tasks` to manage locale files. Here are a few common tasks:
66
+
67
+ Add missing keys across locales:
68
+ ```
69
+ $ i18n-tasks missing # shows missing keys
70
+ $ i18n-tasks add-missing # adds missing keys across locale files
71
+ ```
72
+
73
+ Key sorting:
74
+ ```
75
+ $ i18n-tasks normalize
76
+ ```
77
+
78
+ Removing unused keys:
79
+ ```
80
+ $ i18n-tasks unused # shows unused keys
81
+ $ i18n-tasks remove-unused # removes unused keys across locale files
82
+ ```
83
+
84
+ For more information on usage and helpful rake tasks to manage locale files, see [the documentation](https://github.com/glebm/i18n-tasks#usage).
85
+
86
+ ## Testing
87
+
88
+ ### Running tests
89
+
90
+ * Tests: `bundle exec rake spec`
91
+ * Ruby linter: `bundle exec rake standard`
92
+ * Accessibility scan: `./bin/pa11y-scan`
93
+ * Dynamic security scan: `./bin/owasp-scan`
94
+ * Ruby static security scan: `bundle exec rake brakeman`
95
+ * Ruby dependency checks: `bundle exec rake bundler:audit`
96
+ * JS dependency checks: `bundle exec rake yarn:audit`
97
+
98
+ Run everything: `bundle exec rake`
99
+
100
+ #### Pa11y Scan
101
+
102
+ When new pages are added to the application, ensure they are added to `./.pa11yci` so that they can be scanned.
103
+
104
+ ### Automatic linting <% if @terraform %>and terraform formatting<% end %>
105
+
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`
108
+
109
+ ## CI/CD
110
+
111
+ ### Deployment
112
+
113
+ Each environment has dependencies on a PostgreSQL RDS instance managed by cloud.gov.
114
+ See [cloud.gov docs](https://cloud.gov/docs/services/relational-database/) for information on RDS.
115
+
116
+ #### Staging
117
+
118
+ <% if !@github_actions && !@circleci_pipeline %>
119
+ <% if @terraform %>
120
+ Follow the instructions in `terraform/README.md` to create the supporting services.
121
+ <% else %>
122
+ Before the first deploy only, create DB service with `cf create-service aws-rds micro-psql <%= app_name %>-rds-staging`
123
+ <% end %>
124
+ `cf push --strategy rolling --vars-file config/deployment/staging.yml --var rails_master_key=$(cat config/master.key)`
125
+ <% end %>
126
+
127
+ #### Production
128
+
129
+ <% if !@github_actions && !@circleci_pipeline %>
130
+ <% if @terraform %>
131
+ Follow the instructions in `terraform/README.md` to create the supporting services.
132
+ <% else %>
133
+ Before the first deploy only, create DB service with `cf create-service aws-rds <<SERVICE_PLAN_NAME>> <%= app_name %>-rds-production`
134
+ <% end %>
135
+ `cf push --strategy rolling --vars-file config/deployment/production.yml --var rails_master_key=$(cat config/credentials/production.key)`
136
+ <% end %>
137
+
138
+ ### Configuring ENV variables in cloud.gov
139
+
140
+ All configuration that needs to be added to the deployed application's ENV should be added to
141
+ the `env:` block in `manifest.yml`
142
+
143
+ Items that are both **public** and **consistent** across staging and production can be set directly there.
144
+
145
+ Otherwise, they are set as a `((variable))` within `manifest.yml` and the variable is defined depending on sensitivity:
146
+
147
+ #### Credentials and other Secrets
148
+
149
+ #### Non-secrets
150
+
151
+ Configuration that changes from staging to production, but is public, should be added to `config/deployment/staging.yml` and `config/deployment/production.yml`
152
+
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
+ ## Documentation
178
+
179
+ <% if @adrs %>
180
+
181
+ Architectural Decision Records (ADR) are stored in `doc/adr`
182
+ To create a new ADR, first install [ADR-tools](https://github.com/npryce/adr-tools) if you don't
183
+ already have it installed.
184
+ * `brew install adr-tools`
185
+
186
+ Then create the ADR:
187
+ * `adr new Title Of Architectural Decision`
188
+
189
+ This will create a new, numbered ADR in the `doc/adr` directory.
190
+ <% end %>
191
+
192
+ Compliance diagrams are stored in `doc/compliance`. See the README there for more information on
193
+ generating diagram updates.
194
+
195
+ ## Contributing
196
+
197
+ *This will continue to evolve as the project moves forward.*
198
+
199
+ * 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 %>
202
+ * Submit a PR
203
+ * If you added functionality, please add tests.
204
+ * All tests must pass!
205
+ * Ping the other engineers for a review.
206
+ * At least one approving review is required for merge.
207
+ * Rebase against main before merge to ensure your code is up-to-date!
208
+ * Merge after review.
209
+ * Squash commits into meaningful chunks of work and ensure that your commit messages convey meaning.
210
+
211
+ ## Story Acceptance
212
+
213
+ TBD
@@ -0,0 +1,5 @@
1
+ // Glue to find USWDS images with the `image_tag` helper
2
+
3
+ //= link uswds/dist/img/us_flag_small.png
4
+ //= link uswds/dist/img/icon-dot-gov.svg
5
+ //= link uswds/dist/img/icon-https.svg
@@ -0,0 +1,7 @@
1
+ // Point the asset pipline to the correct locations
2
+ $theme-font-path: "uswds/dist/fonts";
3
+ $theme-image-path: "uswds/dist/img";
4
+
5
+ $theme-show-notifications: false;
6
+
7
+ // Put your USWDS Theme settings here
@@ -0,0 +1,19 @@
1
+ <span class="icon-lock">
2
+ <svg
3
+ xmlns="http://www.w3.org/2000/svg"
4
+ width="52"
5
+ height="64"
6
+ viewBox="0 0 52 64"
7
+ class="usa-banner__lock-image"
8
+ role="img"
9
+ aria-labelledby="banner-lock-title banner-lock-description"
10
+ >
11
+ <title id="banner-lock-title"><%= t('shared.banner.lock') %></title>
12
+ <desc id="banner-lock-description"><%= t('shared.banner.locked_padlock') %></desc>
13
+ <path
14
+ fill="#000000"
15
+ fill-rule="evenodd"
16
+ d="M26 0c10.493 0 19 8.507 19 19v9h3a4 4 0 0 1 4 4v28a4 4 0 0 1-4 4H4a4 4 0 0 1-4-4V32a4 4 0 0 1 4-4h3v-9C7 8.507 15.507 0 26 0zm0 8c-5.979 0-10.843 4.77-10.996 10.712L15 19v9h22v-9c0-6.075-4.925-11-11-11z"
17
+ />
18
+ </svg>
19
+ </span>
@@ -0,0 +1,3 @@
1
+ <div class="font-sans-lg padding-y-4 bg-secondary-darker text-white line-height-1 text-center">
2
+ <%= t('shared.header.demo_banner') %>
3
+ </div>
@@ -0,0 +1,26 @@
1
+ <div class="usa-overlay"></div>
2
+ <header class="usa-header usa-header--basic">
3
+ <%= render "application/demo_site_banner" if Rails.configuration.x.show_demo_banner %>
4
+ <div class="usa-nav-container">
5
+ <div class="usa-navbar">
6
+ <div class="usa-logo">
7
+ <em class="usa-logo__text">
8
+ <%= link_to t('shared.header.title'), root_path %>
9
+ </em>
10
+ </div>
11
+ <button class="usa-menu-btn"><%= t('shared.header.menu') %></button>
12
+ </div>
13
+ <nav aria-label="<%= t('shared.header.primary') %>" class="usa-nav">
14
+ <button class="usa-nav__close">
15
+ <%= image_tag "uswds/dist/img/usa-icons/close.svg", role: "img", alt: t('shared.header.close') %>
16
+ </button>
17
+ <ul class="usa-nav__primary usa-accordion">
18
+ <% I18n.available_locales.each do |l| %>
19
+ <li class="usa-nav__primary-item">
20
+ <%= format_active_locale(l) %>
21
+ </li>
22
+ <% end %>
23
+ </ul>
24
+ </nav>
25
+ </div>
26
+ </header>
@@ -0,0 +1,51 @@
1
+ <a class="usa-skipnav" href="#main-content"><%= t('shared.skip_link') %></a>
2
+
3
+ <section class="usa-banner site-banner" aria-label="<%= t('shared.banner.official_site') %>">
4
+ <div class="usa-accordion">
5
+ <header class="usa-banner__header">
6
+ <div class="usa-banner__inner">
7
+ <div class="grid-col-auto">
8
+ <%= image_tag "uswds/dist/img/us_flag_small.png", alt: t('shared.banner.us_flag'), class: "usa-banner__header-flag" %>
9
+ </div>
10
+ <div class="grid-col-fill tablet:grid-col-auto">
11
+ <p class="usa-banner__header-text">
12
+ <%= t('shared.banner.official_site') %>
13
+ </p>
14
+ <p class="usa-banner__header-action" aria-hidden="true">
15
+ <%= t('shared.banner.how') %>
16
+ </p>
17
+ </div>
18
+ <button
19
+ class="usa-accordion__button usa-banner__button"
20
+ aria-expanded="false"
21
+ aria-controls="gov-banner"
22
+ >
23
+ <span class="usa-banner__button-text"><%= t('shared.banner.how') %></span>
24
+ </button>
25
+ </div>
26
+ </header>
27
+ <div class="usa-banner__content usa-accordion__content" id="gov-banner">
28
+ <%= javascript_tag nonce: true do %>
29
+ document.getElementById('gov-banner').setAttribute('hidden', '');
30
+ <% end %>
31
+ <div class="grid-row grid-gap-lg">
32
+ <div class="usa-banner__guidance tablet:grid-col-6">
33
+ <%= image_tag "uswds/dist/img/icon-dot-gov.svg", role: "img", "aria-hidden": true, class: "usa-banner__icon usa-media-block__img" %>
34
+ <div class="usa-media-block__body">
35
+ <strong><%= t('shared.banner.gov_heading') %></strong>
36
+ <br> <%= t('shared.banner.gov_description_html') %>
37
+ </div>
38
+ </div>
39
+ <div class="usa-banner__guidance tablet:grid-col-6">
40
+ <%= image_tag "uswds/dist/img/icon-https.svg", role: "img", "aria-hidden": true, class: "usa-banner__icon usa-media-block__img" %>
41
+ <div class="usa-media-block__body">
42
+ <p>
43
+ <strong><%= t('shared.banner.secure_heading') %></strong>
44
+ <br> <%= t('shared.banner.secure_description_html', lock_icon: render('application/banner_lock_icon')) %>
45
+ </p>
46
+ </div>
47
+ </div>
48
+ </div>
49
+ </div>
50
+ </div>
51
+ </section>
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env bash
2
+
3
+ usage="
4
+ $0: Run OWASP Zap scan against local server
5
+
6
+ Usage:
7
+ $0 -h
8
+ $0 [-f] [-s]
9
+
10
+ Options:
11
+ -h: show help and exit
12
+ -f: run full scan
13
+ -s: run with zap2docker-stable docker image
14
+
15
+ Notes:
16
+ * defaults to running a baseline scan in zap2docker-weekly
17
+ * prerequisites:
18
+ * db must be running
19
+ * docker must be running
20
+ * nothing listening on port 3000
21
+ * script currently only works on macOS
22
+ "
23
+
24
+ set -e
25
+
26
+ scan="zap-baseline.py"
27
+ docker_name="owasp/zap2docker-weekly"
28
+
29
+ while getopts "hfs" opt; do
30
+ case "$opt" in
31
+ f)
32
+ scan="zap-full-scan.py"
33
+ ;;
34
+ s)
35
+ docker_name="owasp/zap2docker-stable"
36
+ ;;
37
+ *)
38
+ echo "$usage"
39
+ exit 1
40
+ ;;
41
+ esac
42
+ done
43
+
44
+
45
+ hostname="http://host.docker.internal:3000"
46
+ args="-c zap.conf -I -r zap_report.html"
47
+ cmd="docker run --rm --user root -v $(pwd):/zap/wrk/:rw -t $docker_name $scan -t $hostname $args"
48
+
49
+ `dirname "$0"`/with-server "$cmd"
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # Run a pa11y scan locally in a near-production configuration
4
+ #
5
+ # prerequisits:
6
+ # * db is running
7
+ # * no other server is listening on port 3000
8
+
9
+
10
+ `dirname "$0"`/with-server "yarn run pa11y-ci"
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env bash
2
+ #
3
+ # Run the passed arguments in a near-production configuration
4
+ #
5
+ # prerequisits:
6
+ # * db is running
7
+ # * no other server is listening on port 3000
8
+
9
+ if [[ $# -eq 0 ]]; then
10
+ echo "You must pass the test to run against the CI environment server"
11
+ exit 1
12
+ fi
13
+
14
+ export RAILS_ENV=ci
15
+
16
+ # ensure assets are properly compiled for CI environment
17
+ bundle exec rake assets:clobber
18
+ bundle exec rake assets:precompile
19
+
20
+ # run the server
21
+ bundle exec rails server &
22
+ server_pid=$!
23
+ # pause to ensure the server has started
24
+ sleep 5
25
+
26
+
27
+ $@
28
+ exit_status=$?
29
+
30
+
31
+ # shut down the server and cleanup after ourselves
32
+ bundle exec rake assets:clobber
33
+ kill $server_pid
34
+
35
+ exit $exit_status
@@ -0,0 +1,5 @@
1
+ # Supported browsers
2
+ > 2%
3
+ last 2 versions
4
+ IE 11
5
+ not dead
@@ -0,0 +1,3 @@
1
+ env: production
2
+ web_instances: 2
3
+ web_memory: 512M
@@ -0,0 +1,3 @@
1
+ env: staging
2
+ web_instances: 1
3
+ web_memory: 512M
@@ -0,0 +1,10 @@
1
+ require_relative "./production"
2
+
3
+ Rails.application.configure do
4
+ config.assets.compile = true
5
+ config.public_file_server.enabled = true
6
+
7
+ logger = ActiveSupport::Logger.new($stdout)
8
+ logger.formatter = config.log_formatter
9
+ config.logger = ActiveSupport::TaggedLogging.new(logger)
10
+ end
@@ -0,0 +1,6 @@
1
+ require_relative "./production"
2
+
3
+ Rails.application.configure do
4
+ # insert any staging overrides here
5
+ config.x.show_demo_banner = true
6
+ end
@@ -0,0 +1,25 @@
1
+ ---
2
+ en:
3
+ shared:
4
+ banner:
5
+ gov_description_html: A <strong>.gov</strong> website belongs to an official government organization in the United States.
6
+ gov_heading: Official websites use .gov
7
+ how: Here’s how you know
8
+ lock: Lock
9
+ locked_padlock: A locked padlock
10
+ official_site: An official website of the United States government
11
+ secure_description_html: A <strong>lock</strong> (%{lock_icon}) or <strong>https://</strong> means you’ve safely connected to the .gov website. Share sensitive information only on official, secure websites.
12
+ secure_heading: Secure .gov websites use HTTPS
13
+ us_flag: U.S. Flag
14
+ header:
15
+ title: <%= app_name.titleize %>
16
+ menu: Menu
17
+ close: Close
18
+ primary: Primary navigation
19
+ demo_banner: TEST SITE - Do not use real personal information (demo purposes only) - TEST SITE
20
+ languages:
21
+ en: English
22
+ es: Español
23
+ fr: Français
24
+ zh: 中文
25
+ skip_link: Skip to main content
@@ -0,0 +1,19 @@
1
+ ---
2
+ es:
3
+ shared:
4
+ banner:
5
+ gov_description_html: Un sitio web <strong>.gov</strong> pertenece a una organización oficial del Gobierno de Estados Unidos.
6
+ gov_heading: Los sitios web oficiales usan .gov
7
+ how: Así es como usted puede verificarlo
8
+ lock: Candado
9
+ locked_padlock: Candado cerrado
10
+ official_site: Un sitio oficial del Gobierno de Estados Unidos
11
+ secure_description_html: Un <strong>candado</strong> (%{lock_icon}) o <strong>https://</strong> significa que usted se conectó de forma segura a un sitio web .gov. Comparta información sensible sólo en sitios web oficiales y seguros.
12
+ secure_heading: Los sitios web seguros .gov usan HTTPS
13
+ us_flag: Bandera de Estados Unidos
14
+ header:
15
+ menu: Menú
16
+ close: Cerrar
17
+ primary: Navegacion primaria
18
+ demo_banner: SITIO DE PRUEBA - No utilice información personal real (sólo para propósitos de demostración) - SITIO DE PRUEBA
19
+ skip_link: Salte al contenido principal
@@ -0,0 +1,22 @@
1
+ ---
2
+ fr:
3
+ shared:
4
+ banner:
5
+ gov_description_html: Un site Web <strong>.gov</strong> appartient à une organisation gouvernementale officielle des États-Unis.
6
+ gov_heading: Les sites Web officiels utilisent .gov
7
+ how: Voici comment vous savez
8
+ lock: Verrou
9
+ locked_padlock: Verrou fermé
10
+ official_site: Un site web officiel du gouvernement des États-Unis
11
+ secure_description_html: Un <strong>verrou</strong> (%{lock_icon}) ou
12
+ <strong>https://</strong> signifie que vous êtes connecté en toute
13
+ sécurité au site Web .gov. Partagez des informations sensibles
14
+ uniquement sur des sites Web officiels et sécurisés.
15
+ secure_heading: Les sites Web sécurisés .gov utilisent HTTPS
16
+ us_flag: Drapeau américain
17
+ header:
18
+ menu: Menu
19
+ close: Fermer
20
+ primary: Navigation primaire
21
+ demo_banner: SITE DE TEST - N’utilisez pas de véritables données personnelles (il s’agit d’une démonstration seulement) - SITE DE TEST
22
+ skip_link: Passer au contenu principal
@@ -0,0 +1,16 @@
1
+ ---
2
+ zh:
3
+ shared:
4
+ banner:
5
+ gov_description_html: "<strong>“.gov”</strong>网站为美国官方政府组织机构网站。"
6
+ gov_heading: 官方网站使用“.gov”
7
+ how: 这里是了解途径
8
+ lock: 锁
9
+ locked_padlock: 上锁的挂锁
10
+ official_site: 美国政府的官方网站
11
+ secure_description_html: "<strong>锁形图标</strong> (%{lock_icon}) 或 <strong>“https://”</strong>表示您已安全连接到.gov网站。仅在安全的官方网站上分享敏感信息。"
12
+ secure_heading: 安全的.gov网站使用HTTPS
13
+ us_flag: 美国国旗
14
+ header:
15
+ primary: 主导航
16
+ skip_link: 跳转到主要内容
@@ -0,0 +1,65 @@
1
+ #
2
+ # This file configures the New Relic Agent. New Relic monitors Ruby, Java,
3
+ # .NET, PHP, Python, Node, and Go applications with deep visibility and low
4
+ # overhead. For more information, visit www.newrelic.com.
5
+ #
6
+ # Generated January 12, 2022
7
+ #
8
+ # This configuration file is custom generated for NewRelic Administration
9
+ #
10
+
11
+ common: &default_settings
12
+ # Required license key associated with your New Relic account.
13
+ license_key: <%= Rails.application.credentials.new_relic_key %>
14
+ # FEDRAMP-specific New Relic host
15
+ # https://docs.newrelic.com/docs/security/security-privacy/compliance/fedramp-compliant-endpoints/
16
+ host: 'gov-collector.newrelic.com'
17
+
18
+ # Your application name. Renaming here affects where data displays in New
19
+ # Relic. For more details, see https://docs.newrelic.com/docs/apm/new-relic-apm/maintenance/renaming-applications
20
+ app_name: <APPNAME>
21
+
22
+ monitor_mode: true
23
+
24
+ distributed_tracing:
25
+ enabled: true
26
+
27
+ browser_monitoring:
28
+ # include js code via partial to comply with CSP settings
29
+ auto_instrument: false
30
+
31
+ # This line disables agent regardless of other settings.
32
+ # To enable the New Relic agent:
33
+ # 1) Replace <APPNAME> in this file with the application name you want to show in New Relic
34
+ # 2) add the New Relic license keys to the appropriate encrypted credentials file(s)
35
+ # 3) Comment out the line below
36
+ agent_enabled: false
37
+
38
+ # Logging level for log/newrelic_agent.log
39
+ log_level: info
40
+
41
+
42
+ # Environment-specific settings are in this section.
43
+ # RAILS_ENV or RACK_ENV (as appropriate) is used to determine the environment.
44
+ # If your application has other named environments, configure them here.
45
+ development:
46
+ <<: *default_settings
47
+ app_name: <APPNAME> (Development)
48
+
49
+ test:
50
+ <<: *default_settings
51
+ # It doesn't make sense to report to New Relic from automated test runs.
52
+ monitor_mode: false
53
+
54
+ ci:
55
+ <<: *default_settings
56
+ # It doesn't make sense to report to New Relic from automated test runs.
57
+ monitor_mode: false
58
+
59
+ staging:
60
+ <<: *default_settings
61
+ app_name: <APPNAME> (Staging)
62
+
63
+ production:
64
+ <<: *default_settings
65
+ app_name: <APPNAME> (Production)
@@ -0,0 +1,21 @@
1
+ # 1. Record architecture decisions
2
+
3
+ Date: <%= Date.today.iso8601 %>
4
+
5
+ ## Status
6
+
7
+ Accepted
8
+
9
+ ## Context
10
+
11
+ We need to record decisions made on this project.
12
+
13
+ ## Decision
14
+
15
+ We will use Architecture Decision Records (ADR), as [described by Michael Nygard](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions).
16
+
17
+ We will use Nat Pryce's [adr-tools](https://github.com/npryce/adr-tools) to simplify the management of ADRs.
18
+
19
+ ## Consequences
20
+
21
+ Architectural decisions are available in a consistent format to simplify review for technical and security considerations.
@@ -0,0 +1,24 @@
1
+ # 2. Initial architecture decisions
2
+
3
+ Date: <%= Date.today.iso8601 %>
4
+
5
+ ## Status
6
+
7
+ Accepted
8
+
9
+ ## Context
10
+
11
+ We need to choose the initial language and framework for the <%= app_name %> application.
12
+
13
+ ## Decision
14
+
15
+ We will use:
16
+
17
+ * Language: Ruby
18
+ * Framework: Rails with unused frameworks disabled.
19
+ * Unit tests: RSpec
20
+ * Javascript bundler: webpack
21
+
22
+ ## Consequences
23
+
24
+ Ruby on Rails is a common development environment for the developers on this team, leading to faster development timelines.