[tvOS] Publish dated dev builds to a Reposilite repository - #20
Merged
Merged
Conversation
Adds infrastructure to publish intermittent development builds of the fork's seven libraries to a self-hosted Reposilite server, without violating the policy that released coordinates carry exact JetBrains versions. The implementation uses a version scheme of exact JetBrains version plus a dated qualifier (e.g. 1.12.0-dev.20260907.1) for immutable release storage. This avoids snapshot mutability that would leak into internal POM edges and avoids cache poisoning from republishing to a dev repository. New Gradle wiring (publishComposeJbToRemote in mpp/build.gradle.kts) targets a named remote repository that MavenUploadHelper declares when publish.maven.url or MAVEN_URL is set, with credentials from MAVEN_USERNAME and MAVEN_PASSWORD environment variables. Signing is skipped for dev builds by passing an empty publish.signing.key, leaving the Central release flow unchanged. For http:// URLs, the named Remote sets isAllowInsecureProtocol to opt into plain HTTP access, since Gradle rejects plain HTTP repositories by default; HTTPS URLs are unaffected, and plain HTTP deployment is acceptable only on a trusted LAN. New scripts: - scripts/tvos-versions.sh: single source of library version pins and the LIBRARIES list, sourced by publish-tvos-fork.sh (updated to pick up pending pins: Compose 1.12.0, Material3 1.12.0-alpha03, Navigation 2.10.0-alpha02) and by the new Reposilite script - scripts/publish-tvos-fork-reposilite.sh: environment-configured publishing with dev version auto-selection, mavenLocal rehearsal, closure audit, remote publish, and per-library verification with a consumer snippet - scripts/audit-tvos-closure.py: enhanced to look up library twins on Maven Central before deciding redirect coverage (COVERED-BY-REDIRECT vs. WARN vs. FAIL), reducing false positives from local cache leftovers Documentation added to ai-skills/publish-tvos-fork/SKILL.md.
Consumer snippets now include credentials(PasswordCredentials::class) plus the tvosDevUsername/tvosDevPassword property names, since the Reposilite repo requires auth for reads too. Also document the 1.12.0-dev.+ dynamic mapping option and Gradle's 24-hour dynamic-version cache. Claude-Session: https://claude.ai/code/session_01Mn1e6xuy5wwfz5E27HdXST
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
The fork releases to Maven Central with exact JetBrains version
coordinates. There is a need to publish intermittent development builds
without violating this policy.
Snapshots were rejected because they are mutable and would leak into
internal POM edges. Republishing exact versions to a dev repository was
rejected because it would poison local Gradle caches with stale entries.
A solution is needed that uses distinct version identifiers for dev
builds while preserving the principle that released coordinates carry
exact JetBrains versions.
Change
Adds a Reposilite publishing flow with dated version qualifiers
(e.g. 1.12.0-dev.20260907.1) published to an immutable releases
repository.
mpp/build.gradle.kts: New Gradle task
publishComposeJbToRemotetargets a named
Remoterepository declared by MavenUploadHelper whenpublish.maven.urlorMAVEN_URLis set. Credentials come fromMAVEN_USERNAMEandMAVEN_PASSWORD. Signing is skipped for devbuilds (empty
publish.signing.key); Central releases remainunchanged. For http:// URLs, the named Remote sets
isAllowInsecureProtocolto opt into plain HTTP access; HTTPS URLsare unaffected.
scripts/tvos-versions.sh: Single source for library version pins
and the
LIBRARIESlist. Sourced bypublish-tvos-fork.sh(now picksup pending pins: Compose 1.12.0, Material3 1.12.0-alpha03, Navigation
2.10.0-alpha02) and the new Reposilite script.
scripts/publish-tvos-fork-reposilite.sh: Publishes all seven
libraries to Reposilite with dev version auto-selection (probes server
for the first free
<n>per day), mavenLocal rehearsal, closure audit,remote publish, and per-library verification of pom and Gradle module
files. Outputs a consumer snippet showing repository configuration and
versionMappings. Environment-driven:
REPOSILITE_URL,REPOSILITE_USER,REPOSILITE_TOKEN. Flags:--no-suffix(exactversions for release branches),
--skip-local-audit,--dry-run,-h. Token is passed via environment and curl stdin, never on acommand line. Script aborts if an explicitly requested dev version
already exists.
scripts/audit-tvos-closure.py: Enhanced to look up library twins
on Maven Central before deciding redirect coverage. Reports
COVERED-BY-REDIRECT(exact twin on Central),WARN(twin at otherversions), or
FAIL(no twin anywhere). On the current tree thisreduces false positives from 40 to 28
COVERED-BY-REDIRECTand 12WARN. Known gap: lifecycle-runtime-compose 2.9.6, savedstate 1.4.0,and savedstate-compose 1.3.6 have no twins at those versions on
Central, documented as a known closure gap for the next release.
ai-skills/publish-tvos-fork/SKILL.md: New "Reposilite dev builds"
section documents when to use, version scheme, environment variables,
flags, consumer snippet, and the rule that the shipped redirect
manifest keeps empty mappings.
Note: scripts/stage-central-bundle.sh was left untouched (carries older
pin copies); unifying it is a follow-up.
Verification
bash -nsyntax check on all shell scripts./gradlew -p mpp tasks --allconfirmspublishComposeJbToRemoteis listed
local Reposilite 3.6.3 instance published all seven libraries with
tvOS klibs and Gradle module metadata, and per-library verification
of the published pom and module files passed
--dry-runmode with token masked confirmed the publish wouldproceed correctly
Notes
versions, consumers must supply them via the printed snippet.
never exposed on a command line or in process arguments.
release--tvos and tvos-main branches.
only on trusted LANs; HTTPS requires no additional opt-ins.