Skip to content

Merge pull request #95 from ably/remove-fancy-quotes #252

Merge pull request #95 from ably/remove-fancy-quotes

Merge pull request #95 from ably/remove-fancy-quotes #252

Workflow file for this run

name: Check
on:
workflow_dispatch:
pull_request:
push:
branches:
- main
jobs:
lint:
runs-on: macos-15
# From actions/cache documentation linked to below
env:
MINT_PATH: .mint/lib
MINT_LINK_PATH: .mint/bin
steps:
- uses: actions/checkout@v4
with:
submodules: true
# This step can be removed once the runners' default version of Xcode is 16.3 or above
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: 16.3
# We use caching for Mint because at the time of writing SwiftLint took about 5 minutes to build in CI, which is unacceptably slow.
# https://github.com/actions/cache/blob/40c3b67b2955d93d83b27ed164edd0756bc24049/examples.md#swift---mint
- uses: actions/cache@v4
with:
path: .mint
key: ${{ runner.os }}-mint-${{ hashFiles('**/Mintfile') }}
restore-keys: |
${{ runner.os }}-mint-
- run: npm ci
- run: brew install mint
- run: mint bootstrap
- run: swift run BuildTool lint
# TODO: Restore in https://github.com/ably/ably-liveobjects-swift-plugin/issues/2 once we've seen what form the LiveObjects spec takes
#
# spec-coverage:
# runs-on: macos-15
# steps:
# - uses: actions/checkout@v4
# with:
# submodules: true
#
# # This step can be removed once the runners' default version of Xcode is 16.3 or above
# - uses: maxim-lobanov/setup-xcode@v1
# with:
# xcode-version: 16.3
#
# - name: Spec coverage
# run: swift run BuildTool spec-coverage --spec-commit-sha 2f88b1b
# env:
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
generate-matrices:
runs-on: macos-15
outputs:
matrix: ${{ steps.generation-step.outputs.matrix }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
# This step can be removed once the runners' default version of Xcode is 16.3 or above
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: 16.3
- id: generation-step
run: swift run BuildTool generate-matrices >> $GITHUB_OUTPUT
build-and-test-spm:
name: SPM (Xcode ${{ matrix.tooling.xcodeVersion }})
runs-on: macos-15
needs: generate-matrices
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.generate-matrices.outputs.matrix).withoutPlatform }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ matrix.tooling.xcodeVersion }}
# https://forums.swift.org/t/warnings-as-errors-for-libraries-frameworks/58393/2
- run: swift build -Xswiftc -warnings-as-errors
- run: swift test -Xswiftc -warnings-as-errors
build-release-configuration-spm:
name: SPM, `release` configuration (Xcode ${{ matrix.tooling.xcodeVersion }})
runs-on: macos-15
needs: generate-matrices
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.generate-matrices.outputs.matrix).withoutPlatform }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ matrix.tooling.xcodeVersion }}
# https://forums.swift.org/t/warnings-as-errors-for-libraries-frameworks/58393/2
- run: swift build -Xswiftc -warnings-as-errors --configuration release
build-and-test-xcode:
name: Xcode, ${{matrix.platform}} (Xcode ${{ matrix.tooling.xcodeVersion }})
runs-on: macos-15
needs: generate-matrices
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.generate-matrices.outputs.matrix).withPlatform }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ matrix.tooling.xcodeVersion }}
# We run these as two separate steps so that we can easily see the execution time of each step.
- name: Build for testing
run: swift run BuildTool build-library-for-testing --platform ${{ matrix.platform }}
- name: Run tests
run: swift run BuildTool test-library --platform ${{ matrix.platform }}
code-coverage:
name: Generate code coverage
runs-on: macos-15
steps:
- uses: actions/checkout@v4
with:
submodules: true
# This step can be removed once the runners' default version of Xcode is 16.3 or above
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: 16.3
- run: swift run BuildTool generate-code-coverage --result-bundle-path CodeCoverage.xcresult
# Generate a Markdown report of the code coverage information and add it to the workflow run.
#
# This tool is the best option that I could find after a brief look at the options. There are a few things that I wish it could do:
#
# - post a message on the pull request, like they do on Kotlin
# - offer more fine-grained configuration about which data to include in the report (I only care about code coverage, not test results, and I don't care about code coverage of the AblyLiveObjectsTests target)
#
# but it'll do for now (we can always fork or have another look for tooling later).
- uses: slidoapp/xcresulttool@v3.1.0
with:
path: CodeCoverage.xcresult
# This title will be used for the sidebar item that this job adds to GitHub results page for this workflow
title: Code coverage results
# Turning off as much non-code-coverage information as it lets me
show-passed-tests: false
if: success() || failure()
build-release-configuration-xcode:
name: Xcode, `release` configuration, ${{matrix.platform}} (Xcode ${{ matrix.tooling.xcodeVersion }})
runs-on: macos-15
needs: generate-matrices
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.generate-matrices.outputs.matrix).withPlatform }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ matrix.tooling.xcodeVersion }}
- name: Build library
run: swift run BuildTool build-library --platform ${{ matrix.platform }} --configuration release
check-example-app:
name: Example app, ${{matrix.platform}} (Xcode ${{ matrix.tooling.xcodeVersion }})
runs-on: macos-15
needs: generate-matrices
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.generate-matrices.outputs.matrix).withPlatform }}
steps:
- uses: actions/checkout@v4
with:
submodules: true
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: ${{ matrix.tooling.xcodeVersion }}
- name: Build example app
run: swift run BuildTool build-example-app --platform ${{ matrix.platform }}
check-documentation:
runs-on: macos-15
permissions:
deployments: write
id-token: write
contents: read
steps:
- uses: actions/checkout@v4
with:
submodules: true
# This step can be removed once the runners' default version of Xcode is 16.3 or above
- uses: maxim-lobanov/setup-xcode@v1
with:
xcode-version: 16.3
# Dry run upload-action to get base-path url
- name: Dry-Run Upload (to get url)
id: preupload
uses: ably/sdk-upload-action@v2
with:
mode: preempt
sourcePath: .build/plugins/Swift-DocC/outputs/AblyLiveObjects.doccarchive # Path to the Swift DocC output folder
githubToken: ${{ secrets.GITHUB_TOKEN }}
artifactName: AblyLiveObjects
# Build the documentation using Swift DocC
- name: Build documentation
run: |
swift package generate-documentation --target AblyLiveObjects --disable-indexing \
--hosting-base-path "${{ steps.preupload.outputs.base-path }}" \
--transform-for-static-hosting
working-directory: ${{ github.workspace }}
# Configure AWS credentials for uploading documentation
- name: Configure AWS Credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: eu-west-2
role-to-assume: arn:aws:iam::${{ secrets.ABLY_AWS_ACCOUNT_ID_SDK }}:role/ably-sdk-builds-ably-liveobjects-swift-plugin
role-session-name: "${{ github.run_id }}-${{ github.run_number }}"
# Upload the generated documentation
- name: Upload Documentation
uses: ably/sdk-upload-action@v2
with:
sourcePath: .build/plugins/Swift-DocC/outputs/AblyLiveObjects.doccarchive # Path to the Swift DocC output folder
githubToken: ${{ secrets.GITHUB_TOKEN }}
artifactName: AblyLiveObjects # Optional root-level directory name
landingPagePath: documentation/ablyliveobjects
# We use this job as a marker that all of the required checks have completed.
# This allows us to configure a single required status check in our branch
# protection rules instead of having to type loads of different check names
# into the branch protection web UI (and keep this list up to date as we
# tweak the matrices).
all-checks-completed:
runs-on: ubuntu-latest
needs:
- lint
# - spec-coverage
- build-and-test-spm
- build-release-configuration-spm
- build-and-test-xcode
- build-release-configuration-xcode
- check-example-app
- check-documentation
- code-coverage
steps:
- name: No-op
run: "true"