Merge pull request #95 from ably/remove-fancy-quotes #252
This file contains hidden or 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: 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" |