Skip to content
Draft
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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
129 changes: 93 additions & 36 deletions .github/workflows/MistKit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,46 @@ jobs:
container: ${{ matrix.swift.nightly && format('swiftlang/swift:nightly-{0}-{1}', matrix.swift.version, matrix.os) || format('swift:{0}-{1}', matrix.swift.version, matrix.os) }}
if: ${{ !contains(github.event.head_commit.message, 'ci skip') }}
strategy:
fail-fast: false
matrix:
os: [noble, jammy]
swift:
- version: "6.1"
- version: "6.2"
- version: "6.2"
- version: "6.3"
nightly: true

type: ["", "wasm", "wasm-embedded"]
exclude:
# Exclude Swift 6.1 from wasm builds
- swift: { version: "6.1" }
type: "wasm"
- swift: { version: "6.1" }
type: "wasm-embedded"
# Exclude Swift 6.3 from wasm builds
- swift: { version: "6.3", nightly: true }
type: "wasm"
- swift: { version: "6.3", nightly: true }
type: "wasm-embedded"
steps:
- uses: actions/checkout@v4
- uses: brightdigit/swift-build@v1.3.3
- uses: brightdigit/swift-build@v1.5.0-beta.2
id: build
with:
type: ${{ matrix.type }}
wasmtime-version: "40.0.2"
wasm-swift-flags: >-
-Xcc -D_WASI_EMULATED_SIGNAL
-Xcc -D_WASI_EMULATED_MMAN
-Xlinker -lwasi-emulated-signal
-Xlinker -lwasi-emulated-mman
- uses: sersoft-gmbh/swift-coverage-action@v4
if: steps.build.outputs.contains-code-coverage == 'true'
id: coverage-files
with:
with:
fail-on-empty-output: true
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v4
if: steps.build.outputs.contains-code-coverage == 'true'
uses: codecov/codecov-action@v4
with:
fail_ci_if_error: true
flags: swift-${{ matrix.swift.version }}-${{ matrix.os }}${{ matrix.swift.nightly && 'nightly' || '' }}
Expand All @@ -38,6 +61,7 @@ jobs:
build-windows:
name: Build on Windows
runs-on: ${{ matrix.runs-on }}
if: ${{ !contains(github.event.head_commit.message, 'ci skip') }}
strategy:
fail-fast: false
matrix:
Expand All @@ -49,113 +73,146 @@ jobs:
build: 6.2-RELEASE
steps:
- uses: actions/checkout@v4
- uses: brightdigit/swift-build@v1.3.3
- uses: brightdigit/swift-build@v1.5.0-beta.2
id: build
with:
windows-swift-version: ${{ matrix.swift.version }}
windows-swift-build: ${{ matrix.swift.build }}
- name: Upload coverage to Codecov
uses: codecov/codecov-action@v5
if: steps.build.outputs.contains-code-coverage == 'true'
uses: codecov/codecov-action@v5
with:
fail_ci_if_error: true
flags: swift-${{ matrix.swift.version }},windows
verbose: true
token: ${{ secrets.CODECOV_TOKEN }}
os: windows
swift_project: MistKit
# files: ${{ join(fromJSON(steps.coverage-files.outputs.files), ',') }}
# files: ${{ join(fromJSON(steps.coverage-files.outputs.files), ',') }}
build-android:
name: Build on Android
runs-on: ubuntu-latest
if: ${{ !contains(github.event.head_commit.message, 'ci skip') }}
strategy:
fail-fast: false
matrix:
swift:
- version: "6.1"
- version: "6.2"
android-api-level: [28, 33, 34]
steps:
- uses: actions/checkout@v4
- name: Free disk space
if: matrix.build-only == false
uses: jlumbroso/free-disk-space@main
with:
tool-cache: false
android: false
dotnet: true
haskell: true
large-packages: true
docker-images: true
swap-storage: true
- uses: brightdigit/swift-build@v1.5.0-beta.2
with:
scheme: ${{ env.PACKAGE_NAME }}
type: android
android-swift-version: ${{ matrix.swift.version }}
android-api-level: ${{ matrix.android-api-level }}
android-run-tests: true
# Note: Code coverage is not supported on Android builds
# The Swift Android SDK does not include LLVM coverage tools (llvm-profdata, llvm-cov)
build-macos:
name: Build on macOS
env:
PACKAGE_NAME: MistKit
runs-on: ${{ matrix.runs-on }}
if: "!contains(github.event.head_commit.message, 'ci skip')"
if: ${{ !contains(github.event.head_commit.message, 'ci skip') }}
strategy:
fail-fast: false
matrix:
include:
# SPM Build Matrix
- runs-on: macos-15
xcode: "/Applications/Xcode_26.0.app"
- runs-on: macos-26
xcode: "/Applications/Xcode_26.2.app"
- runs-on: macos-15
xcode: "/Applications/Xcode_16.4.app"
- runs-on: macos-15
xcode: "/Applications/Xcode_16.3.app"

# macOS Build Matrix
- type: macos
runs-on: macos-15
xcode: "/Applications/Xcode_16.4.app"
runs-on: macos-26
xcode: "/Applications/Xcode_26.2.app"

# iOS Build Matrix
- type: ios
runs-on: macos-15
xcode: "/Applications/Xcode_26.0.app"
runs-on: macos-26
xcode: "/Applications/Xcode_26.2.app"
deviceName: "iPhone 17 Pro"
osVersion: "26.0.1"
osVersion: "26.2"
download-platform: true

- type: ios
runs-on: macos-15
xcode: "/Applications/Xcode_16.4.app"
deviceName: "iPhone 16e"
osVersion: "18.5"

- type: ios
runs-on: macos-15
xcode: "/Applications/Xcode_16.3.app"
deviceName: "iPhone 16"
osVersion: "18.4"
download-platform: true


# watchOS Build Matrix
- type: watchos
runs-on: macos-15
xcode: "/Applications/Xcode_26.0.app"
runs-on: macos-26
xcode: "/Applications/Xcode_26.2.app"
deviceName: "Apple Watch Ultra 3 (49mm)"
osVersion: "26.0"
osVersion: "26.2"

# tvOS Build Matrix
- type: tvos
runs-on: macos-15
xcode: "/Applications/Xcode_26.0.app"
runs-on: macos-26
xcode: "/Applications/Xcode_26.2.app"
deviceName: "Apple TV"
osVersion: "26.0"
osVersion: "26.2"

# visionOS Build Matrix
- type: visionos
runs-on: macos-15
xcode: "/Applications/Xcode_26.0.app"
runs-on: macos-26
xcode: "/Applications/Xcode_26.2.app"
deviceName: "Apple Vision Pro"
osVersion: "26.0"
osVersion: "26.2"

steps:
- uses: actions/checkout@v4

- name: Build and Test
uses: brightdigit/swift-build@v1.3.3
id: build
uses: brightdigit/swift-build@v1.5.0-beta.2
with:
scheme: ${{ env.PACKAGE_NAME }}
type: ${{ matrix.type }}
xcode: ${{ matrix.xcode }}
deviceName: ${{ matrix.deviceName }}
osVersion: ${{ matrix.osVersion }}
download-platform: ${{ matrix.download-platform }}

# Common Coverage Steps
- name: Process Coverage
if: steps.build.outputs.contains-code-coverage == 'true'
uses: sersoft-gmbh/swift-coverage-action@v4

- name: Upload Coverage
if: steps.build.outputs.contains-code-coverage == 'true'
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
flags: ${{ matrix.type && format('{0}{1}', matrix.type, matrix.osVersion) || 'spm' }}

lint:
name: Linting
if: "!contains(github.event.head_commit.message, 'ci skip')"
runs-on: ubuntu-latest
needs: [build-ubuntu, build-macos, build-windows]
if: ${{ !contains(github.event.head_commit.message, 'ci skip') }}
needs: [build-ubuntu, build-macos, build-windows, build-android]
env:
MINT_PATH: .mint/lib
MINT_LINK_PATH: .mint/bin
Expand Down
39 changes: 39 additions & 0 deletions .github/workflows/check-unsafe-flags.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Check for unsafeFlags

on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]

jobs:
dump-package-check:
name: Dump Swift package (authoritative) and scan JSON
runs-on: ubuntu-latest
container:
image: swift:latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Install jq
run: |
apt-get update && apt-get install -y jq

- name: Dump package JSON and check for unsafeFlags
shell: bash
run: |
set -euo pipefail
# Compute unsafeFlags array directly from the dump (don't store the full dump variable)
unsafe_flags=$(swift package dump-package | jq -c '[.. | objects | .unsafeFlags? // empty]')
# Check array length to decide failure
if [ "$(echo "$unsafe_flags" | jq 'length')" -gt 0 ]; then
echo "ERROR: unsafeFlags found in resolved package JSON:"
echo "$unsafe_flags" | jq '.' || true
echo "--- resolved package dump (first 200 lines) ---"
# Print a sample of the authoritative dump (re-run dump-package for the sample)
swift package dump-package | sed -n '1,200p' || true
exit 1
else
echo "No unsafeFlags in resolved package JSON."
fi
31 changes: 31 additions & 0 deletions .github/workflows/swift-source-compat.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Swift Source Compatibility

on:
push:
branches: [main]
pull_request:
workflow_dispatch:

jobs:
swift-source-compat-suite:
name: Test Swift ${{ matrix.container }} For Source Compatibility Suite
runs-on: ubuntu-latest
if: ${{ !contains(github.event.head_commit.message, 'ci skip') }}
continue-on-error: ${{ contains(matrix.container, 'nightly') }}

strategy:
fail-fast: false
matrix:
container:
- swift:6.1
- swift:6.2
- swiftlang/swift:nightly-6.3-noble

container: ${{ matrix.container }}

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Test Swift 6.x For Source Compatibility
run: swift build --disable-sandbox --verbose --configuration release
16 changes: 0 additions & 16 deletions Examples/Bushel/.gitignore

This file was deleted.

Loading
Loading