Skip to content

Upgrade CI

Upgrade CI #906

Workflow file for this run

name: CI
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
on:
push:
branches:
- "main"
pull_request:
branches:
- "*"
env:
LOG_LEVEL: info
jobs:
linux-unit:
strategy:
fail-fast: false
matrix:
swift-image:
- swift:5.6-focal
- swift:5.7-jammy
- swift:5.8-jammy
- swiftlang/swift:nightly-5.9-jammy
- swiftlang/swift:nightly-main-jammy
container: ${{ matrix.swift-image }}
runs-on: ubuntu-latest
steps:
- name: Display OS and Swift versions
shell: bash
run: |
[[ -z "${SWIFT_PLATFORM}" ]] && SWIFT_PLATFORM="$(. /etc/os-release && echo "${ID}${VERSION_ID}")"
[[ -z "${SWIFT_VERSION}" ]] && SWIFT_VERSION="$(cat /.swift_tag 2>/dev/null || true)"
printf 'OS: %s\nTag: %s\nVersion:\n' "${SWIFT_PLATFORM}-${RUNNER_ARCH}" "${SWIFT_VERSION}"
swift --version
- name: Check out package
uses: actions/checkout@v3
- name: Run unit tests with Thread Sanitizer
run: swift test --filter=^PostgresNIOTests --sanitize=thread
linux-integration-and-dependencies:
if: github.event_name == 'pull_request'
strategy:
fail-fast: false
matrix:
postgres-image:
- postgres:15
- postgres:13
- postgres:11
include:
- postgres-image: postgres:15
postgres-auth: scram-sha-256
- postgres-image: postgres:13
postgres-auth: md5
- postgres-image: postgres:11
postgres-auth: trust
container:
image: swift:5.8-jammy
volumes: [ 'pgrunshare:/var/run/postgresql' ]
runs-on: ubuntu-latest
env:
# Unfortunately, fluent-postgres-driver details leak through here
POSTGRES_DB: 'test_database'
POSTGRES_DB_A: 'test_database'
POSTGRES_DB_B: 'test_database'
POSTGRES_USER: 'test_username'
POSTGRES_USER_A: 'test_username'
POSTGRES_USER_B: 'test_username'
POSTGRES_PASSWORD: 'test_password'
POSTGRES_PASSWORD_A: 'test_password'
POSTGRES_PASSWORD_B: 'test_password'
POSTGRES_HOSTNAME: 'psql-a'
POSTGRES_HOSTNAME_A: 'psql-a'
POSTGRES_HOSTNAME_B: 'psql-b'
POSTGRES_SOCKET: '/var/run/postgresql/.s.PGSQL.5432'
POSTGRES_HOST_AUTH_METHOD: ${{ matrix.postgres-auth }}
services:
psql-a:
image: ${{ matrix.postgres-image }}
volumes: [ 'pgrunshare:/var/run/postgresql' ]
env:
POSTGRES_USER: 'test_username'
POSTGRES_DB: 'test_database'
POSTGRES_PASSWORD: 'test_password'
POSTGRES_HOST_AUTH_METHOD: ${{ matrix.postgres-auth }}
POSTGRES_INITDB_ARGS: --auth-host=${{ matrix.postgres-auth }}
psql-b:
image: ${{ matrix.postgres-image }}
volumes: [ 'pgrunshare:/var/run/postgresql' ]
env:
POSTGRES_USER: 'test_username'
POSTGRES_DB: 'test_database'
POSTGRES_PASSWORD: 'test_password'
POSTGRES_HOST_AUTH_METHOD: ${{ matrix.postgres-auth }}
POSTGRES_INITDB_ARGS: --auth-host=${{ matrix.postgres-auth }}
steps:
- name: Display OS and Swift versions
run: |
[[ -z "${SWIFT_PLATFORM}" ]] && SWIFT_PLATFORM="$(. /etc/os-release && echo "${ID}${VERSION_ID}")"
[[ -z "${SWIFT_VERSION}" ]] && SWIFT_VERSION="$(cat /.swift_tag 2>/dev/null || true)"
printf 'OS: %s\nTag: %s\nVersion:\n' "${SWIFT_PLATFORM}-${RUNNER_ARCH}" "${SWIFT_VERSION}" && swift --version
- name: Check out package
uses: actions/checkout@v3
with: { path: 'postgres-nio' }
- name: Run integration tests
run: swift test --package-path postgres-nio --filter=^IntegrationTests
- name: Check out postgres-kit dependent
uses: actions/checkout@v3
with: { repository: 'vapor/postgres-kit', path: 'postgres-kit' }
- name: Check out fluent-postgres-driver dependent
uses: actions/checkout@v3
with: { repository: 'vapor/fluent-postgres-driver', path: 'fluent-postgres-driver' }
- name: Use local package in dependents
run: |
swift package --package-path postgres-kit edit postgres-nio --path postgres-nio
swift package --package-path fluent-postgres-driver edit postgres-nio --path postgres-nio
- name: Run postgres-kit tests
run: swift test --package-path postgres-kit
- name: Run fluent-postgres-driver tests
run: swift test --package-path fluent-postgres-driver
macos-all:
if: github.event_name == 'pull_request'
strategy:
fail-fast: false
matrix:
postgres-formula:
# Only test one version on macOS, let Linux do the rest
- postgresql@14
postgres-auth:
# Only test one auth method on macOS, Linux tests will cover the others
- scram-sha-256
xcode-version:
- '~14.3'
- '15.0-beta'
runs-on: macos-13
env:
POSTGRES_HOSTNAME: 127.0.0.1
POSTGRES_USER: 'test_username'
POSTGRES_PASSWORD: 'test_password'
POSTGRES_DB: 'postgres'
POSTGRES_AUTH_METHOD: ${{ matrix.postgres-auth }}
POSTGRES_SOCKET: '/tmp/.s.PGSQL.5432'
POSTGRES_FORMULA: ${{ matrix.postgres-formula }}
steps:
- name: Select latest available Xcode
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ matrix.xcode-version }}
- name: Install Postgres, setup DB and auth, and wait for server start
run: |
export PATH="$(brew --prefix)/opt/${POSTGRES_FORMULA}/bin:$PATH" PGDATA=/tmp/vapor-postgres-test
(brew unlink postgresql || true) && brew install "${POSTGRES_FORMULA}" && brew link --force "${POSTGRES_FORMULA}"
initdb --locale=C --auth-host "${POSTGRES_AUTH_METHOD}" -U "${POSTGRES_USER}" --pwfile=<(echo "${POSTGRES_PASSWORD}")
pg_ctl start --wait
timeout-minutes: 2
- name: Checkout code
uses: actions/checkout@v3
- name: Run all tests
run: swift test
code-coverage:
runs-on: ubuntu-latest
container: swift:jammy
steps:
- name: Check out code
uses: actions/checkout@v3
- name: Run unit tests for coverage data
run: swift test --filter=^PostgresNIOTests --enable-code-coverage
- name: Upload coverage data
uses: vapor/swift-codecov-action@v0.2
api-breakage:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
container: swift:jammy
steps:
- name: Checkout
uses: actions/checkout@v3
with:
fetch-depth: 0
# https://github.com/actions/checkout/issues/766
- name: Mark the workspace as safe
run: git config --global --add safe.directory "${GITHUB_WORKSPACE}"
- name: API breaking changes
run: swift package diagnose-api-breaking-changes origin/main
gh-codeql:
strategy:
fail-fast: false
matrix:
runner-os:
- ubuntu-latest
- macos-13
runs-on: ${{ matrix.runner-os }}
permissions: { security-events: write }
steps:
- name: Select appropriate Xcode version
if: ${{ startsWith(matrix.runner-os, 'macos') }}
uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: '~14.3'
- name: Check out code
uses: actions/checkout@v3
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: swift
- name: Perform build
run: swift build
- name: Run CodeQL analyze
uses: github/codeql-action/analyze@v2