cloudfoundry/cloud_controller_ng

View on GitHub
.github/workflows/unit_tests_backwards_compatibility.yml

Summary

Maintainability
Test Coverage
name: Backwards Compatibility Unit Tests
concurrency:
  group: '${{ github.workflow }}-${{ github.new_cc_ref || github.run_id }}'
  cancel-in-progress: true
on:
  workflow_dispatch:
    description: "This action tests backwards compatibility when db migrations are introduced. It tests database schema at new code(old_cc_ref) with unittests running old code(new_cc_ref) "
    inputs:
      old_cc_ref:
        description: 'Old Version of CC_NG that the backwards compatibility should be checked against'
        required: true
      new_cc_ref:
        description: 'New Version of CC_NG that needs testing for backwards incompatible changes'
        required: true
      new_cc_repo:
        description: 'New REPO of CC_NG that needs testing for backwards incompatible changes'
        required: false
        default: 'cloudfoundry/cloud_controller_ng'
  pull_request:
    branches: [ main ]
    paths:
      - 'db/migrations/**'
      - '.github/workflows/unit_tests_backwards_compatibility.yml'

permissions:
  contents: read # to fetch code (actions/checkout)

jobs:
  Test-Postgres-Backwards-Compatibillity:
    runs-on: ubuntu-latest
    timeout-minutes: 30
    strategy:
      fail-fast: false
      max-parallel: 3
      matrix:
        image: ["postgres:10", "postgres:11", "postgres:16"]
    services:
      postgres:
        image: ${{ matrix.image }}
        env:
          POSTGRES_PASSWORD: rootpassword
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5
        ports:
          - 5432:5432
    steps:
      - uses: hmarr/debug-action@v3
      - name: Checkout code to run the db migration with
        uses: actions/checkout@v4
        with:
          ref: ${{ (
              github.event_name == 'workflow_dispatch'
              && github.event.inputs.new_cc_ref
              || github.event.pull_request.head.ref
            )}}
          repository: ${{ (
            github.event_name == 'workflow_dispatch'
            && github.event.inputs.new_cc_repo
            || github.event.pull_request.head.repo.full_name
            )}}
      - name: Setup Environment
        uses: ./.github/workflows/composite/setup
      - name: Migrate Database
        run: DB=postgres POSTGRES_CONNECTION_PREFIX="postgres://postgres:rootpassword@localhost:5432" bundle exec rake db:parallel:recreate db:parallel:migrate
      - name: Checkout code to run the unit tests with
        uses: actions/checkout@v4
        with:
          ref: ${{ (
              github.event_name == 'workflow_dispatch'
              && github.event.inputs.old_cc_ref
              || github.event.pull_request.base.sha
            )}}
      - name: Setup Environment
        uses: ./.github/workflows/composite/setup
      - name: Run Tests
        run: DB=postgres POSTGRES_CONNECTION_PREFIX="postgres://postgres:rootpassword@localhost:5432" bundle exec rake spec:without_migrate

  Test-Mysql-Backwards-Compatibillity:
    runs-on: ubuntu-latest
    timeout-minutes: 30
    strategy:
      fail-fast: false
      max-parallel: 3
      matrix:
        image: ["mysql:5.7", "mysql:8.0", "mysql:8.2"]
    services:
      mysql:
        image: ${{ matrix.image }}
        env:
          MYSQL_DATABASE: cc_test
          MYSQL_ROOT_PASSWORD: password
        options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3
        ports:
          - 3306:3306
    steps:
      - uses: hmarr/debug-action@v3
      - name: Checkout code to run the db migration with
        uses: actions/checkout@v4
        with:
          ref: ${{ (
            github.event_name == 'workflow_dispatch'
            && github.event.inputs.new_cc_ref
            || github.event.pull_request.head.ref
            )}}
          repository: ${{ (
            github.event_name == 'workflow_dispatch'
            && github.event.inputs.new_cc_repo
            || github.event.pull_request.head.repo.full_name
            )}}
      - name: Setup Environment
        uses: ./.github/workflows/composite/setup
      - name: Migrate Database
        run: DB=mysql MYSQL_CONNECTION_PREFIX="mysql2://root:password@127.0.0.1:3306" bundle exec rake db:parallel:recreate db:parallel:migrate
      - name: Checkout code to run the unit tests with
        uses: actions/checkout@v4
        with:
          ref: ${{ (
            github.event_name == 'workflow_dispatch'
            && github.event.inputs.old_cc_ref
            || github.event.pull_request.base.sha
            )}}
      - name: Setup Environment
        uses: ./.github/workflows/composite/setup
      - name: Run tests
        run: DB=mysql MYSQL_CONNECTION_PREFIX="mysql2://root:password@127.0.0.1:3306" bundle exec rake spec:without_migrate