Skip to content

fix: refactor cli version overrides to explicit options object - #438

Merged
cdsap merged 1 commit into
mainfrom
issue/437-hermes-refactor-cli-version-overrides-to-ex-a1
Sep 3, 2026
Merged

fix: refactor cli version overrides to explicit options object#438
cdsap merged 1 commit into
mainfrom
issue/437-hermes-refactor-cli-version-overrides-to-ex-a1

Conversation

@cdsap

@cdsap cdsap commented Sep 2, 2026

Copy link
Copy Markdown
Owner

Summary

Problem

cli/src/main/kotlin/io/github/cdsap/projectgenerator/cli/Main.kt:73-80 passes several independent CLI override values into resolveVersions, and Main.kt:115-140 applies those booleans and nullable strings directly while also resolving file-backed defaults. The behavior is already tested in cli/src/test/kotlin/io/github/cdsap/projectgenerator/cli/GenerateProjectsCliTest.kt:19-94, but the boundary between parsed CLI input and domain Versions composition is implicit.

Why this matters

Each new override flag has to expand the resolveVersions parameter list and duplicate call-site wiring in tests. That makes precedence rules harder to scan and easier to break, especially because false boolean flags intentionally mean 'do not override' rather than 'set false'.

Proposed change

Introduce a small internal CLI-only data class, for example VersionsOverrides, containing dependencyInjection, develocityUrl, roomDatabase, and kotlinMultiplatformLibrary, with an applyTo(base: Versions): Versions method. GenerateProjects.run should build this object from parsed Clikt values, resolve the base from VersionsFile?.resolve() ?: Versions(), then apply the overrides. Keep VersionsFile.resolve in the model unchanged so YAML parsing semantics stay separate from command-line precedence.

Notes

From a clean architecture lens, this keeps the CLI adapter responsible for translating transport-level flags into one application-level override object, while the core VersionsFile model remains focused on YAML default resolution.

Fixes #437

Changes

  • cli/src/main/kotlin/io/github/cdsap/projectgenerator/cli/GenerateProjectRequest.kt
  • cli/src/main/kotlin/io/github/cdsap/projectgenerator/cli/Main.kt
  • cli/src/main/kotlin/io/github/cdsap/projectgenerator/cli/VersionsResolver.kt
  • cli/src/test/kotlin/io/github/cdsap/projectgenerator/cli/GenerateProjectsCliTest.kt
  • cli/src/test/kotlin/io/github/cdsap/projectgenerator/cli/VersionsResolverTest.kt

Verification

  • ./gradlew :project-generator:unitTest
  • ./gradlew :cli:test
  • ./gradlew ktlintCheck

@cdsap
cdsap merged commit 7ca9606 into main Sep 3, 2026
12 checks passed
@cdsap
cdsap deleted the issue/437-hermes-refactor-cli-version-overrides-to-ex-a1 branch September 3, 2026 01:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Refactor CLI version overrides to explicit options object

1 participant