Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
118 changes: 118 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
name: ViewScope CI
permissions:
contents: read
pull-requests: write

on:
push:
branches:
- "main"
- "*release*"
pull_request:
branches:
- "main"
- "*release*"

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
swiftformat:
name: Run SwiftFormat
runs-on: macos-26
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Select Xcode Version
run: ./.scripts/xcode-select
- name: Lint with SwiftFormat
run: ./.scripts/lint-swiftformat

lint-docc:
name: Validate Documentation
runs-on: macos-26
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Select Xcode Version
run: ./.scripts/xcode-select
- name: Validate Documentation
run: ./.scripts/lint-docc

build-macos-spm:
name: Build ViewScope (macOS)
strategy:
fail-fast: false
matrix:
swift: ["6.2"]
include:
- swift: "6.2"
runner: "macos-26"
xcode: "26.1"
runs-on: ${{ matrix.runner }}
outputs:
artifact-name: macos-build
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Select Xcode Version
run: ./.scripts/xcode-select ${{ matrix.xcode }}
- name: Build ViewScope
run: swift build -v --build-tests --build-path .build
- name: Compress Build
run: zip -r build.zip .build
- name: Upload Build
uses: actions/upload-artifact@v6
with:
name: macos-build-${{ matrix.swift }}
path: build.zip

test-macos-spm:
name: Test ViewScope (macOS)
strategy:
fail-fast: false
matrix:
swift: ["6.2"]
include:
- swift: "6.2"
runner: "macos-26"
xcode: "26.1"
needs: build-macos-spm
runs-on: ${{ matrix.runner }}
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Xcode Version
run: ./.scripts/xcode-select ${{ matrix.xcode }}
- name: Download Build
uses: actions/download-artifact@v7
with:
name: macos-build-${{ matrix.swift }}
path: .
- name: Decompress Build
run: unzip build.zip
- name: Test ViewScope
run: swift test --skip-build

validate-pr:
name: Validate Pull Request
if: ${{ always() && github.event_name == 'pull_request' }}
needs:
- build-macos-spm
- test-macos-spm
- swiftformat
- lint-docc
runs-on: ubuntu-latest
steps:
- name: Check upstream jobs
run: |
if [[ "${{ needs.build-macos-spm.result }}" == "failure" ]] || \
[[ "${{ needs.test-macos-spm.result }}" == "failure" ]] || \
[[ "${{ needs.swiftformat.result }}" == "failure" ]] || \
[[ "${{ needs.lint-docc.result }}" == "failure" ]]; then
echo "❌ Required job failed."
exit 1
else
echo "✅ All required jobs completed successfully."
fi
31 changes: 31 additions & 0 deletions .scripts/lint-docc
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/bin/bash

set -euo pipefail

temp_dir=$(mktemp -d)
trap 'rm -rf "$temp_dir"' EXIT

set +e
output=$(swift package \
--allow-writing-to-directory "$temp_dir" \
generate-documentation \
--product ViewScope \
--output-path "$temp_dir" \
--transform-for-static-hosting \
--hosting-base-path temp-docs 2>&1)
exit_code=$?
set -e

echo "$output"

if [ $exit_code -ne 0 ]; then
echo "❌ Documentation generation failed with errors."
exit $exit_code
fi

if echo "$output" | grep -q '\bwarning:'; then
echo "❌ Documentation generation succeeded, but warnings were emitted."
exit 1
fi

echo "✅ Documentation generated without warnings."
3 changes: 3 additions & 0 deletions .scripts/lint-swiftformat
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
#!/bin/bash

swift package plugin --allow-writing-to-package-directory swiftformat --lint
2 changes: 1 addition & 1 deletion .scripts/xcode-select
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#!/bin/bash

VERSION="${1:-26.2}"
VERSION="${1:-26.1}"

sudo xcode-select --switch "/Applications/Xcode_${VERSION}.app"