Skip to content

Integration Tests

Integration Tests #996

name: Integration Tests
on:
workflow_dispatch:
inputs:
ref:
description: 'Branch or SHA to check out'
required: false
default: ''
repository:
description: 'Fork repository to check out'
required: false
default: ''
push:
branches:
- main
paths-ignore:
- '**/*.md'
- '**/*.jpg'
- '**/README.txt'
- '**/LICENSE.txt'
- 'docs/**'
- 'ISSUE_TEMPLATE/**'
- '**/remove-old-artifacts.yml'
pull_request_target:
branches:
- main
paths-ignore:
- '**/*.md'
- '**/*.jpg'
- '**/README.txt'
- '**/LICENSE.txt'
- 'docs/**'
- 'ISSUE_TEMPLATE/**'
- '**/remove-old-artifacts.yml'
permissions:
id-token: write # This is required for requesting the JWT
contents: read # This is required for actions/checkout
jobs:
approve:
if: >
github.event_name == 'push' ||
github.event_name == 'workflow_dispatch' ||
github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-latest
steps:
- run: echo "Approved — not a fork PR"
approve-fork:
if: >
github.event_name == 'pull_request_target' &&
github.event.pull_request.head.repo.full_name != github.repository
runs-on: ubuntu-latest
environment: integration-tests
steps:
- run: echo "Fork PR approved by maintainer"
lts-integration-tests:
name: Run LTS Integration Tests
needs: [approve, approve-fork]
if: |
always() &&
(needs.approve.result == 'success' || needs.approve-fork.result == 'success') &&
!(needs.approve.result == 'failure' || needs.approve-fork.result == 'failure')
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: [ "3.11", "3.12", "3.13" ]
environment: [ "mysql", "pg" ]
steps:
- name: 'Clone repository'
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
repository: ${{ inputs.repository || github.event.pull_request.head.repo.full_name || github.repository }}
ref: ${{ inputs.ref || github.event.pull_request.head.sha || github.sha }}
- name: 'Set up JDK 8'
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with:
distribution: 'corretto'
java-version: 8
- name: Install poetry
shell: bash
run: |
pipx install poetry==1.8.2
poetry config virtualenvs.prefer-active-python true
- name: Install dependencies
run: poetry install
- name: 'Configure AWS Credentials'
uses: aws-actions/configure-aws-credentials@d979d5b3a71173a29b74b5b88418bfda9437d885 # v6
with:
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_DEPLOY_ROLE }}
role-session-name: python_integration_tests
role-duration-seconds: 21600
aws-region: ${{ secrets.AWS_DEFAULT_REGION }}
- name: 'Run LTS Integration Tests'
run: |
./gradlew --no-parallel --no-daemon test-python-${{ matrix.python-version }}-${{ matrix.environment }} --info
env:
RDS_CLUSTER_DOMAIN: ${{ secrets.DB_CONN_SUFFIX }}
RDS_DB_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
AURORA_MYSQL_DB_ENGINE_VERSION: lts
AURORA_PG_ENGINE_VERSION: lts
- name: 'Archive LTS results'
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: pytest-integration-report-${{ matrix.python-version }}-${{ matrix.environment }}-lts
path: ./tests/integration/container/reports
retention-days: 5
latest-integration-tests:
name: Run Latest Integration Tests
runs-on: ubuntu-latest
needs: lts-integration-tests
if: |
always() &&
needs.lts-integration-tests.result == 'success'
strategy:
fail-fast: false
matrix:
python-version: [ "3.11", "3.12", "3.13" ]
environment: [ "mysql", "pg" ]
steps:
- name: 'Clone repository'
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
with:
repository: ${{ inputs.repository || github.event.pull_request.head.repo.full_name || github.repository }}
ref: ${{ inputs.ref || github.event.pull_request.head.sha || github.sha }}
- name: 'Set up JDK 8'
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with:
distribution: 'corretto'
java-version: 8
- name: Install poetry
shell: bash
run: |
pipx install poetry==1.8.2
poetry config virtualenvs.prefer-active-python true
- name: Install dependencies
run: poetry install
- name: 'Configure AWS Credentials'
uses: aws-actions/configure-aws-credentials@d979d5b3a71173a29b74b5b88418bfda9437d885 # v6
with:
role-to-assume: arn:aws:iam::${{ secrets.AWS_ACCOUNT_ID }}:role/${{ secrets.AWS_DEPLOY_ROLE }}
role-session-name: python_integration_tests
role-duration-seconds: 21600
aws-region: ${{ secrets.AWS_DEFAULT_REGION }}
- name: 'Run Latest Integration Tests'
run: |
./gradlew --no-parallel --no-daemon test-python-${{ matrix.python-version }}-${{ matrix.environment }} --info
env:
RDS_CLUSTER_DOMAIN: ${{ secrets.DB_CONN_SUFFIX }}
RDS_DB_REGION: ${{ secrets.AWS_DEFAULT_REGION }}
AURORA_MYSQL_DB_ENGINE_VERSION: latest
AURORA_PG_ENGINE_VERSION: latest
- name: 'Archive Latest results'
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: pytest-integration-report-${{ matrix.python-version }}-${{ matrix.environment }}-latest
path: ./tests/integration/container/reports
retention-days: 5