feat(tech): add database cleaner gem to prevent flakyness (#2370) #5026
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: CI | |
on: push | |
jobs: | |
linters: | |
name: Linters | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: .ruby-version | |
bundler-cache: true | |
- name: Cache js dependencies | |
uses: actions/cache@v4 | |
with: | |
key: node_modules-${{ hashFiles('yarn.lock') }} | |
path: node_modules | |
- name: Install JS dependencies | |
run: yarn install | |
- name: Run Rubocop | |
run: bundle exec rubocop | |
- name: Run ESLint | |
run: yarn lint | |
test_unit: | |
name: Unit Tests | |
runs-on: ubuntu-latest | |
services: | |
postgres: | |
image: postgres:13.2 | |
env: | |
POSTGRES_USER: rdv_insertion_test | |
POSTGRES_PASSWORD: rdv_insertion_test | |
POSTGRES_DB: rdv_insertion_test | |
options: >- | |
--mount type=tmpfs,destination=/var/lib/postgresql/data | |
--health-cmd pg_isready | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
ports: | |
- 5432:5432 | |
redis: | |
image: redis | |
ports: | |
- 6379:6379 | |
options: --entrypoint redis-server | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: .node-version | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: .ruby-version | |
bundler-cache: true | |
- name: Cache js dependencies | |
uses: actions/cache@v4 | |
with: | |
key: node_modules-${{ hashFiles('yarn.lock') }} | |
path: node_modules | |
- name: Install JS dependencies | |
run: yarn install | |
- name: Precompile assets | |
run: yarn run build | |
- name: List all unit spec files | |
run: | | |
mkdir -p tmp | |
ls spec/**/*.rb | grep -v spec/features > tmp/unit_spec_files.txt | |
- name: Cache parallel test unit spec runtime log | |
uses: actions/cache@v4 | |
with: | |
key: unit-spec-runtime-log-${{ hashFiles('tmp/unit_spec_files.txt') }} | |
path: tmp/parallel_runtime_rspec.log | |
- name: Setup test database and run specs | |
run: | | |
RAILS_ENV=test bundle exec rake parallel:drop parallel:create parallel:load_schema parallel:spec['spec/(?!features)'] | |
env: | |
HOST: http://example.com | |
POSTGRES_HOST: localhost | |
POSTGRES_PORT: 5432 | |
POSTGRES_USER: rdv_insertion_test | |
POSTGRES_PASSWORD: rdv_insertion_test | |
POSTGRES_DB: rdv_insertion_test | |
test_features: | |
name: Feature Tests | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
ci_node_total: [4] | |
ci_node_index: [0, 1, 2, 3] | |
services: | |
postgres: | |
image: postgres:13.2 | |
env: | |
POSTGRES_USER: rdv_insertion_test | |
POSTGRES_PASSWORD: rdv_insertion_test | |
POSTGRES_DB: rdv_insertion_test | |
options: >- | |
--mount type=tmpfs,destination=/var/lib/postgresql/data | |
--health-cmd pg_isready | |
--health-interval 10s | |
--health-timeout 5s | |
--health-retries 5 | |
ports: | |
- 5432:5432 | |
redis: | |
image: redis | |
ports: | |
- 6379:6379 | |
options: --entrypoint redis-server | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version-file: .node-version | |
- name: Set up Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
ruby-version: .ruby-version | |
bundler-cache: true | |
- name: Cache js dependencies | |
uses: actions/cache@v4 | |
with: | |
key: node_modules-${{ hashFiles('yarn.lock') }} | |
path: node_modules | |
- name: Install JS dependencies | |
run: yarn install | |
- name: Precompile assets | |
run: RAILS_ENV=test bundle exec rake assets:precompile | |
- name: List all feature spec files | |
run: | | |
mkdir -p tmp | |
find spec/features -name "*_spec.rb" > tmp/feature_spec_files.txt | |
echo "Total feature spec files found:" | |
wc -l tmp/feature_spec_files.txt | |
- name: Setup test database and run specs | |
run: | | |
echo "Spec files for this node:" | |
cat tmp/feature_spec_files.txt | sort | awk "NR % $CI_NODE_TOTAL == $CI_NODE_INDEX" | tee node_spec_files.txt | |
FILE_COUNT=$(cat node_spec_files.txt | wc -l) | |
echo "Running $FILE_COUNT spec files on CI node index $CI_NODE_INDEX" | |
if [ $FILE_COUNT -eq 0 ]; then | |
echo "No spec files to run on this node. This is likely an error in file distribution." | |
exit 1 | |
fi | |
RAILS_ENV=test bundle exec rspec $(cat node_spec_files.txt) | |
env: | |
HOST: http://example.com | |
POSTGRES_HOST: localhost | |
POSTGRES_PORT: 5432 | |
POSTGRES_USER: rdv_insertion_test | |
POSTGRES_PASSWORD: rdv_insertion_test | |
POSTGRES_DB: rdv_insertion_test | |
CI_NODE_TOTAL: ${{ matrix.ci_node_total }} | |
CI_NODE_INDEX: ${{ matrix.ci_node_index }} |