name: Run Tests on: workflow_call: pull_request: types: - opened - synchronize merge_group: workflow_dispatch: defaults: run: shell: bash jobs: test: name: Tests runs-on: ubuntu-latest services: postgres: image: postgres:13.18 env: POSTGRES_PASSWORD: password POSTGRES_USER: postgres POSTGRES_DB: data_collector ports: - 5432:5432 # Needed because the Postgres container does not provide a health check # tmpfs makes database faster by using RAM options: >- --mount type=tmpfs,destination=/var/lib/postgresql/data --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 env: RAILS_ENV: test GEMFILE_RUBY_VERSION: 3.1.1 DB_HOST: localhost DB_DATABASE: data_collector DB_USERNAME: postgres DB_PASSWORD: password RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }} PARALLEL_TEST_PROCESSORS: 4 steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: bundler-cache: true - name: Set up Node.js uses: actions/setup-node@v4 with: cache: yarn node-version: 20 - name: Create database run: | bundle exec rake parallel:setup - name: Compile assets run: | bundle exec rake assets:precompile - name: Run tests run: | bundle exec rake parallel:spec['spec\/(?!features|models|requests|services)'] feature_test: name: Feature Tests runs-on: ubuntu-latest services: postgres: image: postgres:13.18 env: POSTGRES_PASSWORD: password POSTGRES_USER: postgres POSTGRES_DB: data_collector ports: - 5432:5432 # Needed because the Postgres container does not provide a health check # tmpfs makes database faster by using RAM options: >- --mount type=tmpfs,destination=/var/lib/postgresql/data --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 env: RAILS_ENV: test GEMFILE_RUBY_VERSION: 3.1.1 DB_HOST: localhost DB_DATABASE: data_collector DB_USERNAME: postgres DB_PASSWORD: password RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }} steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: bundler-cache: true - name: Set up Node.js uses: actions/setup-node@v4 with: cache: yarn node-version: 20 - name: Create database run: | bundle exec rake db:prepare - name: Compile assets run: | bundle exec rake assets:precompile - name: Run tests run: | bundle exec rspec spec/features --fail-fast --exclude-pattern "spec/features/accessibility_spec.rb" model_test: name: Model tests runs-on: ubuntu-latest services: postgres: image: postgres:13.18 env: POSTGRES_PASSWORD: password POSTGRES_USER: postgres POSTGRES_DB: data_collector ports: - 5432:5432 # Needed because the Postgres container does not provide a health check # tmpfs makes database faster by using RAM options: >- --mount type=tmpfs,destination=/var/lib/postgresql/data --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 env: RAILS_ENV: test GEMFILE_RUBY_VERSION: 3.1.1 DB_HOST: localhost DB_DATABASE: data_collector DB_USERNAME: postgres DB_PASSWORD: password RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }} steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: bundler-cache: true - name: Set up Node.js uses: actions/setup-node@v4 with: cache: yarn node-version: 20 - name: Create database run: | bundle exec rake db:prepare - name: Compile assets run: | bundle exec rake assets:precompile - name: Run tests run: | bundle exec rspec spec/models --fail-fast requests_test: name: Requests tests runs-on: ubuntu-latest services: postgres: image: postgres:13.18 env: POSTGRES_PASSWORD: password POSTGRES_USER: postgres POSTGRES_DB: data_collector ports: - 5432:5432 # Needed because the Postgres container does not provide a health check # tmpfs makes database faster by using RAM options: >- --mount type=tmpfs,destination=/var/lib/postgresql/data --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 env: RAILS_ENV: test GEMFILE_RUBY_VERSION: 3.1.1 DB_HOST: localhost DB_DATABASE: data_collector DB_USERNAME: postgres DB_PASSWORD: password RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }} PARALLEL_TEST_PROCESSORS: 4 steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: bundler-cache: true - name: Set up Node.js uses: actions/setup-node@v4 with: cache: yarn node-version: 20 - name: Create database run: | bundle exec rake parallel:setup - name: Compile assets run: | bundle exec rake assets:precompile - name: Run tests run: | bundle exec rake parallel:spec['spec/requests'] services_test: name: Services Tests runs-on: ubuntu-latest services: postgres: image: postgres:13.18 env: POSTGRES_PASSWORD: password POSTGRES_USER: postgres POSTGRES_DB: data_collector ports: - 5432:5432 # Needed because the Postgres container does not provide a health check # tmpfs makes database faster by using RAM options: >- --mount type=tmpfs,destination=/var/lib/postgresql/data --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 env: RAILS_ENV: test GEMFILE_RUBY_VERSION: 3.1.1 DB_HOST: localhost DB_DATABASE: data_collector DB_USERNAME: postgres DB_PASSWORD: password RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }} PARALLEL_TEST_PROCESSORS: 4 steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: bundler-cache: true - name: Set up Node.js uses: actions/setup-node@v4 with: cache: yarn node-version: 20 - name: Create database run: | bundle exec rake parallel:setup - name: Compile assets run: | bundle exec rake assets:precompile - name: Run tests run: | bundle exec rake parallel:spec['spec\/services'] accessibility_test: name: Accessibility tests runs-on: ubuntu-latest services: postgres: image: postgres:13.18 env: POSTGRES_PASSWORD: password POSTGRES_USER: postgres POSTGRES_DB: data_collector ports: - 5432:5432 # Needed because the Postgres container does not provide a health check # tmpfs makes database faster by using RAM options: >- --mount type=tmpfs,destination=/var/lib/postgresql/data --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 env: RAILS_ENV: test GEMFILE_RUBY_VERSION: 3.1.1 DB_HOST: localhost DB_DATABASE: data_collector DB_USERNAME: postgres DB_PASSWORD: password RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }} PARALLEL_TEST_PROCESSORS: 4 steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: bundler-cache: true - name: Set up Node.js uses: actions/setup-node@v4 with: cache: yarn node-version: 20 - name: Create database run: | bundle exec rake parallel:setup - name: Compile assets run: | bundle exec rake assets:precompile - name: Run tests run: | bundle exec rspec spec/features/accessibility_spec.rb --fail-fast lint: name: Lint runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: bundler-cache: true - name: Set up Node.js uses: actions/setup-node@v4 with: cache: yarn node-version: 20 - name: Install packages and symlink local dependencies run: | yarn install --immutable --immutable-cache --check-cache - name: Lint run: | bundle exec rake lint audit: name: Audit dependencies runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Ruby uses: ruby/setup-ruby@v1 with: bundler-cache: true - name: Audit run: | bundle exec bundler-audit