Skip to content

feat(release): add protected prerelease pipeline - #179

Merged
veryCrunchy merged 2 commits into
mainfrom
feat/100-prerelease-pipeline
Jul 24, 2026
Merged

feat(release): add protected prerelease pipeline#179
veryCrunchy merged 2 commits into
mainfrom
feat/100-prerelease-pipeline

Conversation

@veryCrunchy

Copy link
Copy Markdown
Member

Summary

  • centralize the Android and desktop prerelease version
  • add a protected workflow for signed Android and native desktop artifacts
  • enforce prerelease-only versions, matching tags, checksums, and update metadata
  • add a dedicated changelog, per-release notes, and a release approval checklist

Validation

  • bash tools/test-prerelease-version.sh
  • bash tools/verify-prerelease-version.sh v0.1.0-alpha.1
  • bash tools/check-repository.sh
  • ./gradlew --no-daemon :androidApp:compileDebugKotlin :ui:compileKotlinDesktop
  • signed release APK and AAB assembly and signature verification were validated locally

Publication status

The workflow deliberately blocks publishing while Android release lint reports incompatible Kotlin metadata. Issue #178 tracks that tooling blocker. No prerelease tag should be created until it is resolved.

Closes #100

@veryCrunchy
veryCrunchy marked this pull request as ready for review July 24, 2026 20:23
Copilot AI review requested due to automatic review settings July 24, 2026 20:23

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a protected prerelease release process that centralizes versioning in gradle.properties, adds CI guards for prerelease-only tags/versions, and publishes signed Android + native desktop artifacts with checksums and update metadata.

Changes:

  • Centralizes Android versionName/versionCode and desktop packageVersion via Gradle properties, plus scripts to validate prerelease version constraints.
  • Adds a protected GitHub Actions workflow to build/test tagged prereleases, assemble signed Android artifacts, build native desktop packages on native runners, and publish a GitHub prerelease with checksums + update metadata.
  • Adds release policy documentation, a prerelease checklist, and initial release notes/changelog scaffolding.

Reviewed changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
ui/build.gradle.kts Reads desktop package version from gradle.properties.
androidApp/build.gradle.kts Reads Android version from gradle.properties and adds guarded release signing + validation task.
gradle.properties Adds canonical prerelease version properties (ncVersion*).
tools/verify-prerelease-version.sh Validates prerelease-only versions, deterministic versionCode, and tag matching.
tools/test-prerelease-version.sh Adds a fixture-based test harness for prerelease validation.
.github/workflows/prerelease.yml New protected prerelease workflow that builds, signs, verifies, checksums, and publishes artifacts.
release/android-signing-certificate.sha256 Pins expected Android signing certificate fingerprint for verification.
docs/releases.md Documents prerelease version policy and release steps.
docs/prerelease-checklist.md Adds approval checklist for protected prerelease environment.
docs/release-notes/0.1.0-alpha.1.md Adds initial prerelease notes template/content.
CHANGELOG.md Adds changelog scaffolding intended for prerelease process.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +37 to +46
signingConfigs {
if (releaseKeystorePath != null) {
create("release") {
storeFile = file(releaseKeystorePath)
storePassword = providers.environmentVariable("NC_ANDROID_KEYSTORE_PASSWORD").get()
keyAlias = providers.environmentVariable("NC_ANDROID_KEY_ALIAS").get()
keyPassword = providers.environmentVariable("NC_ANDROID_KEY_PASSWORD").get()
}
}
}
Comment thread CHANGELOG.md
Comment on lines +12 to +13
### Added

@veryCrunchy
veryCrunchy merged commit c8aa895 into main Jul 24, 2026
3 checks passed
@veryCrunchy veryCrunchy added this to the 1.0 Release readiness milestone Jul 26, 2026
@veryCrunchy veryCrunchy added priority:P0 Required for a trustworthy mobile replacement or prevents data loss area:release Builds, CI, security, packaging, and releases type:feature New product capability platform:android Android-specific implementation or validation platform:desktop Desktop-specific implementation or validation labels Jul 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:release Builds, CI, security, packaging, and releases platform:android Android-specific implementation or validation platform:desktop Desktop-specific implementation or validation priority:P0 Required for a trustworthy mobile replacement or prevents data loss type:feature New product capability

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

[RELEASE-001] Pre-release checklist

2 participants