Update Kotlin and KSP #2342
This file contains 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: Build Library | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
branches: [main] | |
workflow_dispatch: | |
inputs: | |
triggerRelease: | |
description: 'Release Build' | |
required: false | |
type: boolean | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
ORG_GRADLE_PROJECT_releaseBuild: ${{ github.event_name == 'workflow_dispatch' && inputs.triggerRelease && github.ref == 'refs/heads/main' }} | |
ORG_GRADLE_PROJECT_versionSuffix: ${{ (github.event_name == 'pull_request' && format('PR{0}', github.event.pull_request.number)) || '' }} | |
jobs: | |
build: | |
name: Build | |
# run on mac so iOS compilation is executed as well | |
runs-on: macos-14 | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Setup Java JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: "temurin" | |
java-version-file: ".java-version" | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
- name: Cache Konan | |
uses: actions/cache@v4 | |
with: | |
path: ~/.konan | |
key: ${{ runner.os }}-konan-${{ github.sha }} | |
restore-keys: ${{ runner.os }}-konan- | |
- name: Build | |
run: ./gradlew assemble --scan | |
check_metadata: | |
name: Check Publication Metadata | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Setup Java JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: "temurin" | |
java-version-file: ".java-version" | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
- name: Cache Konan | |
uses: actions/cache@v4 | |
with: | |
path: ~/.konan | |
key: ${{ runner.os }}-konan-${{ github.sha }} | |
restore-keys: ${{ runner.os }}-konan- | |
- name: Check Publication Metadata | |
run: ./gradlew generateMetadataFileForKotlinMultiplatformPublication --scan | |
ktlint: | |
name: Ktlint | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Setup Java JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: "temurin" | |
java-version-file: ".java-version" | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
- name: Cache Konan | |
uses: actions/cache@v4 | |
with: | |
path: ~/.konan | |
key: ${{ runner.os }}-konan-${{ github.sha }} | |
restore-keys: ${{ runner.os }}-konan- | |
- name: Ktlint | |
run: ./gradlew ktlintCheck --scan | |
- name: Archive ktlint results | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ktlint-results | |
path: "**/build/reports/ktlint/" | |
lint: | |
name: Lint | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Setup Java JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: "temurin" | |
java-version-file: ".java-version" | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
- name: Cache Konan | |
uses: actions/cache@v4 | |
with: | |
path: ~/.konan | |
key: ${{ runner.os }}-konan-${{ github.sha }} | |
restore-keys: ${{ runner.os }}-konan- | |
- name: Lint | |
run: ./gradlew lint --scan | |
android_tests: | |
name: Android Unit Tests | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Setup Java JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: "temurin" | |
java-version-file: ".java-version" | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
- name: Cache Konan | |
uses: actions/cache@v4 | |
with: | |
path: ~/.konan | |
key: ${{ runner.os }}-konan-${{ github.sha }} | |
restore-keys: ${{ runner.os }}-konan- | |
- name: Cache Maven | |
uses: actions/cache@v4 | |
with: | |
path: ~/.m2/repository | |
key: ${{ runner.os }}-maven-${{ github.sha }} | |
restore-keys: ${{ runner.os }}-maven- | |
- name: Run Android Unit Tests | |
run: ./gradlew test koverXmlReportRelease --scan --no-build-cache | |
- name: Codecov | |
uses: codecov/codecov-action@v5 | |
with: | |
fail_ci_if_error: true | |
token: ${{ secrets.CODECOV_TOKEN }} | |
verbose: true | |
- name: Archive test results | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: android-unit-test-results | |
path: "**/build/reports/tests/" | |
- name: Archive kover results | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: kover-results | |
path: "**/build/reports/kover/" | |
ios_tests: | |
name: iOS Unit Tests | |
runs-on: macos-14 | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Setup Java JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: "temurin" | |
java-version-file: ".java-version" | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
- name: Cache Konan | |
uses: actions/cache@v4 | |
with: | |
path: ~/.konan | |
key: ${{ runner.os }}-konan-${{ github.sha }} | |
restore-keys: ${{ runner.os }}-konan- | |
- name: Run iOS Unit Tests | |
run: ./gradlew iosX64Test iosX64BackgroundTest --scan | |
js_tests: | |
name: JS Unit Tests | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Setup Java JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: "temurin" | |
java-version-file: ".java-version" | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
- name: Cache Konan | |
uses: actions/cache@v4 | |
with: | |
path: ~/.konan | |
key: ${{ runner.os }}-konan-${{ github.sha }} | |
restore-keys: ${{ runner.os }}-konan- | |
- name: Run JS Unit Tests | |
run: ./gradlew jsTest --scan | |
- name: Archive test results | |
if: always() | |
uses: actions/upload-artifact@v4 | |
with: | |
name: js-unit-test-results | |
path: "**/build/reports/tests/" | |
lint_ios_podspec: | |
name: Lint iOS Podspec | |
runs-on: macos-14 | |
if: github.event_name == 'pull_request' | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
- name: Setup Java JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: "temurin" | |
java-version-file: ".java-version" | |
- name: Setup Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
bundler-cache: true | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
- name: Cache Konan | |
uses: actions/cache@v4 | |
with: | |
path: ~/.konan | |
key: ${{ runner.os }}-konan-${{ github.sha }} | |
restore-keys: ${{ runner.os }}-konan- | |
- name: Create podspec | |
run: ./gradlew podspec | |
- name: Lint podspec | |
run: bundle exec pod spec lint *.podspec --allow-warnings --verbose | |
check_version: | |
name: Check Version is Unreleased | |
runs-on: ubuntu-latest | |
outputs: | |
version: ${{ steps.version.outputs.version }} | |
tag: ${{ steps.tag_name.outputs.tag }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Find Version | |
id: version | |
run: grep ^version= gradle.properties >> $GITHUB_OUTPUT | |
- name: Generate Tag Name | |
id: tag_name | |
run: echo tag=$TAG_NAME >> $GITHUB_OUTPUT | |
env: | |
TAG_NAME: v${{ steps.version.outputs.version }} | |
- name: Check if version was already released | |
run: "! git ls-remote -t --exit-code origin $TAG_NAME" | |
env: | |
TAG_NAME: ${{ steps.tag_name.outputs.tag }} | |
tag_release: | |
name: Tag Release & Bump Version | |
runs-on: ubuntu-latest | |
if: github.event_name == 'workflow_dispatch' && inputs.triggerRelease && github.ref == 'refs/heads/main' | |
needs: [ build, check_metadata, ktlint, lint, android_tests, ios_tests, js_tests, check_version ] | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Create Tag | |
env: | |
TAG_NAME: ${{ needs.check_version.outputs.tag }} | |
run: | | |
git tag $TAG_NAME | |
git push origin $TAG_NAME | |
- name: Generate next version | |
id: bump_version | |
uses: actions-ecosystem/action-bump-semver@v1 | |
with: | |
current_version: ${{ needs.check_version.outputs.version }} | |
level: patch | |
- name: Update version for new development | |
run: sed -i "s/version=${{ needs.check_version.outputs.version }}/version=${{ steps.bump_version.outputs.new_version }}/" gradle.properties | |
- name: Create Version Bump Pull Request | |
uses: peter-evans/create-pull-request@v7 | |
with: | |
branch: "versionBump/${{ steps.bump_version.outputs.new_version }}" | |
title: "Bump version after release" | |
commit-message: "Bump version to ${{steps.bump_version.outputs.new_version}}" | |
deploy: | |
name: Publish Library | |
runs-on: ubuntu-latest | |
if: | | |
(github.event_name == 'push' && github.ref == 'refs/heads/main') || | |
(github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'Publish PR SNAPSHOT: Maven')) || | |
(github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main') | |
needs: [ build, check_metadata, ktlint, lint, android_tests, ios_tests, js_tests, check_version ] | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Setup Java JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: "temurin" | |
java-version-file: ".java-version" | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
- name: Publish library | |
run: ./gradlew publish --scan | |
env: | |
ORG_GRADLE_PROJECT_cruGlobalMavenRepositoryUsername: ${{ secrets.JFROG_USERNAME }} | |
ORG_GRADLE_PROJECT_cruGlobalMavenRepositoryPassword: ${{ secrets.JFROG_PASSWORD }} | |
deploy_ios_podspec: | |
name: Publish iOS Podspec | |
runs-on: macos-14 | |
if: | | |
(github.event_name == 'push' && github.ref == 'refs/heads/main') || | |
(github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'Publish PR SNAPSHOT: CocoaPods')) || | |
(github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main') | |
needs: [ build, check_metadata, ktlint, lint, ios_tests, check_version ] | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
- name: Setup Java JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: "temurin" | |
java-version-file: ".java-version" | |
- name: Setup Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
bundler-cache: true | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
- name: Cache Konan | |
uses: actions/cache@v4 | |
with: | |
path: ~/.konan | |
key: ${{ runner.os }}-konan-${{ github.sha }} | |
restore-keys: ${{ runner.os }}-konan- | |
- name: Create podspec | |
run: ./gradlew podspec | |
- name: Install SSH key | |
uses: shimataro/ssh-key-action@v2 | |
with: | |
key: ${{ secrets.SSH_KEY }} | |
known_hosts: ${{ secrets.KNOWN_HOSTS }} | |
- name: Add CruGlobal CocoaPods Repo | |
run: bundle exec pod repo add CruGlobal git@github.com:CruGlobal/cocoapods-specs.git | |
- name: Push podspec | |
run: bundle exec pod repo push CruGlobal *.podspec --allow-warnings | |
deploy_npm: | |
name: Publish npm package | |
runs-on: ubuntu-latest | |
if: | | |
(github.event_name == 'push' && github.ref == 'refs/heads/main') || | |
(github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'Publish PR SNAPSHOT: npm')) || | |
(github.event_name == 'workflow_dispatch' && inputs.triggerRelease && github.ref == 'refs/heads/main') | |
needs: [ build, check_metadata, ktlint, lint, js_tests, check_version ] | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup Java JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: "temurin" | |
java-version-file: ".java-version" | |
- name: Setup Gradle | |
uses: gradle/actions/setup-gradle@v4 | |
- name: Publish package | |
run: ./gradlew :publishing:npm:publish --scan | |
env: | |
ORG_GRADLE_PROJECT_npmPublishRegistryNpmjsAuthToken: ${{ secrets.NPM_PUBLISH_TOKEN }} | |
ORG_GRADLE_PROJECT_npmPublishTag: ${{ (github.event_name == 'pull_request' && format('pr{0}', github.event.pull_request.number)) || '' }} |