Skip to content

Commit

Permalink
Use Cassandra service for unit tests
Browse files Browse the repository at this point in the history
Use Cassandra service for unit tests.

Motivation:

To speed up and simplify unit tests which rely on a running Cassandra
server.

Modifications:

* Use a Cassandra service instead of installing and running Cassandra in
  the test container
* Tidy up existing actions workflows
  * Combine `main.yml` and `scheduled.yml`
  * Remove non-functional Swift 6 Language mode
* Extend Cassandra timeouts in tests to combat flakiness seen in local
  tests.

Result:

Faster unit tests.
  • Loading branch information
rnro committed Nov 14, 2024
1 parent fae0977 commit e6051cd
Show file tree
Hide file tree
Showing 6 changed files with 148 additions and 82 deletions.
18 changes: 13 additions & 5 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,23 @@ name: Main
on:
push:
branches: [main]
schedule:
- cron: "0 8,20 * * *"

jobs:
unit-tests:
name: Unit Tests
# Workaround https://github.com/nektos/act/issues/1875
uses: apple/swift-nio/.github/workflows/swift_matrix.yml@main
name: Unit tests
uses: ./.github/workflows/unit_tests.yml
with:
name: "Unit tests"
matrix_linux_command: "I_AM_RUNNING_IN_CI=true ./scripts/gha_run_unit_tests.sh"
linux_5_9_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -strict-concurrency=complete"
linux_5_9_enabled: false
linux_5_10_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -strict-concurrency=complete"
linux_6_0_arguments_override: "--explicit-target-dependency-import-check error"
linux_6_0_enabled: false
linux_nightly_6_0_arguments_override: "--explicit-target-dependency-import-check error"
linux_nightly_6_0_enabled: false
linux_nightly_main_arguments_override: "--explicit-target-dependency-import-check error"
linux_nightly_main_enabled: false

cxx-interop:
name: Cxx interop
Expand Down
47 changes: 24 additions & 23 deletions .github/workflows/pull_request.yml
Original file line number Diff line number Diff line change
@@ -1,30 +1,31 @@
name: PR

on:
pull_request:
types: [opened, reopened, synchronize]
pull_request:
types: [opened, reopened, synchronize]

jobs:
soundness:
name: Soundness
uses: swiftlang/github-workflows/.github/workflows/soundness.yml@main
with:
license_header_check_project_name: "Swift Cassandra Client"
api_breakage_check_enabled: false
soundness:
name: Soundness
uses: swiftlang/github-workflows/.github/workflows/soundness.yml@main
with:
license_header_check_project_name: "Swift Cassandra Client"
api_breakage_check_enabled: false

unit-tests:
name: Unit Tests
# Workaround https://github.com/nektos/act/issues/1875
uses: apple/swift-nio/.github/workflows/swift_matrix.yml@main
with:
name: "Unit tests"
matrix_linux_command: "I_AM_RUNNING_IN_CI=true ./scripts/gha_run_unit_tests.sh"
new-unit-tests:
name: Unit tests
uses: ./.github/workflows/unit_tests.yml
with:
linux_5_9_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -strict-concurrency=complete"
linux_5_9_enabled: false
linux_5_10_arguments_override: "--explicit-target-dependency-import-check error -Xswiftc -strict-concurrency=complete"
linux_6_0_arguments_override: "--explicit-target-dependency-import-check error"
linux_6_0_enabled: false
linux_nightly_6_0_arguments_override: "--explicit-target-dependency-import-check error"
linux_nightly_6_0_enabled: false
linux_nightly_main_arguments_override: "--explicit-target-dependency-import-check error"
linux_nightly_main_enabled: false

cxx-interop:
name: Cxx interop
uses: apple/swift-nio/.github/workflows/cxx_interop.yml@main

swift-6-language-mode:
name: Swift 6 Language Mode
uses: apple/swift-nio/.github/workflows/swift_6_language_mode.yml@main
if: false # Disabled for now.
cxx-interop:
name: Cxx interop
uses: apple/swift-nio/.github/workflows/cxx_interop.yml@main
14 changes: 0 additions & 14 deletions .github/workflows/scheduled.yml

This file was deleted.

109 changes: 109 additions & 0 deletions .github/workflows/unit_tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
name: Unit tests

on:
workflow_call:
inputs:
linux_5_9_enabled:
type: boolean
description: "Boolean to enable the Linux 5.9 Swift version matrix job. Defaults to true."
default: true
linux_5_9_arguments_override:
type: string
description: "The arguments passed to swift test in the Linux 5.9 Swift version matrix job."
default: ""
linux_5_10_enabled:
type: boolean
description: "Boolean to enable the Linux 5.10 Swift version matrix job. Defaults to true."
default: true
linux_5_10_arguments_override:
type: string
description: "The arguments passed to swift test in the Linux 5.10 Swift version matrix job."
default: ""
linux_6_0_enabled:
type: boolean
description: "Boolean to enable the Linux 6.0 Swift version matrix job. Defaults to true."
default: true
linux_6_0_arguments_override:
type: string
description: "The arguments passed to swift test in the Linux 6.0 Swift version matrix job."
default: ""
linux_nightly_6_0_enabled:
type: boolean
description: "Boolean to enable the Linux nightly 6.0 Swift version matrix job. Defaults to true."
default: true
linux_nightly_6_0_arguments_override:
type: string
description: "The arguments passed to swift test in the Linux nightly 6.0 Swift version matrix job."
default: ""
linux_nightly_main_enabled:
type: boolean
description: "Boolean to enable the Linux nightly main Swift version matrix job. Defaults to true."
default: true
linux_nightly_main_arguments_override:
type: string
description: "The arguments passed to swift test in the Linux nightly main Swift version matrix job."
default: ""

jobs:
unit-tests:
name: Unit tests
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
# We are specifying only the major and minor of the docker images to automatically pick up the latest patch release
swift:
- image: "swift:5.9-jammy"
swift_version: "5.9"
enabled: ${{ inputs.linux_5_9_enabled }}
- image: "swift:5.10-jammy"
swift_version: "5.10"
enabled: ${{ inputs.linux_5_10_enabled }}
- image: "swift:6.0-jammy"
swift_version: "6.0"
enabled: ${{ inputs.linux_6_0_enabled }}
- image: "swiftlang/swift:nightly-6.0-jammy"
swift_version: "nightly-6.0"
enabled: ${{ inputs.linux_nightly_6_0_enabled }}
- image: "swiftlang/swift:nightly-main-jammy"
swift_version: "nightly-main"
enabled: ${{ inputs.linux_nightly_main_enabled }}
steps:
- name: Checkout repository
if: ${{ matrix.swift.enabled }}
uses: actions/checkout@v4
with:
persist-credentials: false
submodules: true
- name: Mark the workspace as safe
if: ${{ matrix.swift.enabled }}
# https://github.com/actions/checkout/issues/766
run: git config --global --add safe.directory ${GITHUB_WORKSPACE}
- name: Run matrix job
if: ${{ matrix.swift.enabled }}
env:
SWIFT_VERSION: ${{ matrix.swift.swift_version }}
COMMAND: "swift test"
COMMAND_OVERRIDE_5_9: "swift test ${{ inputs.linux_5_9_arguments_override }}"
COMMAND_OVERRIDE_5_10: "swift test ${{ inputs.linux_5_10_arguments_override }}"
COMMAND_OVERRIDE_6_0: "swift test ${{ inputs.linux_6_0_arguments_override }}"
COMMAND_OVERRIDE_NIGHTLY_6_0: "swift test ${{ inputs.linux_nightly_6_0_arguments_override }}"
COMMAND_OVERRIDE_NIGHTLY_MAIN: "swift test ${{ inputs.linux_nightly_main_arguments_override }}"
CASSANDRA_HOST: cassandra
CASSANDRA_CQL_PORT: 9042
CASSANDRA_USER: cassandra
CASSANDRA_PASSWORD: cassandra
CASSANDRA_KEYSPACE: cassandra
run: |
apt-get -qq update && apt-get -qq -y install curl

Check failure on line 98 in .github/workflows/unit_tests.yml

View workflow job for this annotation

GitHub Actions / Soundness / YAML lint check

98:60 [trailing-spaces] trailing spaces
curl -s https://raw.githubusercontent.com/apple/swift-nio/main/scripts/check-matrix-job.sh | bash
container:
image: ${{ matrix.swift.image }}
services:
cassandra:
image: cassandra:3.11
env:
CASSANDRA_CQL_PORT: 9042
CASSANDRA_USER: cassandra
CASSANDRA_PASSWORD: cassandra
CASSANDRA_KEYSPACE: cassandra
2 changes: 2 additions & 0 deletions Tests/CassandraClientTests/CassandraClientTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ final class Tests: XCTestCase {
self.configuration.username = env["CASSANDRA_USER"]
self.configuration.password = env["CASSANDRA_PASSWORD"]
self.configuration.keyspace = keyspace
self.configuration.requestTimeoutMillis = UInt32(24_000) // Default: 12_000 ms
self.configuration.connectTimeoutMillis = UInt32(10_000) // Default: 5_000 ms

var logger = Logger(label: "test")
logger.logLevel = .debug
Expand Down
40 changes: 0 additions & 40 deletions scripts/gha_run_unit_tests.sh

This file was deleted.

0 comments on commit e6051cd

Please sign in to comment.