name: Historical data migration test on: merge_group: push: branches: - 'main' - 'stable-*' 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.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 10ms --health-timeout 3s --health-retries 50 ports: - 5432:5432 redis: image: redis:7-alpine options: >- --health-cmd "redis-cli ping" --health-interval 10ms --health-timeout 3s --health-retries 50 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: Test "one step migration" flow run: | bin/rails db:drop bin/rails db:create bin/rails tests:migrations:prepare_database bin/rails db:migrate bin/rails tests:migrations:check_database - name: Test "two step migration" flow run: | bin/rails db:drop bin/rails db:create SKIP_POST_DEPLOYMENT_MIGRATIONS=true bin/rails tests:migrations:prepare_database SKIP_POST_DEPLOYMENT_MIGRATIONS=true bin/rails db:migrate bin/rails db:migrate bin/rails tests:migrations:check_database