Skip to content

Commit

Permalink
feat: add versionCode parameter to promoteRelease method (#1115)
Browse files Browse the repository at this point in the history
  • Loading branch information
MRezaNasirloo authored Dec 15, 2023
1 parent 6eda642 commit 6685272
Show file tree
Hide file tree
Showing 12 changed files with 89 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ interface EditManager {
userFraction: Double?,
updatePriority: Int?,
retainableArtifacts: List<Long>?,
versionCode: Long?
)

/** Uploads the given [bundleFile]. */
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,12 @@ internal class DefaultEditManager(
userFraction: Double?,
updatePriority: Int?,
retainableArtifacts: List<Long>?,
versionCode: Long?,
) {
tracks.promote(TrackManager.PromoteConfig(
promoteTrackName,
fromTrackName,
versionCode,
TrackManager.BaseConfig(
releaseStatus,
userFraction,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ internal interface TrackManager {
data class PromoteConfig(
val promoteTrackName: String,
val fromTrackName: String,
val versionCode: Long?,
val base: BaseConfig,
)
}
Expand Down Expand Up @@ -82,7 +83,7 @@ internal class DefaultTrackManager(

// Update the track
for (release in track.releases) {
release.mergeChanges(null, config.base)
release.mergeChanges(config.versionCode?.let { listOf(it) }, config.base)
}
// Only keep the unique statuses from the highest version code since duplicate statuses are
// not allowed. This is how we deal with an update from inProgress -> completed. We update
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -302,19 +302,21 @@ class DefaultEditManagerTest {
releaseNotes = mapOf("locale" to "notes"),
userFraction = .88,
updatePriority = 3,
retainableArtifacts = listOf(777)
retainableArtifacts = listOf(777),
versionCode = 123,
)

verify(mockTracks).promote(TrackManager.PromoteConfig(
promoteTrackName = "alpha",
fromTrackName = "internal",
versionCode = 123,
base = TrackManager.BaseConfig(
releaseStatus = ReleaseStatus.COMPLETED,
releaseName = "relname",
releaseNotes = mapOf("locale" to "notes"),
userFraction = .88,
updatePriority = 3,
retainableArtifacts = listOf(777)
retainableArtifacts = listOf(777),
)
))
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -657,6 +657,7 @@ class DefaultTrackManagerTest {
val config = TrackManager.PromoteConfig(
promoteTrackName = "alpha",
fromTrackName = "internal",
versionCode = null,
base = TrackManager.BaseConfig(
releaseStatus = ReleaseStatus.COMPLETED,
userFraction = .88,
Expand All @@ -682,6 +683,7 @@ class DefaultTrackManagerTest {
val config = TrackManager.PromoteConfig(
promoteTrackName = "alpha",
fromTrackName = "internal",
versionCode = null,
base = TrackManager.BaseConfig(
releaseStatus = ReleaseStatus.IN_PROGRESS,
userFraction = .88,
Expand Down Expand Up @@ -722,6 +724,7 @@ class DefaultTrackManagerTest {
val config = TrackManager.PromoteConfig(
promoteTrackName = "alpha",
fromTrackName = "internal",
versionCode = null,
base = TrackManager.BaseConfig(
releaseStatus = ReleaseStatus.COMPLETED,
userFraction = null,
Expand Down Expand Up @@ -763,6 +766,7 @@ class DefaultTrackManagerTest {
val config = TrackManager.PromoteConfig(
promoteTrackName = "alpha",
fromTrackName = "internal",
versionCode = null,
base = TrackManager.BaseConfig(
releaseStatus = null,
userFraction = null,
Expand Down Expand Up @@ -811,6 +815,7 @@ class DefaultTrackManagerTest {
val config = TrackManager.PromoteConfig(
promoteTrackName = "alpha",
fromTrackName = "internal",
versionCode = null,
base = TrackManager.BaseConfig(
releaseStatus = ReleaseStatus.COMPLETED,
userFraction = null,
Expand Down Expand Up @@ -839,6 +844,7 @@ class DefaultTrackManagerTest {
val config = TrackManager.PromoteConfig(
promoteTrackName = "alpha",
fromTrackName = "internal",
versionCode = null,
base = TrackManager.BaseConfig(
releaseStatus = ReleaseStatus.COMPLETED,
userFraction = null,
Expand Down Expand Up @@ -896,6 +902,7 @@ class DefaultTrackManagerTest {
val config = TrackManager.PromoteConfig(
promoteTrackName = "alpha",
fromTrackName = "alpha",
versionCode = null,
base = TrackManager.BaseConfig(
releaseStatus = ReleaseStatus.COMPLETED,
userFraction = null,
Expand Down Expand Up @@ -931,6 +938,7 @@ class DefaultTrackManagerTest {
val config = TrackManager.PromoteConfig(
promoteTrackName = "alpha",
fromTrackName = "alpha",
versionCode = null,
base = TrackManager.BaseConfig(
releaseStatus = ReleaseStatus.COMPLETED,
userFraction = .8,
Expand Down Expand Up @@ -966,6 +974,7 @@ class DefaultTrackManagerTest {
val config = TrackManager.PromoteConfig(
promoteTrackName = "alpha",
fromTrackName = "internal",
versionCode = null,
base = TrackManager.BaseConfig(
releaseStatus = null,
userFraction = .5,
Expand All @@ -991,4 +1000,47 @@ class DefaultTrackManagerTest {
assertThat(trackCaptor.value.releases.single().status).isEqualTo("inProgress")
assertThat(trackCaptor.value.releases.single().userFraction).isEqualTo(0.5)
}

@Test
fun `Promotion with version code specified promotes that specific version code`() {
val config = TrackManager.PromoteConfig(
promoteTrackName = "alpha",
fromTrackName = "internal",
versionCode = 2,
base = TrackManager.BaseConfig(
releaseStatus = null,
userFraction = .5,
updatePriority = null,
releaseNotes = null,
retainableArtifacts = null,
releaseName = null
)
)
`when`(mockPublisher.getTrack(any(), any())).thenReturn(Track().apply {
track = "internal"
releases = listOf(
TrackRelease().apply {
status = "completed"
versionCodes = listOf(1)
},
TrackRelease().apply {
status = "draft"
versionCodes = listOf(2)
},
TrackRelease().apply {
status = "draft"
versionCodes = listOf(3)
}
)
})

tracks.promote(config)

val trackCaptor = ArgumentCaptor.forClass(Track::class.java)
verify(mockPublisher).updateTrack(eq("edit-id"), trackCaptor.capture())
assertThat(trackCaptor.value.releases).hasSize(1)
assertThat(trackCaptor.value.releases.single().status).isEqualTo("inProgress")
assertThat(trackCaptor.value.releases.single().userFraction).isEqualTo(.5)
assertThat(trackCaptor.value.releases.single().versionCodes).containsExactly(2L)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ abstract class FakeEditManager : EditManager {
userFraction: Double?,
updatePriority: Int?,
retainableArtifacts: List<Long>?,
versionCode: Long?,
): Unit = throw IllegalStateException("Test wasn't expecting this method to be called.")

override fun uploadBundle(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,14 @@ abstract class PlayPublisherExtension @Inject constructor(
@get:Input
abstract val promoteTrack: Property<String>

/**
* Specify the version code to promote from [fromTrack] to [track].
* Default is the highest version code in [fromTrack].
*/
@get:Optional
@get:Input
abstract val versionCode: Property<Long>

/**
* Specify the initial user fraction intended to receive an `inProgress` release. Defaults to
* 0.1 (10%).
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ internal fun PlayPublisherExtension.toConfig() = PlayExtensionConfig(
updatePriority.orNull,
releaseStatus.orNull,
releaseName.orNull,
versionCode.orNull,
resolutionStrategy.get(),
retain.artifacts.orNull,
retain.mainObb.orNull,
Expand Down Expand Up @@ -120,6 +121,7 @@ internal data class PlayExtensionConfig(
val updatePriority: Int?,
val releaseStatus: ReleaseStatus?,
val releaseName: String?,
val versionCode: Long?,
val resolutionStrategy: ResolutionStrategy,
val retainArtifacts: List<Long>?,
val retainMainObb: Int?,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,8 @@ internal abstract class PromoteRelease @Inject constructor(
findReleaseNotes(fromTrack),
config.userFraction,
config.updatePriority,
config.retainArtifacts
config.retainArtifacts,
config.versionCode,
)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,13 @@ internal interface TrackExtensionOptions : WriteTrackExtensionOptions {
)
var userFractionOption: String

@get:Internal
@set:Option(
option = "version-code",
description = "Set the version code to promote from [fromTrack] to [track]"
)
var versionCodeOption: String

@get:Internal
@set:Option(
option = "update-priority",
Expand Down Expand Up @@ -143,6 +150,12 @@ internal class CliOptionsImpl(
extension.userFraction.set(value.toDouble())
}

override var versionCodeOption: String
get() = throw UnsupportedOperationException()
set(value) {
extension.versionCode.set(value.toLong())
}

override var updatePriorityOption: String
get() = throw UnsupportedOperationException()
set(value) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,7 @@ class PlayPublisherExtensionTest {
map { ExtensionMergeHolder(it, Extension()) }

private inner class Extension : PlayPublisherExtension("test") {
override val versionCode: Property<Long> get() = project.objects.property()
override val enabled: Property<Boolean> = project.objects.property()
override val serviceAccountCredentials: RegularFileProperty = project.objects.fileProperty()
override val defaultToAppBundles: Property<Boolean> = project.objects.property()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,7 @@ class PromoteReleaseIntegrationTest : IntegrationTestBase(), SharedIntegrationTe
userFraction: Double?,
updatePriority: Int?,
retainableArtifacts: List<Long>?,
versionCode: Long?,
) {
println("promoteRelease(" +
"promoteTrackName=$promoteTrackName, " +
Expand Down

0 comments on commit 6685272

Please sign in to comment.