Skip to content
sysout.dev

Standalone shared library migration

The owner chose to move cross-app libraries out of Homey while setting up Maven publication. sysout-dev/sysout-platform/sysout-platform now owns all four modules; Homey and Little Bloomers become consumers. This supersedes the earlier plan to publish libraries from Homey’s app project and its custom Python uploader. Merging and library/Play publication remain with the owner.

Repositories and scope

  • Producer: sysout-dev/sysout-platform/sysout-platform, project 87989353. Extraction MR 1, revision a6e93065ad40016e291c04c7e6300c463b20f87825551f344453c50a26cca1e7.

  • Registry: https://gitlab.com/api/v4/projects/87989353/packages/maven.

  • Shared execution: sysout-dev/sysout-platform/sysout-gitlab-ci, MR 3, pinned revision 2e5b8310147d0ac7baf4deb04283d0e056ac86828b7deb51da762ea18ac22113.

  • Homey consumer: project 60144767, MR 12.

  • Little Bloomers consumer: project 85045545; its 0.3 release draft is preserved.

The producer is cloned at C:/Data/Projects/Sysout/Projects/sysout-platform on codex/extract-shared-libraries. Its initial library source is Homey’s ready 1.5 checkpoint 8c0d69a5e561744c0759a8045f2dc6d600ad3869. Ten relevant module commits retain their authors/dates/messages through Git export/import. The new repository uses SHA-256 rather than Homey’s SHA-1, so its history-map document records the converted commit IDs. Existing new-repository security configuration/history and the original Homey checkout are preserved.

Library Initial publication coordinate

Meal domain

dev.sysout.homey:meal-domain:0.4.0

Meal data

dev.sysout.homey:meal-data:0.4.0

Recipe catalog

dev.sysout.homey:meal-catalog:0.4.0

Compose helpers

dev.sysout.tech:so-compose:0.1.0

Packages and coordinates retain their historical names for API compatibility. Source ownership is independent of those names. All 46 source/test files and all compiled library class bytes match the reviewed extraction baseline. The current Homey source includes its revised shared headers/chip controls; it is not rebuilt from Little Bloomers' older workstation cache. Recipe header interaction already passed the earlier signed-candidate smoke test.

On October 23, 2026 the owner explicitly approved adopting the current Homey header for Little Bloomers 0.3. Recipe Details' Ingredients section collapse and expand passed on the signed candidate on LittleBloomers_API_36 (API 36). The header-adoption decision is closed; live registry delivery remains open.

Standard Gradle publication

The standalone build includes only the four libraries. Their existing maven-publish publications generate binaries, sources, POM and Gradle metadata. gradle/maven-publishing.gradle.kts supplies the new registry and credentials. Root tasks aggregate verification and standard GitLab/Maven Local publication. There is no staging manifest, custom uploader, version-existence check or package download/hash framework. Snapshot and qualified versions are supported normally; GitLab’s group package policy controls duplicate releases and snapshot exceptions.

Shared CI owns setup, workflow guards and commands. The producer supplies only an include adapter and its aggregate task names. Normal verification runs in one library job alongside retained security scans. A protected-main web pipeline with PIPELINE_ACTION=publish exposes a manual job that verifies before Gradle uploads. It neither builds/tags an app nor publishes to Play.

Consumers and first-publication sequence

Homey’s migration removes its four included source modules and replaces them with Maven dependencies; its app remains 1.5/code 6. Both apps resolve the two Sysout groups exclusively from the new project endpoint. CI uses CI_JOB_TOKEN; local private-registry builds can use the user Gradle property gitLabPrivateToken. No secret values belong in tracked files or logs.

For local integration only, each consumer permits an explicit -PsysoutMavenRepository=file:///absolute/isolated/repository; CI’s -Pci rejects the override. The producer populates that directory with normal Maven Local publication using -Dmaven.repo.local. There is no normal local Maven fallback.

  1. Review/merge shared CI MR 3, then the standalone platform extraction. Keep history-preserving merges for the platform import. Automatic draft pipelines are skipped to conserve the owner’s limited GitLab minutes.

  2. Inspect the new producer’s Maven duplicate-package policy and allow Homey (60144767) and Little Bloomers (85045545) package reads through its inbound job-token allowlist. Retain normal operator/project access requirements.

  3. Start the platform’s protected-main web PIPELINE_ACTION=publish pipeline and approve publish_maven_libraries. Gradle runs tests/lint before publication.

  4. Once packages are available, merge Homey’s consumer migration and run ordinary app verification. Resolve Little Bloomers against the new registry before completing its release-preparation commit/push and fresh GitLab verification.

  5. The owner performs application merging and Play publication. Earlier signed Little Bloomers 0.2-to-0.3 evidence is preserved; it is not proof of this new registry’s availability or the GitLab consumer’s permissions.

Local evidence and remaining external checks

The standalone build passes its five existing unit tests and Android release lint with zero errors and five warnings. Domain and Compose modules currently have no unit-test sources. Standard isolated Maven Local publication succeeds. Shared CI has 17 passing local guard/toolchain/compatibility tests. Homey’s 66 app tests, debug lint (zero errors, 37 warnings), debug assembly and release/R8 assembly pass against those publications. Little Bloomers' five app/shared tests, debug lint (zero errors, 52 warnings), debug assembly and version-tag guard also pass. Current evidence lives in artifacts/validation/2026-10-23-platform-extraction/; earlier signed/runtime evidence remains in 2026-10-23-registry-adoption/.

October 23 publication follow-up

All three infrastructure merge requests are merged. Platform pipeline 2980144502 passed tests/lint, security scans and all four standard Gradle GitLab publication tasks. Homey pipeline 2980307462 then passed lint, unit tests and debug assembly on the merged consumer commit b6843f24827551167281ba79e5a2b84db81efd31.

The initial publication and Homey consumer gates are complete. Little Bloomers' local build has also resolved the real private registry and passed five tests, lint (zero errors, 53 warnings), signed APK/AAB generation, fresh signed install and a data-preserving signed 0.2-to-0.3 upgrade. Recipe Details' adopted header passes collapse/expand. Its own job-token access will be established by the fresh app verification pipeline after the preparation push. Local release evidence is in artifacts/validation/2026-10-23-live-registry/. The app’s existing signing/Play setup remains owner-confirmed. The owner retains application merge/publication.

References: GitLab Maven and Gradle publication.

Android runner follow-up

Little Bloomers' first own CI run stopped before Gradle on the pinned image’s non-root checkout permissions. Its four adapters now additionally adopt shared revision abe74c44d3e79fbc1ef709d3ea5c3c89cb05ce5e94d5cfeedebb212a5dac45c5 from MR 4. The shared Android setup uses Docker UID 0 and installs missing declared SDK packages through sdkmanager. The local SDK/toolchain/workflow suite has 23 passing tests. The app selects the locally validated Build Tools 36.1.0. No app behavior or signed-artifact bytes change. Merge shared MR 4 without squashing before the app; existing platform/Homey consumers keep their prior pins.