Quick and dirty CI update #113
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: test | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
on: | |
pull_request: { types: [opened, reopened, synchronize, ready_for_review] } | |
push: { branches: [ main ] } | |
env: | |
LOG_LEVEL: info | |
SWIFT_DETERMINISTIC_HASHING: 1 | |
MYSQL_HOSTNAME: 'mysql-a' | |
MYSQL_HOSTNAME_A: 'mysql-a' | |
MYSQL_HOSTNAME_B: 'mysql-b' | |
MYSQL_DATABASE: 'test_database' | |
MYSQL_DATABASE_A: 'test_database' | |
MYSQL_DATABASE_B: 'test_database' | |
MYSQL_USERNAME: 'test_username' | |
MYSQL_USERNAME_A: 'test_username' | |
MYSQL_USERNAME_B: 'test_username' | |
MYSQL_PASSWORD: 'test_password' | |
MYSQL_PASSWORD_A: 'test_password' | |
MYSQL_PASSWORD_B: 'test_password' | |
jobs: | |
api-breakage: | |
if: ${{ !(github.event.pull_request.draft || false) }} | |
runs-on: ubuntu-latest | |
container: swift:5.9-jammy | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v4 | |
with: { 'fetch-depth': 0 } | |
- name: Run API breakage check action | |
uses: vapor/ci/.github/actions/ci-swift-check-api-breakage@reusable-workflows | |
dependents: | |
if: ${{ !(github.event.pull_request.draft || false) }} | |
runs-on: ubuntu-latest | |
services: | |
mysql-a: | |
image: ${{ matrix.dbimage }} | |
env: | |
MYSQL_ALLOW_EMPTY_PASSWORD: "true" | |
MYSQL_USER: test_username | |
MYSQL_PASSWORD: test_password | |
MYSQL_DATABASE: test_database | |
mysql-b: | |
image: ${{ matrix.dbimage }} | |
env: | |
MYSQL_ALLOW_EMPTY_PASSWORD: "true" | |
MYSQL_USER: test_username | |
MYSQL_PASSWORD: test_password | |
MYSQL_DATABASE: test_database | |
container: swift:5.9-jammy | |
strategy: | |
fail-fast: false | |
matrix: | |
dbimage: | |
- mysql:5.7 | |
- mysql:8.1 | |
- mariadb:11 | |
- percona:8.0 | |
steps: | |
- name: Check out package | |
uses: actions/checkout@v4 | |
with: { path: 'mysql-kit' } | |
- name: Check out dependent | |
uses: actions/checkout@v4 | |
with: | |
repository: vapor/fluent-mysql-driver | |
path: fluent-mysql-driver | |
- name: Use local package | |
run: swift package --package-path fluent-mysql-driver edit mysql-kit --path ./mysql-kit | |
- name: Run tests with Thread Sanitizer | |
run: swift test --package-path fluent-mysql-driver --sanitize=thread | |
# Run unit tests (Linux), do code coverage in same job to cut down on extra builds | |
linux-unit: | |
if: ${{ !(github.event.pull_request.draft || false) }} | |
strategy: | |
fail-fast: false | |
matrix: | |
dbimage: | |
- mysql:5.7 | |
- mysql:8.0 | |
- mysql:8.1 | |
- mariadb:10.4 | |
- mariadb:11 | |
- percona:8.0 | |
runner: | |
# List is deliberately incomplete; we want to avoid running 50 jobs on every commit | |
- swift:5.7-focal | |
- swift:5.9-jammy | |
- swiftlang/swift:nightly-5.10-jammy | |
container: ${{ matrix.runner }} | |
runs-on: ubuntu-latest | |
services: | |
mysql-a: | |
image: ${{ matrix.dbimage }} | |
env: | |
MYSQL_ALLOW_EMPTY_PASSWORD: "true" | |
MYSQL_USER: test_username | |
MYSQL_PASSWORD: test_password | |
MYSQL_DATABASE: test_database | |
steps: | |
- name: Save MySQL version to env | |
run: | | |
echo MYSQL_VERSION='${{ matrix.dbimage }}' >> $GITHUB_ENV | |
- name: Display versions | |
shell: bash | |
run: | | |
if [[ '${{ contains(matrix.container, 'nightly') }}' == 'true' ]]; then | |
SWIFT_PLATFORM="$(source /etc/os-release && echo "${ID}${VERSION_ID}")" SWIFT_VERSION="$(cat /.swift_tag)" | |
printf 'SWIFT_PLATFORM=%s\nSWIFT_VERSION=%s\n' "${SWIFT_PLATFORM}" "${SWIFT_VERSION}" >>"${GITHUB_ENV}" | |
fi | |
printf 'OS: %s\nTag: %s\nVersion:\n' "${SWIFT_PLATFORM}-${RUNNER_ARCH}" "${SWIFT_VERSION}" && swift --version | |
- name: Check out package | |
uses: actions/checkout@v4 | |
- name: Run local tests with coverage and TSan | |
run: swift test --enable-code-coverage --sanitize=thread | |
- name: Submit coverage report to Codecov.io | |
uses: vapor/swift-codecov-action@v0.2 | |
# Run unit tests (macOS). Don't bother with lots of variations, Linux will cover that. | |
macos-unit: | |
if: ${{ !(github.event.pull_request.draft || false) }} | |
strategy: | |
fail-fast: false | |
matrix: | |
formula: [ 'mysql@8.0' ] | |
macos: [ 'macos-13' ] | |
xcode: [ 'latest-stable' ] | |
runs-on: ${{ matrix.macos }} | |
steps: | |
- name: Select latest available Xcode | |
uses: maxim-lobanov/setup-xcode@v1 | |
with: | |
xcode-version: ${{ matrix.xcode }} | |
- name: Install MySQL server from Homebrew | |
run: brew install ${{ matrix.formula }} && brew link --force ${{ matrix.formula }} | |
- name: Start MySQL server | |
run: brew services start ${{ matrix.formula }} | |
- name: Wait for MySQL server to be ready | |
run: until echo | mysql -uroot; do sleep 1; done | |
timeout-minutes: 5 | |
- name: Set up MySQL databases and privileges | |
run: | | |
mysql -uroot --batch <<-'SQL' | |
CREATE USER test_username@localhost IDENTIFIED BY 'test_password'; | |
CREATE DATABASE test_database; | |
GRANT ALL PRIVILEGES ON test_database.* TO test_username@localhost; | |
SQL | |
- name: Check out code | |
uses: actions/checkout@v4 | |
- name: Run tests with Thread Sanitizer | |
run: swift test --sanitize=thread | |
env: { MYSQL_HOSTNAME: '127.0.0.1' } |