Release 148 #21957
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Rails Tests | |
on: | |
# NOTE: runs on both PRs and pulls. This would normally cause redundant jobs to run but there are conditions on github.event_name in the matrix to avoid this. In particular, we want the system tests to run only on PR so we can use the base_ref to infer the appropriate release branch name in the hmis FE repo (see issue #6566) | |
push: | |
branches: | |
- '*' | |
- '**/*' | |
pull_request: | |
branches: | |
- '*' | |
- '**/*' | |
concurrency: | |
group: ${{ github.ref }}-tests | |
cancel-in-progress: true | |
jobs: | |
determine_matrix: | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- id: set-matrix | |
run: | | |
if [ "${{ github.event_name }}" == "pull_request" ]; then | |
echo 'matrix={"test_group":[{"id":"system_tests","system_tests":"true"}]}' >> $GITHUB_OUTPUT | |
else | |
echo 'matrix={"test_group":[{"id":"ci_bucket_1","tag":"ci_bucket:bucket-1"},{"id":"ci_bucket_2","tag":"ci_bucket:bucket-2"},{"id":"ci_bucket_3","tag":"ci_bucket:bucket-3"},{"id":"ci_bucket_4","tag":"ci_bucket:bucket-4"},{"id":"ci_bucket_default","tag":"~ci_bucket","logging_tests":true,"okta_tests":true}]}' >> $GITHUB_OUTPUT | |
fi | |
# Label of the container job | |
tests: | |
needs: determine_matrix | |
strategy: | |
fail-fast: false | |
matrix: ${{fromJson(needs.determine_matrix.outputs.matrix)}} | |
# Containers must run in Linux based operating systems | |
runs-on: ubuntu-20.04 | |
# Docker Hub image that the job executes in | |
# $RUBY_VERSION | |
container: ruby:3.1.6-alpine3.20 | |
# Service containers to run with job | |
services: | |
postgres: | |
image: postgis/postgis:16-3.4-alpine | |
env: | |
POSTGRES_PASSWORD: postgres | |
POSTGRES_USER: postgres | |
POSTGRES_PASS: postgres | |
POSTGRES_MULTIPLE_EXTENSIONS: postgis,hstore | |
# Set health checks to wait until postgres has started | |
options: >- | |
--health-cmd pg_isready | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
ports: | |
- 5432:5432 | |
redis: | |
image: redis:alpine | |
ports: | |
- 6379:6379 | |
hmis-warehouse-sftp: | |
image: ghcr.io/greenriver/openpath-sftp:1.0 | |
credentials: | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
ports: | |
- '2222:22' | |
minio: | |
image: ghcr.io/greenriver/openpath-minio:1.0 | |
credentials: | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
env: | |
MINIO_ACCESS_KEY: local_access_key | |
MINIO_SECRET_KEY: local_secret_key | |
ports: | |
- '9000:9000' | |
chrome: | |
image: browserless/chrome:1-chrome-stable | |
ports: | |
- 3333:3333 | |
env: | |
TZ: "America/New_York" | |
PORT: 3333 | |
CONNECTION_TIMEOUT: 600000 | |
env: | |
CLIENT: test | |
DATABASE_ADAPTER: postgresql | |
DATABASE_APP_DB_TEST: warehouse_app_test | |
DATABASE_DB_TEST: warehouse_test | |
DATABASE_APP_DB: warehouse_app_test | |
DATABASE_HOST: postgres | |
DATABASE_PASS: postgres | |
DATABASE_USER: postgres | |
DATABASE_WAREHOUSE_DB_TEST: warehouse_test | |
DEFAULT_FROM: greenriver.testing@mailinator.com | |
DISABLE_SPRING: 1 | |
ENCRYPTION_KEY: strongEncryptionstrongEncryptionstrongEncryption | |
FQDN: openpath.host | |
HEALTH_DATABASE_ADAPTER: postgresql | |
HEALTH_DATABASE_DB_TEST: health_test | |
HEALTH_DATABASE_HOST: postgres | |
HEALTH_DATABASE_PASS: postgres | |
HEALTH_DATABASE_USER: postgres | |
HEALTH_FROM: greenriver.testing@mailinator.com | |
HOSTNAME: openpath.host | |
MINIO_ENDPOINT: http://minio:9000 | |
USE_MINIO_ENDPOINT: true | |
PORT: 80 | |
RAILS_ENV: test | |
REPORTING_DATABASE_ADAPTER: postgresql | |
REPORTING_DATABASE_DB_TEST: reporting_test | |
REPORTING_DATABASE_HOST: postgres | |
REPORTING_DATABASE_PASS: postgres | |
REPORTING_DATABASE_USER: postgres | |
WAREHOUSE_DATABASE_ADAPTER: postgis | |
WAREHOUSE_DATABASE_DB_TEST: warehouse_test | |
WAREHOUSE_DATABASE_HOST: postgres | |
WAREHOUSE_DATABASE_PASS: postgres | |
WAREHOUSE_DATABASE_USER: postgres | |
WAREHOUSE_DATABASE_DB: warehouse_test | |
HEALTH_DATABASE_DB: health_test | |
REPORTING_DATABASE_DB: reporting_test | |
# Tell Puppeteer to skip installing Chrome. We'll be using the installed package. | |
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD: true | |
PUPPETEER_EXECUTABLE_PATH: /usr/bin/chromium-browser | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: 'Container Setup' | |
id: container-setup | |
uses: ./.github/workflows/container_setup | |
- name: 'App setup' | |
run: | | |
cp config/secrets.yml.sample config/secrets.yml | |
mkdir app/assets/stylesheets/theme/styles | |
touch app/assets/stylesheets/theme/styles/_variables.scss | |
cp .rspec.sample .rspec | |
cp config/database.yml.ci config/database.yml | |
- name: Prepare test db | |
run: | | |
pg_isready -h postgres -U postgres | |
bin/db_prep | |
echo "Setting up .pgpass" | |
echo "postgres:*:*:postgres:postgres" > ~/.pgpass | |
chmod 600 ~/.pgpass | |
- name: Precompile assets | |
run: bundle exec rails assets:precompile | |
# fetch some closed source files | |
- name: 'Fetch testkit source files' | |
uses: keithweaver/aws-s3-github-action@v1.0.0 | |
with: | |
command: cp | |
source: ${{ secrets.AWS_S3_ACTION_BUCKET }}${{ vars.AWS_S3_ACTIONS_SOURCE_PATH_FY_2024 }} | |
destination: ./drivers/datalab_testkit/spec/fixtures/inputs/ | |
aws_access_key_id: ${{ secrets.AWS_S3_ACCESS_KEY_ID }} | |
aws_secret_access_key: ${{ secrets.AWS_S3_SECRET_ACCESS_KEY }} | |
aws_region: us-east-1 | |
flags: --recursive | |
# fetch pre-processed FY2024 data set; note that we need to update this whenever the test kit source | |
# data changes. To update: | |
# 1. Remove the fixtures from `drivers/datalab_testkit/spec/fixpoints/` | |
# 2. Replace the source and result files in `drivers/datalab_testkit/spec/fixtures` and on S3 | |
# 3. Re-run the tests rspec drivers/hud_apr/spec/models/fy2024/datalab_2_0_spec.rb | |
# 4. Update the fixpoint in S3 from the newly generated file | |
- name: 'Fetch testkit fixpoint files' | |
uses: keithweaver/aws-s3-github-action@v1.0.0 | |
with: | |
command: cp | |
source: ${{ secrets.AWS_S3_ACTION_BUCKET }}${{ vars.AWS_S3_ACTIONS_FIXPOINT_PATH_FY_2024 }} | |
destination: ./drivers/datalab_testkit/spec/fixpoints/ | |
aws_access_key_id: ${{ secrets.AWS_S3_ACCESS_KEY_ID }} | |
aws_secret_access_key: ${{ secrets.AWS_S3_SECRET_ACCESS_KEY }} | |
aws_region: us-east-1 | |
flags: --recursive | |
- name: 'Fetch result files' | |
uses: keithweaver/aws-s3-github-action@v1.0.0 | |
with: | |
command: cp | |
source: ${{ secrets.AWS_S3_ACTION_BUCKET }}${{ vars.AWS_S3_ACTIONS_RESULTS_PATH_FY_2024 }} | |
destination: ./drivers/datalab_testkit/spec/fixtures/results/ | |
aws_access_key_id: ${{ secrets.AWS_S3_ACCESS_KEY_ID }} | |
aws_secret_access_key: ${{ secrets.AWS_S3_SECRET_ACCESS_KEY }} | |
aws_region: us-east-1 | |
flags: --recursive | |
- name: 'Fetch 2022 -> 2024 source files' | |
uses: keithweaver/aws-s3-github-action@v1.0.0 | |
with: | |
command: cp | |
source: ${{ secrets.AWS_S3_ACTION_BUCKET }}${{ vars.AWS_S3_ACTIONS_SOURCE_PATH_FY_2024 }}/merged/source | |
destination: ./drivers/hud_twenty_twenty_two_to_twenty_twenty_four/spec/fixtures/in/ | |
aws_access_key_id: ${{ secrets.AWS_S3_ACCESS_KEY_ID }} | |
aws_secret_access_key: ${{ secrets.AWS_S3_SECRET_ACCESS_KEY }} | |
aws_region: us-east-1 | |
flags: --recursive | |
# Regenerate the graphql schema and fail if it has changed | |
- name: 'Check HMIS GraphQL schema' | |
if: matrix.test_group.system_tests | |
run: | | |
bundle exec rake driver:hmis:dump_graphql_schema | |
- name: Run tests | |
if: matrix.test_group.tag | |
env: | |
AWS_ACCESS_KEY_ID: local_access_key | |
AWS_SECRET_ACCESS_KEY: local_secret_key | |
GROVER_NO_SANDBOX: true | |
CHROMIUM_PATH: /usr/bin/chromium-browser | |
MAX_FAILURES: 60 | |
LOG_LEVEL: INFO | |
run: | | |
bundle exec rails ci:update_spec_tags[.github/rspec_buckets.json] | |
# capture rspec profiling information | |
# mkdir -p tmp/rspec_profiles | |
# bundle exec rspec --format json --out "tmp/rspec_profiles/rspec_results.json" --profile 100000 --fail-fast=$MAX_FAILURES --color --pattern "spec/**/*_spec.rb,drivers/*/spec/**/*_spec.rb" --tag ${{ matrix.test_group.tag }} --tag ~type:system | |
bundle exec rspec --fail-fast=$MAX_FAILURES --color --pattern "spec/**/*_spec.rb,drivers/*/spec/**/*_spec.rb" --tag ${{ matrix.test_group.tag }} --tag ~type:system | |
- name: Run okta tests | |
if: matrix.test_group.okta_tests | |
env: | |
AWS_ACCESS_KEY_ID: local_access_key | |
AWS_SECRET_ACCESS_KEY: local_secret_key | |
GROVER_NO_SANDBOX: true | |
CHROMIUM_PATH: /usr/bin/chromium-browser | |
MAX_FAILURES: 60 | |
LOG_LEVEL: INFO | |
run: | | |
OKTA_DOMAIN=localhost OKTA_CLIENT_ID=x OKTA_CLIENT_SECRET=x bundle exec rspec --fail-fast=$MAX_FAILURES --color -fd spec/requests/omniauth_spec.rb spec/requests/sessions_controller_spec.rb # these tests need okta enabled | |
- name: Run logging tests | |
if: matrix.test_group.logging_tests | |
env: | |
AWS_ACCESS_KEY_ID: local_access_key | |
AWS_SECRET_ACCESS_KEY: local_secret_key | |
LOG_LEVEL: INFO | |
run: | | |
TEST_DEVELOPMENT_LOGGING_CONFIG=true RAILS_LOG_TO_STDOUT=true LOGRAGE=true bundle exec rspec --color --format p spec/models/logging_spec.rb | |
TEST_DEVELOPMENT_LOGGING_CONFIG=true RAILS_LOG_TO_STDOUT=true LOGRAGE=false bundle exec rspec --color --format p spec/models/logging_spec.rb | |
TEST_DEVELOPMENT_LOGGING_CONFIG=true RAILS_LOG_TO_STDOUT=false LOGRAGE=true bundle exec rspec --color --format p spec/models/logging_spec.rb | |
TEST_DEVELOPMENT_LOGGING_CONFIG=true RAILS_LOG_TO_STDOUT=false LOGRAGE=false bundle exec rspec --color --format p spec/models/logging_spec.rb | |
TEST_STAGING_LOGGING_CONFIG=true bundle exec rspec --color --format p spec/models/logging_spec.rb | |
- name: Build front end and run tests | |
if: matrix.test_group.system_tests | |
env: | |
AWS_ACCESS_KEY_ID: local_access_key | |
AWS_SECRET_ACCESS_KEY: local_secret_key | |
MAX_FAILURES: 60 | |
LOG_LEVEL: INFO | |
RUN_SYSTEM_TESTS: true | |
BRANCH_NAME: "${{ github.head_ref || github.ref_name }}:${{ github.base_ref || 'stable' }}:stable" | |
CHROME_URL: http://chrome:3333 | |
run: | |
bash ./bin/run_hmis_system_tests.sh | |
- name: Archive artifacts | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
if-no-files-found: ignore | |
name: artifacts-${{ matrix.test_group.id}} | |
path: | | |
tmp/rspec_profiles/ | |
tmp/capybara/screenshots/ | |
var/deprecations/*.yml |