Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
0747b29
Add KMP/CMP migration design spec (#13)
michelutke Jul 16, 2026
1c5201d
Add M1 implementation plan for KMP migration
michelutke Jul 16, 2026
4100ce1
Add updraft-core KMP module scaffolding
michelutke Jul 16, 2026
5036440
Move API models to updraft-core commonMain, add FeedbackType
michelutke Jul 16, 2026
0deb8b8
Add UpdraftSettings and LogLevel to commonMain
michelutke Jul 16, 2026
9048fdf
Add KeyValueStore and AppInfo expect/actual with startup initializer
michelutke Jul 16, 2026
f176445
Add Ktor-based UpdraftApi with multipart feedback upload
michelutke Jul 16, 2026
cbb0d6a
Fix upload progress emission and cancellation handling in UpdraftApi
michelutke Jul 16, 2026
6359720
Port interactors to commonMain against UpdraftApiContract
michelutke Jul 16, 2026
34214de
Add platform seams: shake, screenshot, url, foreground observer
michelutke Jul 16, 2026
e16a7a7
Remove lifecycle observer in ShakeDetector.stop to prevent re-arming
michelutke Jul 16, 2026
44b9996
Add Updraft entry object with event flow and controller
michelutke Jul 16, 2026
4dfc442
Restore feedback hint on every launch for legacy parity
michelutke Jul 16, 2026
739d0a9
Add updraft-ui-compose CMP module with migrated strings
michelutke Jul 16, 2026
c14042a
Add DrawingController and DrawingCanvas (FreeDrawView port)
michelutke Jul 16, 2026
ea7e8d5
Track stroke pointer id and end path on gesture cancellation
michelutke Jul 16, 2026
4641d9e
Add Compose feedback screen, dialogs, and event host
michelutke Jul 16, 2026
dd72439
Rewrap updraft-sdk as Compose host over core + ui-compose
michelutke Jul 16, 2026
ba6fc43
Use framework theme for feedback activity to keep SDK self-contained
michelutke Jul 16, 2026
feebfb5
Port sample app to Updraft.start API
michelutke Jul 16, 2026
dd08294
Bump to 2.0.0, document KMP/CMP setup and 1.x migration
michelutke Jul 16, 2026
177f7fc
Map annotation strokes to bitmap space and localize feedback form
michelutke Jul 16, 2026
b6c2538
Fail feedback upload on HTTP errors, survive rotation, document UI hooks
michelutke Jul 16, 2026
187fd2b
Document M1 status, release checklist, and follow-ups
michelutke Jul 16, 2026
8606a51
Add M2 implementation plan (iOS support)
michelutke Jul 20, 2026
622d270
Add iOS targets, Ktor Darwin, and KeyValueStore/AppInfo actuals to up…
michelutke Jul 20, 2026
7165335
Add iOS actuals for shake, screenshot, url, and foreground observer
michelutke Jul 20, 2026
0ac5f2d
Add iOS targets and Skia image codec to updraft-ui-compose
michelutke Jul 20, 2026
25d39ab
Add iOS feedback view controller and event auto-wiring
michelutke Jul 21, 2026
a30d491
Replace app/ with CMP sample (androidApp + iosApp), raise Gradle heap…
michelutke Jul 21, 2026
9b6bb37
Add XCFramework export for updraft-core
michelutke Jul 21, 2026
c7d518f
Extend CI to feature branches with iOS job, publish all modules from …
michelutke Jul 21, 2026
2eca502
Document iOS setup and Swift integration
michelutke Jul 21, 2026
ad33ac9
Use macos-15 runners for Xcode 16 project format
michelutke Jul 21, 2026
158a888
Add CADisableMinimumFrameDurationOnPhone to fix Compose iOS launch crash
michelutke Jul 21, 2026
0b09033
Update M2 status doc: macos-15, verification findings, resolved M1 re…
michelutke Jul 21, 2026
f217b02
Load sample Updraft keys from local.properties instead of hardcoding
michelutke Jul 22, 2026
ec8edd2
Fix runtime crash: apply Compose compiler to updraft-sdk, wire sample…
michelutke Jul 22, 2026
ec1c9cf
Restyle Compose feedback UI to match legacy design
michelutke Jul 22, 2026
9c91dd2
Restyle dropdown menu white and point sample at production API
michelutke Jul 22, 2026
e15cc56
Send device_uudid and navigation_stack with feedback, drop dead stagi…
michelutke Jul 22, 2026
aec7f37
Add pluggable navigation stack provider for feedback uploads
michelutke Jul 22, 2026
5e00061
Make navigation stack reporting optional via sendNavigationStack setting
michelutke Jul 22, 2026
2716a33
Trigger iOS feedback on user screenshot like the legacy SDK
michelutke Jul 22, 2026
1a48775
Catch iOS shake via UIWindow motionEnded hook
michelutke Jul 22, 2026
03635c0
Document device verification round: bugs fixed, features added, open …
michelutke Jul 22, 2026
68817e7
Bump sample to versionCode 6 (uploaded to Updraft for update-dialog t…
michelutke Jul 22, 2026
ff6dfad
Document update-feature verification: Android E2E, iOS by construction
michelutke Jul 22, 2026
1700c40
Rebrand repository as the multiplatform Updraft SDK
michelutke Jul 22, 2026
6148641
Add CMP migration overview: before/after, library map, architecture
michelutke Jul 22, 2026
0fd9d24
Optimize CI: concurrency cancel, konan cache, setup-gradle, docs path…
michelutke Jul 22, 2026
dfcf6b0
Harden publish workflow: verify before publishing, guard duplicate ve…
michelutke Jul 22, 2026
5f47e69
Document decision: Compose UI ships for Views-based Android apps too
michelutke Jul 22, 2026
459ae0f
Bump CI and publish workflows to JDK 21
michelutke Jul 22, 2026
d2f1d71
Document Kotlin version requirements per consumer type
michelutke Jul 22, 2026
f076cfa
Re-enable Loco string sync, targeting shared compose-resources
michelutke Jul 22, 2026
7c10e08
Add AGP 9 upgrade to M3 scope with rationale for deferring past M2
michelutke Jul 22, 2026
d327698
Canonicalize strings via Loco round-trip
michelutke Jul 23, 2026
3f11ae9
Render update-dialog age from create_at as relative time
michelutke Jul 23, 2026
985bb7a
Link AGP 9 migration issue from M3 scope
michelutke Jul 23, 2026
0b3316e
Merge pull request #14 from appswithlove/feature/kmp-migration-m2
michelutke Jul 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 48 additions & 14 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -1,26 +1,60 @@
name: Build
name: CI

on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
branches: [ "main", "feature/**" ]
paths-ignore:
- "**.md"
- "docs/**"

jobs:
build:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
android:
runs-on: ubuntu-latest
timeout-minutes: 25

steps:
- uses: actions/checkout@v3
- name: set up JDK 17
uses: actions/setup-java@v3
- uses: actions/checkout@v4
- name: set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '17'
java-version: '21'
distribution: 'temurin'
cache: gradle
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
with:
validate-wrappers: true

- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Build with Gradle
run: ./gradlew build
run: ./gradlew build

ios:
runs-on: macos-15
timeout-minutes: 35

env:
GRADLE_OPTS: -Dorg.gradle.jvmargs=-Xmx3g -Dkotlin.daemon.jvmargs=-Xmx3g

steps:
- uses: actions/checkout@v4
- name: set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
- name: Cache Kotlin/Native toolchain
uses: actions/cache@v4
with:
path: ~/.konan
key: konan-${{ runner.os }}-${{ hashFiles('gradle/libs.versions.toml') }}
restore-keys: konan-${{ runner.os }}-

- name: Build and test with Gradle
run: ./gradlew :updraft-core:iosSimulatorArm64Test :updraft-ui-compose:iosSimulatorArm64Test :updraft-core:assembleUpdraftCoreXCFramework
- name: Build iOS sample app
run: xcodebuild -project sample/iosApp/iosApp.xcodeproj -scheme iosApp -sdk iphonesimulator -configuration Debug build CODE_SIGNING_ALLOWED=NO
58 changes: 40 additions & 18 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,44 +4,66 @@ on:
push:
branches: [ production ]

concurrency:
group: publish
cancel-in-progress: false

jobs:
publish:
runs-on: ubuntu-latest
runs-on: macos-15
timeout-minutes: 60
environment: maven-central
permissions:
contents: write
env:
GRADLE_OPTS: -Dorg.gradle.jvmargs=-Xmx3g -Dkotlin.daemon.jvmargs=-Xmx3g
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: set up JDK 21
uses: actions/setup-java@v3
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: gradle
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v4
with:
validate-wrappers: true
- name: Cache Kotlin/Native toolchain
uses: actions/cache@v4
with:
path: ~/.konan
key: konan-${{ runner.os }}-${{ hashFiles('gradle/libs.versions.toml') }}
restore-keys: konan-${{ runner.os }}-

- name: Extract version from gradle.properties
id: get_version
run: echo "version=$(grep VERSION_NAME updraft-sdk/gradle.properties | cut -d'=' -f2)" >> $GITHUB_OUTPUT

- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Fail if version already released
run: |
if git ls-remote --tags origin "refs/tags/${{ steps.get_version.outputs.version }}" | grep -q .; then
echo "::error::Version ${{ steps.get_version.outputs.version }} is already tagged — bump VERSION_NAME before publishing."
exit 1
fi

- name: Verify (build + all tests, both platforms)
run: ./gradlew build iosSimulatorArm64Test

- name: Publish to Maven Central Portal
run: ./gradlew :updraft-sdk:publish --no-configuration-cache
run: ./gradlew publishAllPublicationsToMavenCentralRepository --no-configuration-cache
env:
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_NEXUS_USERNAME }}
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_NEXUS_PASSWORD }}
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_PRIVATE_KEY }}
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_PASSWORD }}

- name: Extract version from gradle.properties
id: get_version
run: echo "version=$(grep VERSION_NAME updraft-sdk/gradle.properties | cut -d'=' -f2)" >> $GITHUB_OUTPUT

- name: Create GitHub Release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.get_version.outputs.version }}
release_name: ${{ steps.get_version.outputs.version }}
name: ${{ steps.get_version.outputs.version }}
body: |
Automated release ${{ steps.get_version.outputs.version }}

Published to:
- Maven Central
draft: false
prerelease: false
Loading
Loading