name: Test two step migrations on: push: branches-ignore: - 'dependabot/**' - 'renovate/**' pull_request: jobs: pre_job: runs-on: ubuntu-latest outputs: should_skip: ${{ steps.skip_check.outputs.should_skip }} steps: - id: skip_check uses: fkirc/skip-duplicate-actions@v5 with: paths: '["Gemfile*", ".ruby-version", "**/*.rb", ".github/workflows/test-migrations-two-step.yml", "lib/tasks/tests.rake"]' test: runs-on: ubuntu-latest needs: pre_job if: needs.pre_job.outputs.should_skip != 'true' strategy: fail-fast: false matrix: postgres: - 14-alpine - 15-alpine services: postgres: image: postgres:${{ matrix.postgres}} env: POSTGRES_PASSWORD: postgres POSTGRES_USER: postgres options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 5432:5432 redis: image: redis:7-alpine options: >- --health-cmd "redis-cli ping" --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 6379:6379 env: DB_HOST: localhost DB_USER: postgres DB_PASS: postgres DISABLE_SIMPLECOV: true RAILS_ENV: test BUNDLE_CLEAN: true BUNDLE_FROZEN: true BUNDLE_WITHOUT: 'development production' BUNDLE_JOBS: 3 BUNDLE_RETRY: 3 steps: - uses: actions/checkout@v4 - name: Set up Ruby environment uses: ./.github/actions/setup-ruby - name: Create database run: './bin/rails db:create' - name: Run historical migrations with data population run: './bin/rails tests:migrations:prepare_database' env: SKIP_POST_DEPLOYMENT_MIGRATIONS: true - name: Run all remaining pre-deployment migrations run: './bin/rails db:migrate' env: SKIP_POST_DEPLOYMENT_MIGRATIONS: true - name: Run all post-deployment migrations run: './bin/rails db:migrate' - name: Check migration result run: './bin/rails tests:migrations:check_database'