Triple-T / gradle-play-publisher

GPP is Android's unofficial release automation Gradle Plugin. It can do anything from building, uploading, and then promoting your App Bundle or APK to publishing app listings and other metadata.
MIT License
4.13k stars 341 forks source link

generateReleaseBuildConfig fails when resolutionstrategy is AUTO and versionCode > currently published version #899

Closed growse closed 3 years ago

growse commented 3 years ago

Describe the bug

When setting the versionCode to a value larger than what is currently published on the play store and with resolutionStrategy set to AUTO, publishing steps fail with an exception because the generateReleaseBuildConfig step fails (stacktrace at end).

My current published version is 22127. If I set versioncode to be less than 22127, the BuildConfig.java file is generated correctly with public static final int VERSION_CODE = 22128;. However, setting versioncode to be 22128 or higher gives a failure. It looks like the plugin assumes that the file generated by processReleaseVersionCodes (build/intermediates/gpp/release/available-version-codes.txt) is not empty, but running ./gradlew clean app:processReleaseVersionCodes produces an empty file here.

How To Reproduce

  1. Set versioncode to be > currently published play store version
  2. Attempt to run any gradle task that generates a release, e.g. assembleRelease

Versions

\--- com.github.triplet.play:com.github.triplet.play.gradle.plugin:3.0.0
     \--- com.github.triplet.gradle:play-publisher:3.0.0
          +--- com.github.triplet.gradle:android-publisher:3.0.0
          |    +--- com.github.triplet.gradle:common-utils:3.0.0
          +--- com.github.triplet.gradle:common-utils:3.0.0
          +--- com.github.triplet.gradle:common-validation:3.0.0
Gradle 6.7
+--- com.android.tools.build:gradle:4.1.0

Tasks executed

What tasks did you run? For example, publishBundle.

assembleRelease generateReleaseBuildConfig

Expected behavior

The BuildConfig.java should be correctly generated with the version code being the maximum of the gradle versionCode and the published versionCode, in this case, the gradle verisionCode.

Additional context (if a crash, provide stack trace)

* What went wrong:
Execution failed for task ':app:generateReleaseBuildConfig'.
> Failed to calculate the value of task ':app:generateReleaseBuildConfig' property 'versionCode'.
   > Index: 0, Size: 0

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:generateReleaseBuildConfig'.
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:38)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
        at ...<snipped>
Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
        at com.github.triplet.gradle.play.PlayPublisherPlugin$applyInternal$2$2$10.transform(PlayPublisherPlugin.kt:353)
        at com.github.triplet.gradle.play.PlayPublisherPlugin$applyInternal$2$2$10.transform(PlayPublisherPlugin.kt:59)
        at org.gradle.api.internal.provider.TransformBackedProvider.mapValue(TransformBackedProvider.java:73)
        at org.gradle.api.internal.provider.TransformBackedProvider.calculateOwnValue(TransformBackedProvider.java:65)
        at org.gradle.api.internal.provider.AbstractMinimalProvider.calculateValue(AbstractMinimalProvider.java:103)
        at org.gradle.api.internal.provider.MappingProvider.calculateOwnValue(MappingProvider.java:55)
        at org.gradle.api.internal.provider.AbstractMinimalProvider.calculateValue(AbstractMinimalProvider.java:103)
        at org.gradle.api.internal.provider.DefaultProperty.calculateValueFrom(DefaultProperty.java:128)
        at org.gradle.api.internal.provider.DefaultProperty.calculateValueFrom(DefaultProperty.java:25)
        at org.gradle.api.internal.provider.AbstractProperty.doCalculateValue(AbstractProperty.java:133)
        at org.gradle.api.internal.provider.AbstractProperty.calculateOwnValue(AbstractProperty.java:127)
        at org.gradle.api.internal.provider.AbstractMinimalProvider.calculateValue(AbstractMinimalProvider.java:103)
  at org.gradle.api.internal.provider.AbstractMinimalProvider.withFinalValue(AbstractMinimalProvider.java:151)
        at org.gradle.api.internal.provider.DefaultProperty.finalValue(DefaultProperty.java:133)
        at org.gradle.api.internal.provider.DefaultProperty.finalValue(DefaultProperty.java:25)
        at org.gradle.api.internal.provider.AbstractProperty.finalizeNow(AbstractProperty.java:236)
        ... 49 more
SUPERCILEX commented 3 years ago

Thanks for the details, this was just fixed a little while ago: https://github.com/Triple-T/gradle-play-publisher/issues/879

growse commented 3 years ago

Ah, apologies. Should have looked harder for the dupe.

SUPERCILEX commented 3 years ago

No worries