Skip to content

Prepare 1.0.0-Beta1 release#188

Merged
kirich1409 merged 6 commits into
mainfrom
chore/changelog-1.0.0-beta
May 17, 2026
Merged

Prepare 1.0.0-Beta1 release#188
kirich1409 merged 6 commits into
mainfrom
chore/changelog-1.0.0-beta

Conversation

@kirich1409
Copy link
Copy Markdown
Contributor

@kirich1409 kirich1409 commented May 17, 2026

Summary

Prepares the first Beta of v1.0.0 (closes #166, refs #156).

Five atomic commits:

  1. Finalize CHANGELOG for 1.0.0-Beta1 release. Rename [Unreleased][1.0.0-Beta1] - 2026-05-17, add new empty [Unreleased], compare-link [1.0.0-Beta1]: …/releases/tag/v1.0.0-Beta1. Restructure ### Added by area. Backfill items audited against git log (enum DSL feat(gradle-plugin): support enum types in Gradle DSL #162, CC support chore: full Configuration Cache support #164, JavaPreferences default feat(platform): replace InMemoryConfigValueProvider with JavaPreferencesConfigValueProvider on JVM #167, lint detectors feat: add :featured-lint-rules Android Lint module with HardcodedFlagValue detector #141/feat(lint): add UncheckedFlagAccess, ExpiredFeatureFlag, and InvalidFlagReference detectors #176/Wire lint detectors into core AAR via lintPublish #181, Detekt rules feat(detekt): add @BehindFlag/@AssumesFlag annotations and InvalidFlagReference/UncheckedFlagAccess rules #142, FlagRegistry codegen feat(gradle-plugin): auto-generate FlagRegistry initializers per module #110, ProGuard auto-wire, E2E test, R8 DCE module Extract R8 DCE verification into featured-shrinker-tests module #165, SECURITY.md Add SECURITY.md #173, GitHub templates Add GitHub issue templates and PR template #175). Add ### Changed (AGP 9.1 + Gradle 9.3 build: migrate to AGP 9.1.0 + Gradle 9.3.1 with full KMP plugin support #135, providers/ reshuffle refactor: move all provider modules under providers/ directory #128) and ### Removed (BCV chore: remove binary-compatibility-validator (BCV) #150, @LocalFlag/@RemoteFlag). Backfill ### Fixed (Firebase fetch wrapping fix: firebase FetchException wrapping and missing ADR doc #151, MIT POM Fix license mismatch: use MIT in all POM declarations #174, quickstart docs Fix stale artifact IDs in quick-start docs #179).

  2. Bump VERSION_NAME to 1.0.0-Beta1. Release commit; publish.yml derives the published Maven Central version from the v1.0.0-Beta1 tag, but VERSION_NAME is the SNAPSHOT baseline — keeping it on 1.0.0-Beta1 makes post-release SNAPSHOT builds (1.0.0-Beta1-SNAPSHOT) meaningful.

  3. Switch Maven Central publishing to Central Portal. publish.yml now invokes publishToMavenCentral (manual promotion) instead of the legacy publishAllPublicationsToMavenCentralRepository. vanniktech 0.36 removed the OSSRH path — Central Portal is the only target. No build.gradle.kts changes needed. --no-configuration-cache added for release-pipeline debuggability. CI secrets (MAVEN_CENTRAL_USERNAME / MAVEN_CENTRAL_PASSWORD) must be Central Portal User Tokens (central.sonatype.com → Account → Generate User Token).

  4. Add featured-lint-rules and featured-testing to BOM. Both modules publish to Maven Central but were missing from the BOM, forcing consumers to pin versions manually. Adding them restores the BOM contract: every published Featured artifact is version-managed through featured-bom.

  5. Expose ConfigParam.description as .summary in Swift via @ObjCName. Avoids SKIE's auto-rename to description_ caused by the NSObject.description() collision. Kotlin API unchanged.

Release flow after merge

  1. Merge this PR with Squash and merge (or Rebase to keep five commits — preference of maintainer).
  2. Push tag v1.0.0-Beta1 on the merge commit → triggers publish.yml (Maven Central staging + XCFramework GitHub release).
  3. Review the staging deployment at central.sonatype.com/publishing/deployments and click Publish to promote.

Test plan

  • Visual diff of CHANGELOG.md (subsections, links, all PR numbers)
  • gradle.properties shows VERSION_NAME=1.0.0-Beta1
  • publish.yml step invokes publishToMavenCentral --no-configuration-cache
  • featured-bom POM contains 15 managed artifacts (was 13)
  • ConfigParam.description accessible as .summary in Swift (no description_)
  • No other source files touched
  • CI green

Rename [Unreleased] to [1.0.0-Beta1] - 2026-05-17, add empty
[Unreleased] section, add compare-link, restructure Added
section by area, and backfill items audited against git log:

- Added: enum DSL (#162), CC support (#164), JavaPreferences
  default (#167), lint detectors (#141, #176, #181), Detekt
  rules (#142), FlagRegistry codegen (#110), AGP Variant
  ProGuard auto-wire, E2E test, R8 DCE module (#165),
  SECURITY.md (#173), GH templates (#175).
- Changed: AGP 9.1 / Gradle 9.3 migration (#135), providers/
  directory reshuffle (#128).
- Removed: BCV plugin (#150), @LocalFlag/@RemoteFlag.
- Fixed: Firebase wrap RuntimeException (#151), MIT POM (#174),
  quickstart artifact IDs (#179).

Closes #166.
Release commit for the first Beta of v1.0.0. The publish.yml
workflow consumes the tag (v1.0.0-Beta1) as the published
version, but ORG_GRADLE_PROJECT_VERSION_NAME falls back to
VERSION_NAME for SNAPSHOT pushes — bumping the baseline keeps
post-release SNAPSHOT builds on a meaningful track.

Refs #156.
@kirich1409 kirich1409 force-pushed the chore/changelog-1.0.0-beta branch from bc2d211 to b585203 Compare May 17, 2026 12:45
@kirich1409 kirich1409 changed the title Finalize CHANGELOG for 1.0.0-Beta Prepare 1.0.0-Beta1 release May 17, 2026
@kirich1409 kirich1409 mentioned this pull request May 17, 2026
20 tasks
Central Portal (central.sonatype.com) replaced the legacy OSSRH
flow; vanniktech 0.36 exposes `publishToMavenCentral` (manual
promotion) and `publishAndReleaseToMavenCentral` (auto). The
former matches our release process: tag push uploads a bundle
to staging, then a human reviews and clicks Publish in the
Central Portal UI.

- publish.yml: invoke `publishToMavenCentral` instead of the
  legacy `publishAllPublicationsToMavenCentralRepository`.

No build.gradle.kts changes needed: vanniktech 0.36 removed the
SonatypeHost parameter — Central Portal is the only API path.

CI secrets must be Central Portal User Tokens
(central.sonatype.com → Account → Generate User Token), stored
as MAVEN_CENTRAL_USERNAME and MAVEN_CENTRAL_PASSWORD.

Refs #156.
Both modules publish to Maven Central but were missing from the
featured-bom constraints — consumers had to pin their versions
manually. Adding them restores the BOM contract: every published
Featured artifact is version-managed through featured-bom.

Refs #156.
ConfigParam.description collides with the inherited
NSObject.description() ObjC selector, so SKIE was forced to
rename the property to description_ in the generated Swift API
— an ugly first-impression name for the 1.0.0-Beta1 release.

Annotating the Kotlin property with @ObjCName("summary") gives
Swift consumers a clean ConfigParam.summary while keeping the
Kotlin API untouched (description remains the canonical name on
JVM/JS targets).

Refs #156.
@kirich1409 kirich1409 self-assigned this May 17, 2026
@kirich1409 kirich1409 marked this pull request as ready for review May 17, 2026 13:23
Copilot AI review requested due to automatic review settings May 17, 2026 13:23
@qodo-code-review
Copy link
Copy Markdown

Review Summary by Qodo

Prepare 1.0.0-Beta1 release with Central Portal migration

✨ Enhancement 📝 Documentation

Grey Divider

Walkthroughs

Description
• Finalize CHANGELOG for 1.0.0-Beta1 release with comprehensive backfill
• Bump VERSION_NAME to 1.0.0-Beta1 for beta release
• Switch Maven Central publishing to Central Portal API
• Add featured-testing and featured-lint-rules to BOM
• Expose ConfigParam.description as .summary in Swift
Diagram
flowchart LR
  A["Release Preparation"] --> B["CHANGELOG Update"]
  A --> C["Version Bump"]
  A --> D["Publishing Config"]
  A --> E["BOM Updates"]
  A --> F["Swift API Fix"]
  D --> G["Central Portal"]
  E --> H["featured-testing"]
  E --> I["featured-lint-rules"]
  F --> J["ObjCName Annotation"]
Loading

Grey Divider

File Changes

1. CHANGELOG.md 📝 Documentation +64/-20

Finalize CHANGELOG for 1.0.0-Beta1 release

• Rename [Unreleased] to [1.0.0-Beta1] - 2026-05-17 with new empty [Unreleased] section
• Restructure Added section by area (Core, Providers, Gradle plugin, Static analysis, Compose,
 Packaging)
• Backfill comprehensive items audited against git log with PR references
• Add Changed section for AGP 9.1/Gradle 9.3 migration and providers directory reshuffle
• Add Removed section for BCV plugin and @LocalFlag/@RemoteFlag annotations
• Add Fixed section with Swift API, Firebase, POM, and documentation fixes

CHANGELOG.md


2. gradle.properties ⚙️ Configuration changes +1/-1

Bump version to 1.0.0-Beta1

• Bump VERSION_NAME from 0.1.0-SNAPSHOT to 1.0.0-Beta1

gradle.properties


3. .github/workflows/publish.yml ⚙️ Configuration changes +3/-1

Switch to Central Portal publishing API

• Replace legacy publishAllPublicationsToMavenCentralRepository with publishToMavenCentral
• Add --no-configuration-cache flag for release-pipeline debuggability
• Add explanatory comment about manual promotion workflow

.github/workflows/publish.yml


View more (2)
4. featured-bom/build.gradle.kts ✨ Enhancement +2/-0

Add missing modules to BOM

• Add featured-testing to BOM constraints
• Add featured-lint-rules to BOM constraints
• Ensures all published Featured artifacts are version-managed through BOM

featured-bom/build.gradle.kts


5. core/src/commonMain/kotlin/dev/androidbroadcast/featured/ConfigParam.kt ✨ Enhancement +3/-0

Expose ConfigParam.description as .summary in Swift

• Add @file:OptIn(kotlin.experimental.ExperimentalObjCName::class) annotation
• Import kotlin.native.ObjCName
• Add @property:ObjCName("summary") annotation to description property
• Avoids SKIE auto-rename to description_ caused by NSObject.description() collision

core/src/commonMain/kotlin/dev/androidbroadcast/featured/ConfigParam.kt


Grey Divider

Qodo Logo

@qodo-code-review
Copy link
Copy Markdown

qodo-code-review Bot commented May 17, 2026

Code Review by Qodo

🐞 Bugs (1) 📘 Rule violations (0) 📎 Requirement gaps (0)

Context used
✅ Compliance rules (platform): 7 rules

Grey Divider


Remediation recommended

1. Config cache disabled on main 🐞 Bug ➹ Performance
Description
publish.yml now always runs Gradle with --no-configuration-cache, which also applies to SNAPSHOT
publishes triggered by pushes to main. This removes the repo’s enabled configuration-cache
benefits and can significantly increase CI time for non-release runs.
Code

.github/workflows/publish.yml[R49-51]

+        # publishToMavenCentral = manual promotion (no auto-release); --no-configuration-cache for
+        # release-pipeline debuggability (runs once per tag, CC savings are zero).
+        run: ./gradlew --no-daemon publishToMavenCentral --no-configuration-cache
Evidence
The workflow is configured to run on pushes to both version tags and the main branch, but the
Gradle command now disables configuration cache unconditionally. Since the repo enables
configuration cache globally, this change removes cache benefits for main-branch SNAPSHOT publishes
as well (not just tag releases).

.github/workflows/publish.yml[3-10]
.github/workflows/publish.yml[41-51]
gradle.properties[6-9]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

### Issue description
The publish workflow unconditionally adds `--no-configuration-cache` to the Gradle publish invocation, which disables configuration cache even for push-to-`main` SNAPSHOT publishes.

### Issue Context
- The workflow triggers on both tags and the `main` branch.
- The repo enables configuration cache by default in `gradle.properties`.
- The comment added in the workflow indicates the intent was release/tag debuggability, but the flag currently applies to all runs.

### Fix Focus Areas
- .github/workflows/publish.yml[3-10]
- .github/workflows/publish.yml[41-51]

### Suggested fix
Update the publish step to only add `--no-configuration-cache` for tag builds (e.g., when `github.ref` starts with `refs/tags/`). For example, build the Gradle arguments in bash:

- If tag: `./gradlew --no-daemon publishToMavenCentral --no-configuration-cache`
- Else: `./gradlew --no-daemon publishToMavenCentral`

This preserves debuggability for releases while keeping faster SNAPSHOT CI runs.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Qodo Logo

@kirich1409 kirich1409 added the publishing Maven Central / release infrastructure label May 17, 2026
@kirich1409 kirich1409 added this to the v1.0.0 milestone May 17, 2026
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Prepares the repository for the 1.0.0-Beta1 release by finalizing release metadata, updating publishing flow, expanding the BOM, and adjusting Swift interop for ConfigParam.

Changes:

  • Finalizes CHANGELOG.md and bumps VERSION_NAME to 1.0.0-Beta1.
  • Switches Maven Central publishing to the Central Portal task.
  • Adds missing published modules to the BOM and exposes ConfigParam.description to Swift as .summary.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
gradle.properties Updates the project version baseline for the beta release.
featured-bom/build.gradle.kts Adds featured-testing and featured-lint-rules to managed BOM constraints.
core/src/commonMain/kotlin/dev/androidbroadcast/featured/ConfigParam.kt Adds @ObjCName metadata for Swift-facing property naming.
CHANGELOG.md Converts unreleased notes into the 1.0.0-Beta1 release section.
.github/workflows/publish.yml Updates Maven publishing to use Central Portal publishing.

Comment thread CHANGELOG.md Outdated
Comment thread CHANGELOG.md Outdated
Copilot review on PR #188 flagged two stale version mentions in the
1.0.0-Beta1 release notes:
- SKIE entry said 0.10.5; libs.versions.toml pins 0.10.10
- Gradle migration entry said 9.3.1; wrapper now ships 9.4.1
  (post-#135 dependabot bump)

Release notes must match the artifacts users get when checking out
the v1.0.0-Beta1 tag — bumping both to actual.
@kirich1409 kirich1409 merged commit 4be6056 into main May 17, 2026
10 checks passed
@kirich1409 kirich1409 deleted the chore/changelog-1.0.0-beta branch May 17, 2026 14:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

publishing Maven Central / release infrastructure

Projects

None yet

Development

Successfully merging this pull request may close these issues.

chore: finalize CHANGELOG.md for v1.0.0

2 participants