diff --git a/.github/workflows/swift.yml b/.github/workflows/swift.yml index 46783f5..443c6fc 100644 --- a/.github/workflows/swift.yml +++ b/.github/workflows/swift.yml @@ -37,3 +37,81 @@ jobs: run: swift build -c ${{ matrix.config }} - name: Test run: swift test -c ${{ matrix.config }} + + android: + name: Android + runs-on: macos-15 + strategy: + fail-fast: false + matrix: + config: ["debug", "release"] + env: + SWIFT_VERSION: "6.3.2" + ANDROID_NDK_VERSION: "27.2.12479018" + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Install Swift + run: | + curl -O https://download.swift.org/swiftly/darwin/swiftly.pkg + installer -pkg swiftly.pkg -target CurrentUserHomeDirectory + ~/.swiftly/bin/swiftly init --assume-yes --skip-install + echo "$HOME/.swiftly/bin" >> "$GITHUB_PATH" + source ~/.swiftly/env.sh + swiftly install ${{ env.SWIFT_VERSION }} + swiftly use ${{ env.SWIFT_VERSION }} + echo "$(swiftly use --print-location)/usr/bin" >> "$GITHUB_PATH" + - name: Install Android NDK + run: $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --install "ndk;${{ env.ANDROID_NDK_VERSION }}" + - name: Install Swift SDK for Android + run: | + curl -L -o android-sdk.artifactbundle.tar.gz "https://download.swift.org/swift-${{ env.SWIFT_VERSION }}-release/android-sdk/swift-${{ env.SWIFT_VERSION }}-RELEASE/swift-${{ env.SWIFT_VERSION }}-RELEASE_android.artifactbundle.tar.gz" + CHECKSUM=$(swift package compute-checksum android-sdk.artifactbundle.tar.gz) + swift sdk install android-sdk.artifactbundle.tar.gz --checksum "$CHECKSUM" + ANDROID_NDK_HOME="$ANDROID_HOME/ndk/${{ env.ANDROID_NDK_VERSION }}" \ + bash "$HOME/Library/org.swift.swiftpm/swift-sdks/swift-${{ env.SWIFT_VERSION }}-RELEASE_android.artifactbundle/swift-android/scripts/setup-android-sdk.sh" + - name: Build + run: TARGET_OS_ANDROID=1 swift build --swift-sdk aarch64-unknown-linux-android28 -c ${{ matrix.config }} + + ios: + name: iOS + runs-on: macos-26 + strategy: + fail-fast: false + matrix: + config: ["debug", "release"] + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Select Simulator + run: | + DEVICE_ID=$(xcrun simctl list devices available -j | python3 -c "import json,sys; d=json.load(sys.stdin)['devices']; devices=[v for vs in d.values() for v in vs if 'iPhone' in v['name']]; print(devices[0]['udid'])") + echo "DEVICE_ID=${DEVICE_ID}" >> "$GITHUB_ENV" + - name: Build + run: > + xcodebuild build -scheme CoreModel-SQLite + -destination "generic/platform=iOS" + -configuration ${{ matrix.config == 'release' && 'Release' || 'Debug' }} + -skipMacroValidation -skipPackagePluginValidation + - name: Test + run: > + xcodebuild test -scheme CoreModel-SQLite + -destination "id=${{ env.DEVICE_ID }}" + -configuration ${{ matrix.config == 'release' && 'Release' || 'Debug' }} + -skipMacroValidation -skipPackagePluginValidation + ENABLE_TESTABILITY=YES + + android-test: + name: Android Test + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Test on Android emulator + uses: skiptools/swift-android-action@v2 + with: + swift-version: "6.3.2" + android-api-level: 28 + swift-configuration: debug + free-disk-space: true + run-tests: true diff --git a/.swift-version b/.swift-version new file mode 100644 index 0000000..f9da12e --- /dev/null +++ b/.swift-version @@ -0,0 +1 @@ +6.3.2 \ No newline at end of file diff --git a/Package.swift b/Package.swift index 08f219d..691e1b2 100644 --- a/Package.swift +++ b/Package.swift @@ -1,5 +1,21 @@ -// swift-tools-version: 6.0 +// swift-tools-version: 6.1 import PackageDescription +import Foundation + +// Android has no system libsqlite3, so it needs SQLite.swift's embedded +// copy. macOS and Linux keep SQLite.swift's own default for the platform. +let isAndroid = ProcessInfo.processInfo.environment["TARGET_OS_ANDROID"] == "1" + +let sqliteDependency: Package.Dependency = isAndroid + ? .package( + url: "https://github.com/stephencelis/SQLite.swift.git", + from: "0.16.0", + traits: ["SQLiteSwiftCSQLite"] + ) + : .package( + url: "https://github.com/stephencelis/SQLite.swift.git", + from: "0.16.0" + ) let package = Package( name: "CoreModel-SQLite", @@ -20,10 +36,7 @@ let package = Package( url: "https://github.com/PureSwift/CoreModel", from: "2.6.3" ), - .package( - url: "https://github.com/stephencelis/SQLite.swift.git", - from: "0.16.0" - ) + sqliteDependency ], targets: [ .target(