Skip to content

Commit

Permalink
feat: Add new output style to print smaller output (#1375)
Browse files Browse the repository at this point in the history
Fixes #1306 

## Test Plan
> How do we know the code works?

1. When using ```single```, ```verbose```, ```multi``` output style, the output should not change.
1. Set output style to ```compact``` (I'm not sure it's the best name for that, feel free to suggest other)
1. In this output style we should print: ```yaml```, ```count of test and shards```, ```link to firebase and matrix web links```, ```matrix and cost reports```, ```table with results``` 

## Output example

```

WARNING: disable-sharding enabled with max-test-shards = 1, Flank will ignore max-test-shard and disable sharding.
AndroidArgs
    gcloud:
      results-bucket: test-lab-v9cn46bb990nx-kz69ymd4nm9aq
      results-dir: 2020-12-04_16-34-33.963626_WvMf
      record-video: false
      timeout: 15m
      async: false
      client-details:
      network-profile: null
      results-history-name: null
      # Android gcloud
      app: /Users/adamfilipowicz/Repos/flank/test_runner/src/test/kotlin/ftl/fixtures/tmp/apk/app-debug.apk
      test: /Users/adamfilipowicz/Repos/flank/test_runner/src/test/kotlin/ftl/fixtures/tmp/apk/app-single-success-debug-androidTest.apk
      additional-apks:
      auto-google-login: false
      use-orchestrator: true
      directories-to-pull:
      grant-permissions: all
      type: null
      other-files:
      scenario-numbers:
      scenario-labels:
      obb-files:
      obb-names:
      performance-metrics: false
      num-uniform-shards: null
      test-runner-class: null
      test-targets:
      robo-directives:
      robo-script: null
      device:
        - model: NexusLowRes
          version: 28
          locale: en
          orientation: portrait
      num-flaky-test-attempts: 0
      test-targets-for-shard:
      fail-fast: false

    flank:
      max-test-shards: 1
      shard-time: -1
      num-test-runs: 1
      smart-flank-gcs-path: 
      smart-flank-disable-upload: false
      default-test-time: 120.0
      use-average-test-time-for-new-tests: false
      files-to-download:
      test-targets-always-run:
      disable-sharding: true
      project: flank-open-source
      local-result-dir: results
      full-junit-result: false
      # Android Flank Yml
      keep-file-path: false
      additional-app-test-apks:
      run-timeout: -1
      legacy-junit-result: false
      ignore-failed-tests: false
      output-style: compact
      disable-results-upload: false
      default-class-test-time: 240.0

RunTests
  1 test / 1 shard

  1 matrix ids created in 0m 18s
  https://console.developers.google.com/storage/browser/test-lab-v9cn46bb990nx-kz69ymd4nm9aq/2020-12-04_16-34-33.963626_WvMf

Matrices webLink
  matrix-1wl88r1wuwgov https://console.firebase.google.com/project/flank-open-source/testlab/histories/bh.da0c237aaa33732/matrices/4778909069129894447/executions/bs.b22378a05c11ef79

  3m 46s matrix-1wl88r1wuwgov FINISHED

CostReport
  Virtual devices
    $0.02 for 1m

MatrixResultsReport
  1 / 1 (100.00%)
┌─────────┬──────────────────────┬────────────────────────────┬────────────────────────────────┐
│ OUTCOME │      MATRIX ID       │      TEST AXIS VALUE       │          TEST DETAILS          │
├─────────┼──────────────────────┼────────────────────────────┼────────────────────────────────┤
│ success │ matrix-1wl88r1wuwgov │ NexusLowRes-28-en-portrait │ 1 test cases passed, 1 skipped │
└─────────┴──────────────────────┴────────────────────────────┴────────────────────────────────┘
  
Matrices webLink
  matrix-1wl88r1wuwgov https://console.firebase.google.com/project/flank-open-source/testlab/histories/bh.da0c237aaa33732/matrices/4778909069129894447/executions/bs.b22378a05c11ef79


Process finished with exit code 0

```
## Checklist

- [X] Documented
- [X] Unit tested
- [X] Integration tests passes
  • Loading branch information
adamfilipow92 authored Dec 7, 2020
1 parent 5cc0f1b commit 628a018
Show file tree
Hide file tree
Showing 70 changed files with 285 additions and 123 deletions.
8 changes: 5 additions & 3 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -305,11 +305,12 @@ flank:
## The JUnit XML is used to determine failure. (default: false)
# ignore-failed-tests: true

### Output Style
## Output style of execution status. May be one of [verbose, multi, single].
### Output Style flag
## Output style of execution status. May be one of [verbose, multi, single, compact].
## For runs with only one test execution the default value is 'verbose', in other cases
## 'multi' is used as the default. The output style 'multi' is not displayed correctly on consoles
## which don't support ansi codes, to avoid corrupted output use single or verbose.
## The output style `compact` is used to produce less detailed output, it prints just Args, test and matrix count, weblinks, cost, and result reports.
# output-style: single

### Full Junit Result flag
Expand Down Expand Up @@ -650,10 +651,11 @@ flank:
# legacy-junit-result: false

### Output Style flag
## Output style of execution status. May be one of [verbose, multi, single].
## Output style of execution status. May be one of [verbose, multi, single, compact].
## For runs with only one test execution the default value is 'verbose', in other cases
## 'multi' is used as the default. The output style 'multi' is not displayed correctly on consoles
## which don't support ansi codes, to avoid corrupted output use single or verbose.
## The output style `compact` is used to produce less detailed output, it prints just Args, test and matrix count, weblinks, cost, and result reports.
# output-style: single

### Full Junit Result flag
Expand Down
7 changes: 7 additions & 0 deletions docs/logging.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Logs in Flank

1. Log level depends on the output style.
1. ```Simple, multi``` and ```verbose``` output style prints logs from ```SIMPLE``` and ```DETAILED``` levels.
1. ```Compact``` style prints log only from ```SIMPLE``` level.
1. If you want a print message for all output styles uses ```log``` or ```logLn``` with only ```message``` parameter.
1. If you want print message more detailed message use ```log``` or ```logLn``` and set ```level``` to ```OutputLogLevel.DETAILED```
3 changes: 2 additions & 1 deletion test_runner/flank.ios.yml
Original file line number Diff line number Diff line change
Expand Up @@ -236,10 +236,11 @@ flank:
# ignore-failed-tests: true

### Output Style
## Output style of execution status. May be one of [verbose, multi, single].
## Output style of execution status. May be one of [verbose, multi, single, compact].
## For runs with only one test execution the default value is 'verbose', in other cases
## 'multi' is used as the default. The output style 'multi' is not displayed correctly on consoles
## which don't support ansi codes, to avoid corrupted output use single or verbose.
## The output style `compact` is used to produce less detailed output, it prints just Args, test and matrix count, weblinks, cost, and result reports.
# output-style: single

### Full Junit Result flag
Expand Down
3 changes: 2 additions & 1 deletion test_runner/flank.yml
Original file line number Diff line number Diff line change
Expand Up @@ -318,10 +318,11 @@ flank:
# legacy-junit-result: false

### Output Style flag
## Output style of execution status. May be one of [verbose, multi, single].
## Output style of execution status. May be one of [verbose, multi, single, compact].
## For runs with only one test execution the default value is 'verbose', in other cases
## 'multi' is used as the default. The output style 'multi' is not displayed correctly on consoles
## which don't support ansi codes, to avoid corrupted output use single or verbose.
## The output style `compact` is used to produce less detailed output, it prints just Args, test and matrix count, weblinks, cost, and result reports.
# output-style: single

### Full Junit Result flag
Expand Down
7 changes: 4 additions & 3 deletions test_runner/src/main/kotlin/ftl/Main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import ftl.cli.firebase.test.IPBlocksCommand
import ftl.cli.firebase.test.IosCommand
import ftl.cli.firebase.test.NetworkProfilesCommand
import ftl.cli.firebase.test.ProvidedSoftwareCommand
import ftl.log.logLn
import ftl.log.setDebugLogging
import ftl.util.readRevision
import ftl.util.readVersion
Expand Down Expand Up @@ -53,9 +54,9 @@ class Main : Runnable {
// Flank must invoke exitProcess to exit cleanly.
// https://github.com/bugsnag/bugsnag-java/issues/151
withGlobalExceptionHandling {
println("version: " + readVersion())
println("revision: " + readRevision())
println()
logLn("version: " + readVersion())
logLn("revision: " + readRevision())
logLn()
CommandLine(Main()).execute(*args)
}
}
Expand Down
3 changes: 2 additions & 1 deletion test_runner/src/main/kotlin/ftl/android/AndroidCatalog.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import ftl.environment.common.asPrintableTable
import ftl.environment.getLocaleDescription
import ftl.gc.GcTesting
import ftl.http.executeWithRetry
import ftl.log.logLn

/**
* Contains lists of possible Android device and version ids, as well as checks
Expand Down Expand Up @@ -77,7 +78,7 @@ object AndroidCatalog {
val form = deviceCatalog(projectId).models
.find { it.id.equals(modelId, ignoreCase = true) }?.form
?: DeviceType.PHYSICAL.name.also {
println("Unable to find device type for $modelId. PHYSICAL used as fallback in cost calculations")
logLn("Unable to find device type for $modelId. PHYSICAL used as fallback in cost calculations")
}

return form.equals(DeviceType.VIRTUAL.name, ignoreCase = true)
Expand Down
9 changes: 5 additions & 4 deletions test_runner/src/main/kotlin/ftl/args/ArgsHelper.kt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import ftl.config.credential
import ftl.config.defaultCredentialPath
import ftl.gc.GcStorage
import ftl.gc.GcToolResults
import ftl.log.logLn
import ftl.reports.xml.model.JUnitTestResult
import ftl.run.exception.FlankConfigurationError
import ftl.run.exception.FlankGeneralError
Expand Down Expand Up @@ -171,7 +172,7 @@ object ArgsHelper {
.build()
)
} catch (e: Exception) {
println("Warning: Failed to make bucket for $projectId\nCause: ${e.message}")
logLn("Warning: Failed to make bucket for $projectId\nCause: ${e.message}")
}

return bucket
Expand All @@ -187,8 +188,8 @@ object ArgsHelper {
GenericJson::class.java
)["project_id"] as String
} catch (e: Exception) {
println("Parsing $defaultCredentialPath failed:")
println(e.printStackTrace())
logLn("Parsing $defaultCredentialPath failed:")
logLn(e.printStackTrace())
}

return null
Expand All @@ -211,7 +212,7 @@ object ArgsHelper {
val envName = matcher.group(1)
val envValue: String? = System.getenv(envName)
if (envValue == null) {
println("WARNING: $envName not found")
logLn("WARNING: $envName not found")
}
matcher.appendReplacement(buffer, envValue ?: "")
}
Expand Down
8 changes: 8 additions & 0 deletions test_runner/src/main/kotlin/ftl/args/IArgs.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package ftl.args
import ftl.args.yml.Type
import ftl.config.Device
import ftl.config.common.CommonFlankConfig.Companion.defaultLocalResultsDir
import ftl.log.OutputLogLevel
import ftl.run.status.OutputStyle
import ftl.util.timeoutToMils

Expand Down Expand Up @@ -82,3 +83,10 @@ interface IArgs {
val validArgs: Map<String, List<String>>
}
}

val IArgs.logLevel
get() = if (outputStyle == OutputStyle.Compact) OutputLogLevel.SIMPLE else OutputLogLevel.DETAILED

fun IArgs.setupLogLevel() = also {
ftl.log.setLogLevel(logLevel)
}
9 changes: 5 additions & 4 deletions test_runner/src/main/kotlin/ftl/args/ValidateAndroidArgs.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import ftl.android.UnsupportedVersionId
import ftl.args.yml.Type
import ftl.config.containsPhysicalDevices
import ftl.config.containsVirtualDevices
import ftl.log.logLn
import ftl.run.exception.FlankConfigurationError
import ftl.run.exception.FlankGeneralError
import ftl.run.exception.IncompatibleTestDimensionError
Expand Down Expand Up @@ -146,7 +147,7 @@ private fun AndroidArgs.assertMaxTestShardsByDeviceType() =
}

private fun AndroidArgs.assertDevicesShards() {
if (inVirtualRange && !inPhysicalRange) println("Physical devices configured, but max-test-shards limit set to $maxTestShards, for physical devices range is ${IArgs.AVAILABLE_PHYSICAL_SHARD_COUNT_RANGE.first} to ${IArgs.AVAILABLE_PHYSICAL_SHARD_COUNT_RANGE.last}, you additionally have configured virtual devices. In this case, the physical limit will be decreased to: ${IArgs.AVAILABLE_PHYSICAL_SHARD_COUNT_RANGE.last}")
if (inVirtualRange && !inPhysicalRange) logLn("Physical devices configured, but max-test-shards limit set to $maxTestShards, for physical devices range is ${IArgs.AVAILABLE_PHYSICAL_SHARD_COUNT_RANGE.first} to ${IArgs.AVAILABLE_PHYSICAL_SHARD_COUNT_RANGE.last}, you additionally have configured virtual devices. In this case, the physical limit will be decreased to: ${IArgs.AVAILABLE_PHYSICAL_SHARD_COUNT_RANGE.last}")
else if (!inVirtualRange && !inPhysicalRange) throwMaxTestShardsLimitExceeded()
}

Expand Down Expand Up @@ -217,15 +218,15 @@ private fun AndroidArgs.assertOtherFiles() {

private fun AndroidArgs.checkEnvironmentVariables() {
if (environmentVariables.isNotEmpty() && directoriesToPull.isEmpty())
println("WARNING: environment-variables set but directories-to-pull is empty, this will result in the coverage file not downloading to the bucket.")
logLn("WARNING: environment-variables set but directories-to-pull is empty, this will result in the coverage file not downloading to the bucket.")
}

private fun AndroidArgs.checkFilesToDownload() {
if (filesToDownload.isNotEmpty() && directoriesToPull.isEmpty())
println("WARNING: files-to-download is set but directories-to-pull is empty, the coverage file may fail to download into the bucket.")
logLn("WARNING: files-to-download is set but directories-to-pull is empty, the coverage file may fail to download into the bucket.")
}

private fun AndroidArgs.checkNumUniformShards() {
if ((numUniformShards ?: 0) > 0 && disableSharding)
println("WARNING: disable-sharding is enabled with num-uniform-shards = $numUniformShards, Flank will ignore num-uniform-shards and disable sharding.")
logLn("WARNING: disable-sharding is enabled with num-uniform-shards = $numUniformShards, Flank will ignore num-uniform-shards and disable sharding.")
}
5 changes: 3 additions & 2 deletions test_runner/src/main/kotlin/ftl/args/ValidateCommonArgs.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import ftl.config.Device
import ftl.config.FtlConstants
import ftl.config.defaultCredentialPath
import ftl.gc.GcStorage
import ftl.log.logLn
import ftl.reports.FullJUnitReport
import ftl.reports.JUnitReport
import ftl.run.exception.FlankConfigurationError
Expand Down Expand Up @@ -72,10 +73,10 @@ private fun CommonArgs.assertSmartFlankGcsPath() = with(smartFlankGcsPath) {

fun IArgs.checkResultsDirUnique() {
if (useLegacyJUnitResult && GcStorage.exist(resultsBucket, resultsDir))
println("WARNING: Google cloud storage result directory should be unique, otherwise results from multiple test matrices will be overwritten or intermingled\n")
logLn("WARNING: Google cloud storage result directory should be unique, otherwise results from multiple test matrices will be overwritten or intermingled\n")
}

fun IArgs.checkDisableSharding() {
if (disableSharding && maxTestShards > 0)
println("WARNING: disable-sharding enabled with max-test-shards = $maxTestShards, Flank will ignore max-test-shard and disable sharding.")
logLn("WARNING: disable-sharding enabled with max-test-shards = $maxTestShards, Flank will ignore max-test-shard and disable sharding.")
}
5 changes: 3 additions & 2 deletions test_runner/src/main/kotlin/ftl/args/yml/YamlDeprecated.kt
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import com.fasterxml.jackson.databind.node.MissingNode
import com.fasterxml.jackson.databind.node.ObjectNode
import com.google.common.annotations.VisibleForTesting
import ftl.args.ArgsHelper.yamlMapper
import ftl.log.logLn
import ftl.util.loadFile
import ftl.run.exception.FlankConfigurationError
import ftl.run.exception.FlankGeneralError
Expand Down Expand Up @@ -116,7 +117,7 @@ object YamlDeprecated {
private fun validate(key: Key, keyValue: JsonNode): Transform? {
transforms.forEach {
if (it.old == key) {
println("${it.level}: `${it.old.parent}: ${it.old.name}:` renamed to `${it.new.parent}: ${it.new.name}:`")
logLn("${it.level}: `${it.old.parent}: ${it.old.name}:` renamed to `${it.new.parent}: ${it.new.name}:`")
return Transform(keyValue, it)
}
}
Expand All @@ -132,7 +133,7 @@ object YamlDeprecated {
val (errorDetected, string) = modify(loadFile(yamlPath))

Files.write(yamlPath, string.toByteArray())
println("\nUpdated ${yamlPath.fileName} file")
logLn("\nUpdated ${yamlPath.fileName} file")

return errorDetected
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,20 @@ package ftl.cli.firebase.test

import ftl.args.yml.YamlDeprecated
import ftl.args.yml.fixDevices
import ftl.log.logLn
import ftl.run.exception.YmlValidationError
import java.nio.file.Path

fun processValidation(validationResult: String, shouldFix: Boolean, ymlPath: Path) {
when {
validationResult.isBlank() -> println("Valid yml file")
validationResult.isBlank() -> logLn("Valid yml file")
!shouldFix -> {
println(validationResult)
logLn(validationResult)
throw YmlValidationError("Invalid yml file, use --fix for automatically fix yml")
}
else -> {
println(validationResult)
println("Trying to fix yml file")
logLn(validationResult)
logLn("Trying to fix yml file")
if (YamlDeprecated.modify(ymlPath)) {
throw YmlValidationError("Invalid yml file, unable to fix yml file")
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package ftl.cli.firebase.test.android

import ftl.args.AndroidArgs
import ftl.args.setupLogLevel
import ftl.args.validate
import ftl.cli.firebase.test.CommonRunCommand
import ftl.config.FtlConstants
Expand Down Expand Up @@ -45,6 +46,7 @@ class AndroidRunCommand : CommonRunCommand(), Runnable {
}

AndroidArgs.load(Paths.get(configPath), cli = this).validate().run {
setupLogLevel()
runBlocking {
if (dumpShards) dumpShards()
else newTestRun()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import ftl.config.FtlConstants
import ftl.environment.ipBlocksListAsTable
import ftl.environment.networkConfigurationAsTable
import ftl.environment.providedSoftwareAsTable
import ftl.log.logLn
import picocli.CommandLine
import java.nio.file.Paths

Expand All @@ -28,13 +29,13 @@ import java.nio.file.Paths
class AndroidTestEnvironmentCommand : Runnable {
override fun run() {
val projectId = AndroidArgs.loadOrDefault(Paths.get(configPath)).project
println(devicesCatalogAsTable(projectId))
println(supportedVersionsAsTable(projectId))
println(localesAsTable(projectId))
println(providedSoftwareAsTable())
println(networkConfigurationAsTable())
println(supportedOrientationsAsTable(projectId))
println(ipBlocksListAsTable())
logLn(devicesCatalogAsTable(projectId))
logLn(supportedVersionsAsTable(projectId))
logLn(localesAsTable(projectId))
logLn(providedSoftwareAsTable())
logLn(networkConfigurationAsTable())
logLn(supportedOrientationsAsTable(projectId))
logLn(ipBlocksListAsTable())
}

@CommandLine.Option(names = ["-c", "--config"], description = ["YAML config file path"])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package ftl.cli.firebase.test.android.configuration
import ftl.android.AndroidCatalog.getLocaleDescription
import ftl.args.AndroidArgs
import ftl.config.FtlConstants
import ftl.log.log
import ftl.run.exception.FlankConfigurationError
import picocli.CommandLine
import java.nio.file.Paths
Expand All @@ -20,7 +21,7 @@ import java.nio.file.Paths
class AndroidLocalesDescribeCommand : Runnable {
override fun run() {
if (locale.isBlank()) throw FlankConfigurationError("Argument LOCALE must be specified.")
print(getLocaleDescription(AndroidArgs.loadOrDefault(Paths.get(configPath)).project, locale))
log(getLocaleDescription(AndroidArgs.loadOrDefault(Paths.get(configPath)).project, locale))
}

@CommandLine.Parameters(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package ftl.cli.firebase.test.android.configuration
import ftl.android.AndroidCatalog
import ftl.args.AndroidArgs
import ftl.config.FtlConstants
import ftl.log.logLn
import picocli.CommandLine
import java.nio.file.Paths

Expand All @@ -19,7 +20,7 @@ import java.nio.file.Paths
)
class AndroidLocalesListCommand : Runnable {
override fun run() {
println(AndroidCatalog.localesAsTable(projectId = AndroidArgs.loadOrDefault(Paths.get(configPath)).project))
logLn(AndroidCatalog.localesAsTable(projectId = AndroidArgs.loadOrDefault(Paths.get(configPath)).project))
}

@CommandLine.Option(names = ["-c", "--config"], description = ["YAML config file path"])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package ftl.cli.firebase.test.android.models
import ftl.android.AndroidCatalog
import ftl.args.AndroidArgs
import ftl.config.FtlConstants
import ftl.log.logLn
import ftl.run.exception.FlankConfigurationError
import picocli.CommandLine
import java.nio.file.Paths
Expand All @@ -20,7 +21,7 @@ import java.nio.file.Paths
class AndroidModelDescribeCommand : Runnable {
override fun run() {
if (modelId.isBlank()) throw FlankConfigurationError("Argument MODEL_ID must be specified.")
println(AndroidCatalog.describeModel(AndroidArgs.loadOrDefault(Paths.get(configPath)).project, modelId))
logLn(AndroidCatalog.describeModel(AndroidArgs.loadOrDefault(Paths.get(configPath)).project, modelId))
}

@CommandLine.Option(names = ["-c", "--config"], description = ["YAML config file path"])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package ftl.cli.firebase.test.android.models
import ftl.android.AndroidCatalog
import ftl.args.AndroidArgs
import ftl.config.FtlConstants
import ftl.log.logLn
import picocli.CommandLine
import java.nio.file.Paths

Expand All @@ -19,7 +20,7 @@ import java.nio.file.Paths
)
class AndroidModelsListCommand : Runnable {
override fun run() {
println(AndroidCatalog.devicesCatalogAsTable(AndroidArgs.loadOrDefault(Paths.get(configPath)).project))
logLn(AndroidCatalog.devicesCatalogAsTable(AndroidArgs.loadOrDefault(Paths.get(configPath)).project))
}

@CommandLine.Option(names = ["-c", "--config"], description = ["YAML config file path"])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package ftl.cli.firebase.test.android.orientations
import ftl.android.AndroidCatalog
import ftl.args.AndroidArgs
import ftl.config.FtlConstants
import ftl.log.logLn
import picocli.CommandLine
import java.nio.file.Paths

Expand All @@ -19,7 +20,7 @@ import java.nio.file.Paths
)
class AndroidOrientationsListCommand : Runnable {
override fun run() {
println(AndroidCatalog.supportedOrientationsAsTable(AndroidArgs.loadOrDefault(Paths.get(configPath)).project))
logLn(AndroidCatalog.supportedOrientationsAsTable(AndroidArgs.loadOrDefault(Paths.get(configPath)).project))
}

@CommandLine.Option(names = ["-c", "--config"], description = ["YAML config file path"])
Expand Down
Loading

0 comments on commit 628a018

Please sign in to comment.