From e8f9a4cf3e50410b80c55c05f6639e467ed51f93 Mon Sep 17 00:00:00 2001 From: kirich1409 Date: Sun, 17 May 2026 19:37:35 +0300 Subject: [PATCH 1/2] Rename proguard task to generateFeaturedProguardRules MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Namespace the Gradle task with the `featured` prefix to avoid clashes with other plugins that register a similarly named task. The Kotlin class GenerateProguardRulesTask and the GENERATE_PROGUARD_TASK_NAME constant identifier stay the same — only the task name string and its references in tests and docs change. --- README.md | 6 +++--- docs/api/index.md | 2 +- docs/guides/android.md | 2 +- docs/guides/best-practices.md | 2 +- featured-gradle-plugin/CLAUDE.md | 2 +- .../featured/gradle/FeaturedPlugin.kt | 2 +- .../gradle/FeaturedPluginIntegrationTest.kt | 16 ++++++++-------- .../GenerateProguardRulesTaskRegistrationTest.kt | 10 +++++----- 8 files changed, 21 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 9bf67df..5780589 100644 --- a/README.md +++ b/README.md @@ -362,7 +362,7 @@ The Gradle plugin generates per-function ProGuard / R8 `-assumevalues` rules for The task runs automatically when you build a release variant. To run it manually: ```bash -./gradlew :app:generateProguardRules +./gradlew :app:generateFeaturedProguardRules ``` Output: `app/build/featured/proguard-featured.pro` @@ -490,7 +490,7 @@ Run code generation tasks across all modules at once: ./gradlew scanAllLocalFlags # Generate R8 rules for all Android modules -./gradlew generateProguardRules +./gradlew generateFeaturedProguardRules # Generate xcconfig across all modules ./gradlew generateXcconfig @@ -502,7 +502,7 @@ Declare a single shared `ConfigValues` in your app module and inject it into fea ## Configuration cache -`featured-gradle-plugin` officially supports the Gradle [Configuration Cache](https://docs.gradle.org/current/userguide/configuration_cache.html) on **Gradle 9+** and **AGP 9+**. Every task registered by the plugin (`resolveFeatureFlags`, `generateProguardRules`, `generateConfigParam`, `generateFlagRegistrar`, `generateIosConstVal`, `generateXcconfig`) stores and reuses CC entries without violations. +`featured-gradle-plugin` officially supports the Gradle [Configuration Cache](https://docs.gradle.org/current/userguide/configuration_cache.html) on **Gradle 9+** and **AGP 9+**. Every task registered by the plugin (`resolveFeatureFlags`, `generateFeaturedProguardRules`, `generateConfigParam`, `generateFlagRegistrar`, `generateIosConstVal`, `generateXcconfig`) stores and reuses CC entries without violations. ### Enabling diff --git a/docs/api/index.md b/docs/api/index.md index 6615402..e63d523 100644 --- a/docs/api/index.md +++ b/docs/api/index.md @@ -121,7 +121,7 @@ The plugin generates: | `resolveFeatureFlags` | Resolves DSL-declared flags; runs before all code-generation tasks | | `generateConfigParam` | Generates `GeneratedLocalFlags` and `GeneratedRemoteFlags` objects | | `generateFlagRegistrar` | Generates flag registrar for the debug UI | -| `generateProguardRules` | Generates per-function R8 `-assumevalues` rules for local boolean flags | +| `generateFeaturedProguardRules` | Generates per-function R8 `-assumevalues` rules for local boolean flags | | `generateIosConstVal` | Generates `expect`/`actual const val` for local flags (iOS) | | `generateXcconfig` | Generates xcconfig with `DISABLE_*` conditions for local boolean flags | | `scanAllLocalFlags` | Aggregator task — collects flags across all modules | diff --git a/docs/guides/android.md b/docs/guides/android.md index 9988731..001d6b4 100644 --- a/docs/guides/android.md +++ b/docs/guides/android.md @@ -245,7 +245,7 @@ The Gradle plugin generates per-function `-assumevalues` rules for the generated The task runs automatically when you build a release variant. To run it manually: ```bash -./gradlew :app:generateProguardRules +./gradlew :app:generateFeaturedProguardRules ``` Output: `app/build/featured/proguard-featured.pro` diff --git a/docs/guides/best-practices.md b/docs/guides/best-practices.md index 00d054a..5c60b97 100644 --- a/docs/guides/best-practices.md +++ b/docs/guides/best-practices.md @@ -66,7 +66,7 @@ Once the feature is fully rolled out and validated: 4. Regenerate platform artefacts: ```bash -./gradlew generateProguardRules # keep Android R8 rules in sync +./gradlew generateFeaturedProguardRules # keep Android R8 rules in sync ./gradlew generateXcconfig # keep iOS xcconfig in sync ``` diff --git a/featured-gradle-plugin/CLAUDE.md b/featured-gradle-plugin/CLAUDE.md index a1858b2..5f50182 100644 --- a/featured-gradle-plugin/CLAUDE.md +++ b/featured-gradle-plugin/CLAUDE.md @@ -28,7 +28,7 @@ featured { | `resolveFeatureFlags` | `build/featured/flags.txt` | | `generateConfigParam` | `build/generated/featured/commonMain/Generated{Local,Remote}Flags.kt` + `GeneratedFlagExtensions.kt` | | `generateFlagRegistrar` | `build/generated/featured/GeneratedFlagRegistrar.kt` | -| `generateProguardRules` | `build/featured/proguard-featured.pro` | +| `generateFeaturedProguardRules` | `build/featured/proguard-featured.pro` | | `generateIosConstVal` | iOS constant value files | | `generateXcconfig` | `build/featured/FeatureFlags.generated.xcconfig` | diff --git a/featured-gradle-plugin/src/main/kotlin/dev/androidbroadcast/featured/gradle/FeaturedPlugin.kt b/featured-gradle-plugin/src/main/kotlin/dev/androidbroadcast/featured/gradle/FeaturedPlugin.kt index 6496396..95d9425 100644 --- a/featured-gradle-plugin/src/main/kotlin/dev/androidbroadcast/featured/gradle/FeaturedPlugin.kt +++ b/featured-gradle-plugin/src/main/kotlin/dev/androidbroadcast/featured/gradle/FeaturedPlugin.kt @@ -7,7 +7,7 @@ import org.gradle.api.tasks.TaskProvider internal const val RESOLVE_FLAGS_TASK_NAME = "resolveFeatureFlags" internal const val SCAN_ALL_TASK_NAME = "scanAllLocalFlags" internal const val GENERATE_FLAG_REGISTRAR_TASK_NAME = "generateFlagRegistrar" -internal const val GENERATE_PROGUARD_TASK_NAME = "generateProguardRules" +internal const val GENERATE_PROGUARD_TASK_NAME = "generateFeaturedProguardRules" internal const val GENERATE_IOS_CONST_VAL_TASK_NAME = "generateIosConstVal" internal const val GENERATE_XCCONFIG_TASK_NAME = "generateXcconfig" internal const val GENERATE_CONFIG_PARAM_TASK_NAME = "generateConfigParam" diff --git a/featured-gradle-plugin/src/test/kotlin/dev/androidbroadcast/featured/gradle/FeaturedPluginIntegrationTest.kt b/featured-gradle-plugin/src/test/kotlin/dev/androidbroadcast/featured/gradle/FeaturedPluginIntegrationTest.kt index 7088533..ede0348 100644 --- a/featured-gradle-plugin/src/test/kotlin/dev/androidbroadcast/featured/gradle/FeaturedPluginIntegrationTest.kt +++ b/featured-gradle-plugin/src/test/kotlin/dev/androidbroadcast/featured/gradle/FeaturedPluginIntegrationTest.kt @@ -15,7 +15,7 @@ import kotlin.test.assertTrue * End-to-end integration test that verifies the Featured Gradle plugin: * 1. Generates a ProGuard file at `build/featured/proguard-featured.pro` with correct * `-assumevalues` rules for declared local flags. - * 2. Auto-wires that file into the AGP release variant so the `generateProguardRules` + * 2. Auto-wires that file into the AGP release variant so the `generateFeaturedProguardRules` * task participates in `assembleRelease`. * * The test uses a minimal Android application fixture copied from @@ -49,17 +49,17 @@ class FeaturedPluginIntegrationTest { // ── Tests ───────────────────────────────────────────────────────────────── @Test - fun `generateProguardRules task produces correct assumevalues rule for boolean local flag`() { + fun `generateFeaturedProguardRules task produces correct assumevalues rule for boolean local flag`() { val result = gradleRunner(projectDir) - .withArguments("generateProguardRules", "--stacktrace") + .withArguments("generateFeaturedProguardRules", "--stacktrace") .build() - val outcome = result.task(":generateProguardRules")?.outcome + val outcome = result.task(":generateFeaturedProguardRules")?.outcome assertEquals( TaskOutcome.SUCCESS, outcome, - "Expected :generateProguardRules to succeed, got $outcome\n${result.output}", + "Expected :generateFeaturedProguardRules to succeed, got $outcome\n${result.output}", ) val proFile = projectDir.resolve("build/featured/proguard-featured.pro") @@ -138,13 +138,13 @@ class FeaturedPluginIntegrationTest { .withArguments(args) .build() - // generateProguardRules must have run as part of the release build. - val proguardOutcome = result.task(":generateProguardRules")?.outcome + // generateFeaturedProguardRules must have run as part of the release build. + val proguardOutcome = result.task(":generateFeaturedProguardRules")?.outcome assertTrue( proguardOutcome == TaskOutcome.SUCCESS || proguardOutcome == TaskOutcome.UP_TO_DATE || proguardOutcome == TaskOutcome.FROM_CACHE, - "Expected :generateProguardRules to participate in assembleRelease (cc=$cc), got $proguardOutcome\n${result.output}", + "Expected :generateFeaturedProguardRules to participate in assembleRelease (cc=$cc), got $proguardOutcome\n${result.output}", ) // On the second CC-enabled run, the cache is reused AND all task outputs are unchanged, diff --git a/featured-gradle-plugin/src/test/kotlin/dev/androidbroadcast/featured/gradle/GenerateProguardRulesTaskRegistrationTest.kt b/featured-gradle-plugin/src/test/kotlin/dev/androidbroadcast/featured/gradle/GenerateProguardRulesTaskRegistrationTest.kt index 60bc461..0afbe13 100644 --- a/featured-gradle-plugin/src/test/kotlin/dev/androidbroadcast/featured/gradle/GenerateProguardRulesTaskRegistrationTest.kt +++ b/featured-gradle-plugin/src/test/kotlin/dev/androidbroadcast/featured/gradle/GenerateProguardRulesTaskRegistrationTest.kt @@ -8,7 +8,7 @@ import kotlin.test.assertTrue class GenerateProguardRulesTaskRegistrationTest { @Test - fun `plugin registers generateProguardRules task`() { + fun `plugin registers generateFeaturedProguardRules task`() { val project = ProjectBuilder.builder().build() project.plugins.apply("dev.androidbroadcast.featured") @@ -19,7 +19,7 @@ class GenerateProguardRulesTaskRegistrationTest { } @Test - fun `generateProguardRules task is of correct type`() { + fun `generateFeaturedProguardRules task is of correct type`() { val project = ProjectBuilder.builder().build() project.plugins.apply("dev.androidbroadcast.featured") @@ -29,7 +29,7 @@ class GenerateProguardRulesTaskRegistrationTest { } @Test - fun `generateProguardRules task is in featured group`() { + fun `generateFeaturedProguardRules task is in featured group`() { val project = ProjectBuilder.builder().build() project.plugins.apply("dev.androidbroadcast.featured") @@ -39,7 +39,7 @@ class GenerateProguardRulesTaskRegistrationTest { } @Test - fun `generateProguardRules task has outputFile configured`() { + fun `generateFeaturedProguardRules task has outputFile configured`() { val project = ProjectBuilder.builder().build() project.plugins.apply("dev.androidbroadcast.featured") @@ -49,7 +49,7 @@ class GenerateProguardRulesTaskRegistrationTest { } @Test - fun `generateProguardRules task depends on resolveFeatureFlags task`() { + fun `generateFeaturedProguardRules task depends on resolveFeatureFlags task`() { val project = ProjectBuilder.builder().build() project.plugins.apply("dev.androidbroadcast.featured") From e7a3c66543c7850ca13c5a8ecb54564895002404 Mon Sep 17 00:00:00 2001 From: kirich1409 Date: Sun, 17 May 2026 19:50:17 +0300 Subject: [PATCH 2/2] Address review: changelog Unreleased entry and README scanAllLocalFlags Add `### Changed` entry under `## Unreleased` documenting the task rename with a one-line migration note. Append `scanAllLocalFlags` to the parenthesized task list in the Configuration Cache section of README so it matches the set of tasks actually registered by the plugin. Refs PR #190 review comments from qodo-code-review and copilot-pull-request-reviewer. --- README.md | 2 +- docs/changelog.md | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5780589..c59cf15 100644 --- a/README.md +++ b/README.md @@ -502,7 +502,7 @@ Declare a single shared `ConfigValues` in your app module and inject it into fea ## Configuration cache -`featured-gradle-plugin` officially supports the Gradle [Configuration Cache](https://docs.gradle.org/current/userguide/configuration_cache.html) on **Gradle 9+** and **AGP 9+**. Every task registered by the plugin (`resolveFeatureFlags`, `generateFeaturedProguardRules`, `generateConfigParam`, `generateFlagRegistrar`, `generateIosConstVal`, `generateXcconfig`) stores and reuses CC entries without violations. +`featured-gradle-plugin` officially supports the Gradle [Configuration Cache](https://docs.gradle.org/current/userguide/configuration_cache.html) on **Gradle 9+** and **AGP 9+**. Every task registered by the plugin (`resolveFeatureFlags`, `generateFeaturedProguardRules`, `generateConfigParam`, `generateFlagRegistrar`, `generateIosConstVal`, `generateXcconfig`, `scanAllLocalFlags`) stores and reuses CC entries without violations. ### Enabling diff --git a/docs/changelog.md b/docs/changelog.md index 1828e02..e14a179 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -11,6 +11,12 @@ For the full release history with diff links, see the _Changes on `main` not yet tagged for release._ +### Changed +- Renamed the Gradle ProGuard/R8 generation task from `generateProguardRules` to + `generateFeaturedProguardRules` to avoid task-name clashes with consumer scripts. + Migration: update any CI/build scripts that invoke `generateProguardRules` to use + the new name. The old task name is no longer registered. (#190) + --- ## Contributing a changelog entry