diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 603087e0..d6a80cce 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -8,15 +8,40 @@ on: branches: - '*' +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + jobs: - Tests: + test-linux: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v5 # For browser tests - uses: browser-actions/setup-chrome@v2 - name: Run checks run: ./gradlew check --no-daemon --stacktrace + + test-mac: + runs-on: macos-latest + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: Set up JDK 17 + uses: actions/setup-java@v5 + with: + java-version: 17 + distribution: 'zulu' + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v5 + + - name: Run checks + run: ./gradlew check --no-daemon --stacktrace diff --git a/.github/workflows/release_please.yaml b/.github/workflows/release_please.yaml index 5b3ad12c..1c903c9c 100644 --- a/.github/workflows/release_please.yaml +++ b/.github/workflows/release_please.yaml @@ -29,21 +29,13 @@ jobs: kotlin-release: needs: release-please - runs-on: ubuntu-latest + # Run on macOS to ensure we can publish iOS/Mac targets AND Linux/Android targets (via cross-compilation). + # This ensures a single consistent root module file is published. + runs-on: macos-latest if: ${{ needs.release-please.outputs.release_created }} steps: # The logic below handles the github release: - - name: Cache Gradle and wrapper - uses: actions/cache@v3 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} - restore-keys: | - ${{ runner.os }}-gradle- - - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - name: Configure GPG Key run: | @@ -56,7 +48,7 @@ jobs: run: | mkdir -p ~/.gradle/ echo "signing.keyId=08C5EC5C" >> ~/.gradle/gradle.properties - echo "signing.secretKeyRingFile=/home/runner/.gnupg/secring.gpg" >> ~/.gradle/gradle.properties + echo "signing.secretKeyRingFile=$HOME/.gnupg/secring.gpg" >> ~/.gradle/gradle.properties echo "signing.password=$GPG_SIGNING_KEY_PASSWORD" >> ~/.gradle/gradle.properties env: GPG_SIGNING_KEY_ID: ${{ secrets.GPG_SIGNING_KEY_ID }} @@ -68,6 +60,9 @@ jobs: java-version: 17 distribution: 'zulu' + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v5 + - name: Grant Permission for Gradlew to Execute run: chmod +x gradlew @@ -75,6 +70,7 @@ jobs: env: CENTRAL_USERNAME: ${{ secrets.CENTRAL_USERNAME }} CENTRAL_PASSWORD: ${{ secrets.CENTRAL_PASSWORD }} + run: ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository --no-daemon --stacktrace - name: Clean up signing secrets diff --git a/README.md b/README.md index 00539473..90c2b349 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,7 @@ The following [Kotlin Multiplatform Targets](https://www.jetbrains.com/help/kotl | ✅ | Android | SDK 21+ | | ✅ | JVM | JDK 11+ | | ✅ | Native | Linux x64 | +| ✅ | iOS | x64, Arm64, SimulatorArm64 | | ❌ | Native | [Other native targets](https://kotlinlang.org/docs/native-target-support.html) | | ✅ | Javascript (Node.js) | | | ✅ | Javascript (Browser) | | diff --git a/kotlin-sdk/build.gradle.kts b/kotlin-sdk/build.gradle.kts index 64fc263e..e8d52602 100644 --- a/kotlin-sdk/build.gradle.kts +++ b/kotlin-sdk/build.gradle.kts @@ -40,6 +40,15 @@ kotlin { } } linuxX64 {} + listOf( + iosX64(), + iosArm64(), + iosSimulatorArm64() + ).forEach { + it.binaries.framework { + baseName = "OpenFeature" + } + } js { nodejs {} browser {