The USPS web store was successfully launched on January 18, 2022.
This back-up solution is no longer being actively developed nor used in production. It is targeted to be archived at the end of February 2022.
A web-based, mobile-responsive solution for the public to submit a pre-order request for 1 set of four COVID-19 tests to be sent directly to their home through the USPS infrastructure. This solution is intended to be a back-up for the USPS web store, if it cannot stand peak traffic.
The launch date for this solution is January 17, 2022.
For more detail, see the product scope doc
If you're new to Rails, see the Getting Started with Rails guide for an introduction to the framework.
brew install postgresql
echo 'export PATH="/usr/local/opt/postgresql/bin:$PATH"' >> ~/.zshrc
brew services start postgresql
bundle install
brew install --cask chromedriver
xattr -d com.apple.quarantine $(which chromedriver)
(this is the only option if you are on Big Sur)yarn install
yarn build && yarn build:css
bundle exec rake db:create
bundle exec rake db:migrate
./bin/dev
For performance, we cache the root page using the Cache-Control
header. By default, the form should be cached for:
env | max cache age |
---|---|
dev/test/ci | 10 seconds |
stage-small | 1 minute |
stage | 10 minutes |
prod | 1 hour |
Environment variables can be set in development using the dotenv gem.
Consistent but sensitive credentials should be added to config/credentials.yml.env
by using $ rails credentials:edit
Any changes to variables in .env
that should not be checked into git should be set
in .env.local
.
If you wish to override a config globally for the test
Rails environment you can set it in .env.test.local
.
However, any config that should be set on other machines should either go into .env
or be explicitly set as part
of the test.
This application does not contain an authentication component. All interaction is public/guest
<script>
and <style>
securityThe system's Content-Security-Policy header prevents <script>
and <style>
tags from working without further
configuration. Use <%= javascript_tag nonce: true %>
for inline javascript.
See the CSP compliant script tag helpers ADR for more information on setting these up successfully.
We use the gem i18n-tasks
to manage translation files. Here are a few common tasks:
Add missing keys across locales:
$ i18n-tasks add-missing
Key sorting:
$ i18n-tasks normalize
Removing unused keys:
$ i18n-tasks unused
$ i18n-tasks remove-unused
For more information on usage and helpful rake tasks to manage translation files, see the documentation.
bundle exec rake spec
bundle exec rake standard
./bin/pa11y-scan
./bin/owasp-scan
bundle exec rake brakeman
bundle exec rake bundler:audit
bundle exec rake yarn:audit
Run everything: bundle exec rake
CircleCI is in use as our CI/CD pipeline. All scans run on each PR, and security scans are also run on a daily basis.
Each environment has dependencies on a PostgreSQL RDS instance managed by cloud.gov. See cloud.gov docs for information on RDS.
Last updated Jan 17 at 2:30p EST
Our application is deployed across four foundries, all different than the usual cloud.gov
. They have been stood up for this application, anticipating high load.
Each foundry has:
gsa-tts-test-kits
staging
and prod
In each foundatation's prod
space, there are two deployed application configurations: one with Smarty Streets API enabled and one with it disabled. We are launching with Smarty Streets enabled, and plan to route traffic to the applications where it is disabled in case of a Smarty service problem.
Foundry 1: CF_FOUNDRY_API: api.fr.wb.cloud.gov
Foundry 2 CF_FOUNDRY_API: api.fr.wc.cloud.gov
Foundry 3 CF_FOUNDRY_API: api.fr.ea.cloud.gov
Foundry 4 CF_FOUNDRY_API: api.fr.eb.cloud.gov
Questions? Ask in #tts-covidtest-devops for platform, and #tts-covidtest-rails for application development and config.
First time only: create DB service with cf create-service aws-rds micro-psql test_at_home-rds-stage
cf push --strategy rolling --vars-file config/deployment/stage.yml --var rails_master_key=$(cat config/master.key)
First time only: create DB service with cf create-service aws-rds <<SERVICE_PLAN_NAME>> test_at_home-rds-prod
cf push --strategy rolling --vars-file config/deployment/prod.yml --var prod_rails_master_key=$(cat config/credentials/production.key)
All configuration that needs to be added to the deployed application's ENV should be added to
the env:
block in manifest.yml
Items that are both public and consistent across staging and production can be set directly there.
Otherwise, they are set as a ((variable))
within manifest.yml
and the variable is defined depending on sensitivity:
env:
block of the deploy action as in this example--var
addition to the push_arguments
line on the deploy action as in this exampleConfiguration that changes from staging to production, but is public, should be added to config/deployment/stage.yml
and config/deployment/prod.yml
Architectural Decision Records (ADR) are stored in doc/adr
To create a new ADR, first install ADR-tools if you don't
already have it installed.
brew install adr-tools
Then create the ADR:
adr new Title Of Architectural Decision
This will create a new, numbered ADR in the doc/adr
directory.
This will continue to evolve as the project moves forward.
TBD