KMPCharts/.github/workflows/release.yml
Trentin Davide 07197ed8df
Some checks are pending
CI / build (push) Waiting to run
chore(portfolio): v1.0.0 prep — docs, CI, demos
Autonomous portfolio prep batch. All gates green: 207 tests pass on
iosSimulatorArm64Test, assembleRelease green, apiCheck green, app builds.

Docs:
- CHANGELOG.md (Keep-a-Changelog, retroactive v0.1-v0.5)
- CONTRIBUTING.md (build + style + PR workflow + perf rules)
- chart-realtime/README.md rewrite for v0.5.0 API surface
- docs/PERFORMANCE.md (LoD perf table, alloc budget, memory budget,
  stability report, threading model)

CI (.github/):
- workflows/ci.yml — macos-latest, JDK 21, konan cache, full gate
- workflows/release.yml — tag-triggered, GitHub release with XCFramework
  + AAR; Maven Central as commented TODO (needs OSSRH + GPG secrets)
- dependabot.yml — weekly gradle + actions updates
- pull_request_template.md + 2 issue templates (bug, feature)

Android demo polish:
- DemoScreen + ControlPanel (Material3 surface)
- Sample rate slider (10..200Hz), 1-6 signal count, per-signal waveform
  picker (sine/square/triangle/noise), window seconds, LoD picker, Y
  label mode, Y formatter, interaction toggle, theme switch, status chips
- Single producer coroutine (cleaner crosshair readout, easier rate
  accounting)
- SignalGenerator + WaveformType + DemoConfig + PushCounter

iOS demo scaffold (samples/ios/ChartRealtimeDemo/):
- SPM Package.swift with local binaryTarget pointing to
  chart-realtime/build/XCFrameworks/debug/ChartRealtime.xcframework
- DemoApp.swift + DemoView.swift (smoke test confirming Kotlin types
  accessible from Swift)
- README documents the ComposeUIViewController shim needed in
  chart-realtime/src/iosMain/ for full SwiftUI hosting (deferred to
  v1.0.0 T1)
- xcodebuild against iOS Simulator builds green

Debt:
- gradle.properties: removed kotlin.internal.klibs.non-packed=false
  (Compose-MP 1.11.0 final no longer needs the bypass; apiCheck +
  native compile + 207 tests still green)
- 8 remaining deprecation warnings tied to com.android.library + KMP
  plugin combo; clearing them requires migration to
  com.android.kotlin.multiplatform.library 9.2.0 which forces ABI
  baseline regen + Maven publish restructure + XCFramework hierarchy
  expansion. Deferred as dedicated ticket.

Skipped (need user):
- CODE_OF_CONDUCT.md (content classifier blocks Contributor Covenant
  verbatim)
- Maven Central T1 (Sonatype + GPG)
- Benchmark vs competitors T4 (methodology + Maven coords)
- Logo/banner/GIF T7 (design assets)
- Tag + GitHub release T10 (rename pending)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-22 10:54:26 +02:00

73 lines
2.7 KiB
YAML

name: Release
on:
push:
tags:
- 'v*'
jobs:
release:
runs-on: macos-latest
timeout-minutes: 45
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # tags + history for changelog
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
- uses: gradle/actions/setup-gradle@v4
- name: Cache Kotlin/Native (konan)
uses: actions/cache@v4
with:
path: ~/.konan
key: konan-${{ runner.os }}-${{ hashFiles('gradle/libs.versions.toml', 'chart-realtime/build.gradle.kts') }}
restore-keys: konan-${{ runner.os }}-
- name: Full test gate
run: ./gradlew :chart-realtime:iosSimulatorArm64Test :chart-realtime:apiCheck :app:assembleDebug --stacktrace
- name: Build release artifacts
run: ./gradlew :chart-realtime:assembleRelease :chart-realtime:assembleChartRealtimeReleaseXCFramework --stacktrace
- name: Zip XCFramework
run: |
cd chart-realtime/build/XCFrameworks/release
zip -r ChartRealtime.xcframework.zip ChartRealtime.xcframework
ls -lh ChartRealtime.xcframework.zip
- name: Extract release notes from CHANGELOG
id: changelog
run: |
TAG_VERSION="${GITHUB_REF_NAME#v}"
awk -v ver="$TAG_VERSION" '
$0 ~ "^## \\["ver"\\]" {flag=1; next}
flag && /^## \[/ {exit}
flag {print}
' CHANGELOG.md > release-notes.md
echo "release-notes-path=release-notes.md" >> $GITHUB_OUTPUT
- name: Create GitHub release
uses: softprops/action-gh-release@v2
with:
body_path: release-notes.md
files: |
chart-realtime/build/XCFrameworks/release/ChartRealtime.xcframework.zip
chart-realtime/build/outputs/aar/chart-realtime-release.aar
draft: false
prerelease: ${{ contains(github.ref, '-SNAPSHOT') || contains(github.ref, '-rc') || contains(github.ref, '-beta') || contains(github.ref, '-alpha') }}
# TODO: Maven Central publish (requires OSSRH_USERNAME, OSSRH_PASSWORD, GPG_SECRET_KEY, GPG_PASSPHRASE)
# - name: Publish to Maven Central
# env:
# ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.OSSRH_USERNAME }}
# ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.OSSRH_PASSWORD }}
# ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_SECRET_KEY }}
# ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.GPG_PASSPHRASE }}
# run: ./gradlew publishAndReleaseToMavenCentral --no-configuration-cache