diff --git a/.github/workflows/ios-kmp-selfhosted-test.yml b/.github/workflows/ios-kmp-selfhosted-test.yml index aa32f9a..f3beb5f 100644 --- a/.github/workflows/ios-kmp-selfhosted-test.yml +++ b/.github/workflows/ios-kmp-selfhosted-test.yml @@ -46,6 +46,11 @@ on: description: "Path to directory containing Fastfile. If not specified, uses iosApp. Example: iosApp/appA" type: string required: false + kotlin_native_cache: + description: "Whether to cache the Kotlin/Native compiler caches of library dependencies (~/.konan/.../klib/cache) between runs. A debug framework link on a fresh runner otherwise rebuilds them every time, which can take several minutes for large dependency graphs like Compose Multiplatform." + type: boolean + required: false + default: true secrets: GRADLE_CACHE_ENCRYPTION_KEY: @@ -74,6 +79,16 @@ jobs: uses: gradle/actions/setup-gradle@v5 with: cache-encryption-key: ${{ secrets.GRADLE_CACHE_ENCRYPTION_KEY }} + # Only the caches of library dependencies (`*-user*`) are built during the link; the compiler, + # platform klibs and their caches come with the Kotlin/Native distribution. Library caches live in + # per-version folders, so the key changes with libs.versions.toml and has no restore-keys fallback: + # a partial restore would carry outdated library versions into every new cache. + - name: Cache Kotlin/Native library caches + if: ${{ inputs.kotlin_native_cache }} + uses: actions/cache@v6 + with: + path: ~/.konan/kotlin-native-prebuilt-*/klib/cache/*-user* + key: konan-klib-cache-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('**/libs.versions.toml') }} - name: Build KMP Package if: ${{ inputs.kmp_swift_package_integration }} env: diff --git a/CLAUDE.md b/CLAUDE.md index 7968b0c..e8d8820 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -137,6 +137,9 @@ All iOS actions support: ## Important Conventions +### Public Repository +This repository is public and open source. Never mention internal or client projects (repository names, app names, bundle IDs, ticket keys), internal discussions or decisions, or private infrastructure details anywhere they end up public: code, comments, commit messages, PR titles and descriptions, issues and release notes. Describe the situation generically instead, e.g. "a Compose Multiplatform project with ~130 library dependencies" rather than the project's name. + ### Secrets Management - iOS workflows require App Store Connect API keys and Match password - Android workflows require keystore passwords and Google Play service account JSON