Skip to content

Commit b0af219

Browse files
#835 Added printing available Android software versions (#894)
* #835 Added printing available Android software versions * #835 Updated release notes * #835 fixed PR comments
1 parent 2edb898 commit b0af219

14 files changed

Lines changed: 192 additions & 14 deletions

File tree

release_notes.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
- [#890](https://github.com/Flank/flank/pull/890) Convert bitrise ubuntu workflow into GitHub actions. ([piotradamczyk5](https://github.com/piotradamczyk5))
33
- [#876](https://github.com/Flank/flank/pull/876) Added option to print Android available devices to test against. ([piotradamczyk5](https://github.com/piotradamczyk5))
44
- [#895](https://github.com/Flank/flank/pull/895) Added option to print iOS available devices to test against. ([piotradamczyk5](https://github.com/piotradamczyk5))
5+
- [#894](https://github.com/Flank/flank/pull/894) Added option to print Android available versions to test against. ([piotradamczyk5](https://github.com/piotradamczyk5))
56
-
67
-
78
-

test_runner/docs/ascii/flank.jar_-android.adoc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ flank.jar
3535
*models*::
3636
Information about available models
3737

38+
*versions*::
39+
Information about available software versions
40+
3841
// end::picocli-generated-man-section-commands[]
3942

4043
// end::picocli-generated-full-manpage[]

test_runner/docs/ascii/flank.jar_-firebase-test-android.adoc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ flank.jar
3535
*models*::
3636
Information about available models
3737

38+
*versions*::
39+
Information about available software versions
40+
3841
// end::picocli-generated-man-section-commands[]
3942

4043
// end::picocli-generated-full-manpage[]

test_runner/src/main/kotlin/ftl/android/AndroidCatalog.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ object AndroidCatalog {
2525

2626
fun devicesCatalogAsTable(projectId: String) = deviceCatalog(projectId).models.asPrintableTable()
2727

28+
fun supportedVersionsAsTable(projectId: String) = deviceCatalog(projectId).versions.asPrintableTable()
29+
2830
fun androidModelIds(projectId: String) =
2931
modelMap.getOrPut(projectId) { deviceCatalog(projectId).models.map { it.id } }
3032

test_runner/src/main/kotlin/ftl/cli/firebase/test/AndroidCommand.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package ftl.cli.firebase.test
33
import ftl.cli.firebase.test.android.AndroidDoctorCommand
44
import ftl.cli.firebase.test.android.AndroidRunCommand
55
import ftl.cli.firebase.test.android.models.AndroidModelsCommand
6+
import ftl.cli.firebase.test.android.versions.AndroidVersionsCommand
67
import picocli.CommandLine
78
import picocli.CommandLine.Command
89

@@ -12,7 +13,8 @@ import picocli.CommandLine.Command
1213
subcommands = [
1314
AndroidRunCommand::class,
1415
AndroidDoctorCommand::class,
15-
AndroidModelsCommand::class
16+
AndroidModelsCommand::class,
17+
AndroidVersionsCommand::class
1618
],
1719
usageHelpAutoWidth = true
1820
)
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package ftl.cli.firebase.test.android.versions
2+
3+
import picocli.CommandLine
4+
5+
@CommandLine.Command(
6+
name = "versions",
7+
headerHeading = "",
8+
synopsisHeading = "%n",
9+
descriptionHeading = "%n@|bold,underline Description:|@%n%n",
10+
parameterListHeading = "%n@|bold,underline Parameters:|@%n",
11+
optionListHeading = "%n@|bold,underline Options:|@%n",
12+
header = ["Information about available software versions"],
13+
description = ["Information about available software versions. For example prints list of available software versions"],
14+
subcommands = [AndroidVersionsListCommand::class],
15+
usageHelpAutoWidth = true
16+
)
17+
class AndroidVersionsCommand : Runnable {
18+
override fun run() {
19+
CommandLine.usage(AndroidVersionsCommand(), System.out)
20+
}
21+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package ftl.cli.firebase.test.android.versions
2+
3+
import ftl.android.AndroidCatalog.supportedVersionsAsTable
4+
import ftl.args.AndroidArgs
5+
import ftl.config.FtlConstants
6+
import picocli.CommandLine
7+
import java.nio.file.Paths
8+
9+
@CommandLine.Command(
10+
name = "list",
11+
headerHeading = "",
12+
synopsisHeading = "%n",
13+
descriptionHeading = "%n@|bold,underline Description:|@%n%n",
14+
parameterListHeading = "%n@|bold,underline Parameters:|@%n",
15+
optionListHeading = "%n@|bold,underline Options:|@%n",
16+
header = ["List of OS versions available to test against"],
17+
description = ["Print current list of Android OS versions available to test against"],
18+
usageHelpAutoWidth = true
19+
)
20+
class AndroidVersionsListCommand : Runnable {
21+
override fun run() {
22+
println(supportedVersionsAsTable(AndroidArgs.load(Paths.get(configPath)).project))
23+
}
24+
25+
@CommandLine.Option(names = ["-c", "--config"], description = ["YAML config file path"])
26+
var configPath: String = FtlConstants.defaultAndroidConfig
27+
28+
@CommandLine.Option(names = ["-h", "--help"], usageHelp = true, description = ["Prints this help message"])
29+
var usageHelpRequested: Boolean = false
30+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package ftl.environment
2+
3+
import com.google.api.services.testing.model.AndroidVersion
4+
import com.google.api.services.testing.model.Date
5+
import ftl.reports.api.twoDigitString
6+
import ftl.util.applyColorsUsing
7+
import ftl.util.buildTable
8+
9+
fun List<AndroidVersion>.asPrintableTable() = createTestEnvironmentInfo().createAndroidSoftwareVersionsTable()
10+
11+
private fun List<AndroidVersion>.createTestEnvironmentInfo() =
12+
fold(mutableMapOf<String, MutableList<String>>()) { softwareInfo, softwareVersion ->
13+
softwareInfo.apply {
14+
getOrCreateList(OS_VERSION_ID).add(softwareVersion.id.orUnknown())
15+
getOrCreateList(VERSION).add(softwareVersion.versionString.orUnknown())
16+
getOrCreateList(CODE_NAME).add(softwareVersion.codeName.orUnknown())
17+
getOrCreateList(API_LEVEL).add(softwareVersion.apiLevel?.toString().orUnknown())
18+
getOrCreateList(RELEASE_DATE).add(softwareVersion.releaseDate.printableReleaseDate())
19+
getOrCreateList(TAGS).add(softwareVersion.tags.orEmpty().joinToString())
20+
}
21+
}
22+
23+
private fun Date?.printableReleaseDate() =
24+
if (this == null || year == null || month == null || day == null) "UNKNOWN"
25+
else "$year-${month.twoDigitString()}-${day.twoDigitString()}"
26+
27+
private fun TestEnvironmentInfo.createAndroidSoftwareVersionsTable() = buildTable(
28+
createTableColumnFor(OS_VERSION_ID),
29+
createTableColumnFor(VERSION),
30+
createTableColumnFor(CODE_NAME),
31+
createTableColumnFor(API_LEVEL),
32+
createTableColumnFor(RELEASE_DATE),
33+
createTableColumnFor(TAGS).applyColorsUsing(tagToSystemOutColorMapper)
34+
)
35+
36+
const val VERSION = "VERSION"
37+
const val CODE_NAME = "CODE_NAME"
38+
const val API_LEVEL = "API_LEVEL"
39+
const val RELEASE_DATE = "RELEASE_DATE"

test_runner/src/main/kotlin/ftl/environment/TestEnvironmentInfo.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,4 @@ const val RESOLUTION = "RESOLUTION"
2828
const val OS_VERSION_IDS = "OS_VERSION_IDS"
2929
const val TAGS = "TAGS"
3030
const val PHYSICAL_DEVICE = "PHYSICAL"
31+
const val OS_VERSION_ID = "OS_VERSION_ID"

test_runner/src/main/kotlin/ftl/reports/api/Utils.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ internal fun Double.format(): String = "%.3f".format(Locale.ROOT, this)
1212

1313
internal fun Int?.format() = (this ?: 0).toString()
1414

15+
internal fun Int.twoDigitString() = toString().padStart(2, '0')
16+
1517
internal fun Duration?.millis(): Double =
1618
if (this == null)
1719
0.0 else

0 commit comments

Comments
 (0)