368 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			368 lines
		
	
	
		
			9.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| @startuml "Helmfile Commands Flow"
 | |
| 
 | |
| ' Color scheme - eye-friendly colors with darker headers
 | |
| skinparam {
 | |
|   ClassBackgroundColor #E8F4F9
 | |
|   ClassHeaderBackgroundColor #5D8AA8
 | |
|   ClassFontColor #000000
 | |
|   ClassStereotypeFontColor #FFFFFF
 | |
|   ClassAttributeFontColor #000000
 | |
|   ClassFontStyle bold
 | |
| 
 | |
|   PackageBackgroundColor #F5F5F5
 | |
|   PackageBorderColor #DDDDDD
 | |
| 
 | |
|   NoteBackgroundColor #FFF8DC
 | |
|   NoteBorderColor #DCDCAA
 | |
| 
 | |
|   ArrowColor #5D8AA8
 | |
| }
 | |
| 
 | |
| package "cmd" {
 | |
|   class "RootCmd" as RootCmd {
 | |
|     +Execute(): error
 | |
|   }
 | |
| 
 | |
|   class "DiffCmd" as DiffCmd {
 | |
|     +RunE(cmd *cobra.Command, args []string): error
 | |
|   }
 | |
| 
 | |
|   class "ApplyCmd" as ApplyCmd {
 | |
|     +RunE(cmd *cobra.Command, args []string): error
 | |
|   }
 | |
| 
 | |
|   class "SyncCmd" as SyncCmd {
 | |
|     +RunE(cmd *cobra.Command, args []string): error
 | |
|   }
 | |
| 
 | |
|   class "TemplateCmd" as TemplateCmd {
 | |
|     +RunE(cmd *cobra.Command, args []string): error
 | |
|   }
 | |
| 
 | |
|   class "LintCmd" as LintCmd {
 | |
|     +RunE(cmd *cobra.Command, args []string): error
 | |
|   }
 | |
| 
 | |
|   class "StatusCmd" as StatusCmd {
 | |
|     +RunE(cmd *cobra.Command, args []string): error
 | |
|   }
 | |
| 
 | |
|   class "DeleteCmd" as DeleteCmd {
 | |
|     +RunE(cmd *cobra.Command, args []string): error
 | |
|   }
 | |
| 
 | |
|   class "TestCmd" as TestCmd {
 | |
|     +RunE(cmd *cobra.Command, args []string): error
 | |
|   }
 | |
| 
 | |
|   class "FetchCmd" as FetchCmd {
 | |
|     +RunE(cmd *cobra.Command, args []string): error
 | |
|   }
 | |
| 
 | |
|   class "WriteValuesCmd" as WriteValuesCmd {
 | |
|     +RunE(cmd *cobra.Command, args []string): error
 | |
|   }
 | |
| }
 | |
| 
 | |
| package "pkg/config" {
 | |
|   interface "ConfigProvider" as ConfigProvider {
 | |
|     +KubeContext(): string
 | |
|     +HelmBinary(): string
 | |
|     +Logger(): *zap.SugaredLogger
 | |
|     +Args(): string
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   interface "DiffConfigProvider" as DiffConfigProvider {
 | |
|     +DiffArgs(): string
 | |
|     +DetailedExitcode(): bool
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   interface "ApplyConfigProvider" as ApplyConfigProvider {
 | |
|     +SyncArgs(): string
 | |
|     +Wait(): bool
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   interface "SyncConfigProvider" as SyncConfigProvider {
 | |
|     +SyncArgs(): string
 | |
|     +Wait(): bool
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   interface "TemplateConfigProvider" as TemplateConfigProvider {
 | |
|     +OutputDir(): string
 | |
|     +IncludeCRDs(): bool
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   interface "LintConfigProvider" as LintConfigProvider {
 | |
|     +Values(): []string
 | |
|     +Set(): []string
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   interface "StatusesConfigProvider" as StatusesConfigProvider {
 | |
|     +Args(): string
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   interface "DestroyConfigProvider" as DestroyConfigProvider {
 | |
|     +Args(): string
 | |
|     +Cascade(): string
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   interface "TestConfigProvider" as TestConfigProvider {
 | |
|     +Cleanup(): bool
 | |
|     +Logs(): bool
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   interface "FetchConfigProvider" as FetchConfigProvider {
 | |
|     +OutputDir(): string
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   interface "WriteValuesConfigProvider" as WriteValuesConfigProvider {
 | |
|     +OutputFileTemplate(): string
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   class "GlobalImpl" as GlobalImpl {
 | |
|     +GlobalOptions: *GlobalOptions
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   class "DiffImpl" as DiffImpl {
 | |
|     +GlobalImpl: *GlobalImpl
 | |
|     +DiffOptions: *DiffOptions
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   class "ApplyImpl" as ApplyImpl {
 | |
|     +GlobalImpl: *GlobalImpl
 | |
|     +ApplyOptions: *ApplyOptions
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   class "SyncImpl" as SyncImpl {
 | |
|     +GlobalImpl: *GlobalImpl
 | |
|     +SyncOptions: *SyncOptions
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   class "TemplateImpl" as TemplateImpl {
 | |
|     +GlobalImpl: *GlobalImpl
 | |
|     +TemplateOptions: *TemplateOptions
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   class "LintImpl" as LintImpl {
 | |
|     +GlobalImpl: *GlobalImpl
 | |
|     +LintOptions: *LintOptions
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   class "StatusImpl" as StatusImpl {
 | |
|     +GlobalImpl: *GlobalImpl
 | |
|     +StatusOptions: *StatusOptions
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   class "DestroyImpl" as DestroyImpl {
 | |
|     +GlobalImpl: *GlobalImpl
 | |
|     +DestroyOptions: *DestroyOptions
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   class "TestImpl" as TestImpl {
 | |
|     +GlobalImpl: *GlobalImpl
 | |
|     +TestOptions: *TestOptions
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   class "FetchImpl" as FetchImpl {
 | |
|     +GlobalImpl: *GlobalImpl
 | |
|     +FetchOptions: *FetchOptions
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   class "WriteValuesImpl" as WriteValuesImpl {
 | |
|     +GlobalImpl: *GlobalImpl
 | |
|     +WriteValuesOptions: *WriteValuesOptions
 | |
|     +...()
 | |
|   }
 | |
| }
 | |
| 
 | |
| package "pkg/app" {
 | |
|   class "App" as App {
 | |
|     +OverrideKubeContext: string
 | |
|     +OverrideHelmBinary: string
 | |
|     +Logger: *zap.SugaredLogger
 | |
|     +...
 | |
|     +New(conf ConfigProvider): *App
 | |
|     +Diff(c DiffConfigProvider): error
 | |
|     +Apply(c ApplyConfigProvider): error
 | |
|     +Sync(c SyncConfigProvider): error
 | |
|     +Template(c TemplateConfigProvider): error
 | |
|     +Lint(c LintConfigProvider): error
 | |
|     +Status(c StatusesConfigProvider): error
 | |
|     +Destroy(c DestroyConfigProvider): error
 | |
|     +Test(c TestConfigProvider): error
 | |
|     +Fetch(c FetchConfigProvider): error
 | |
|     +WriteValues(c WriteValuesConfigProvider): error
 | |
|     +...()
 | |
|   }
 | |
| 
 | |
|   class "Run" as Run {
 | |
|     +state: *state.HelmState
 | |
|     +helm: helmexec.Interface
 | |
|     +ctx: Context
 | |
|     +ReleaseToChart: map[state.PrepareChartKey]string
 | |
|     +...
 | |
|     +diff(...): (...)
 | |
|     +withPreparedCharts(...): error
 | |
|     +...()
 | |
|   }
 | |
| }
 | |
| 
 | |
| package "pkg/state" {
 | |
|   class "HelmState" as HelmState {
 | |
|     +FilePath: string
 | |
|     +Releases: []ReleaseSpec
 | |
|     +...
 | |
|     +DiffReleases(...): ([]ReleaseSpec, []error)
 | |
|     +SyncReleases(...): []error
 | |
|     +TemplateReleases(...): []error
 | |
|     +LintReleases(...): []error
 | |
|     +ReleaseStatuses(...): []error
 | |
|     +DeleteReleases(...): []error
 | |
|     +TestReleases(...): []error
 | |
|     +WriteReleasesValues(...): []error
 | |
|     +PrepareCharts(...): (map[PrepareChartKey]string, []error)
 | |
|     +...()
 | |
|   }
 | |
| }
 | |
| 
 | |
| package "pkg/helmexec" {
 | |
|   interface "Interface" as HelmExec {
 | |
|     +SetExtraArgs(...string)
 | |
|     +DiffRelease(...): error
 | |
|     +SyncRelease(...): error
 | |
|     +TemplateRelease(...): error
 | |
|     +Lint(...): error
 | |
|     +ReleaseStatus(...): error
 | |
|     +DeleteRelease(...): error
 | |
|     +TestRelease(...): error
 | |
|     +...()
 | |
|   }
 | |
| }
 | |
| 
 | |
| ' Root command relationships
 | |
| RootCmd --> DiffCmd : adds subcommand
 | |
| RootCmd --> ApplyCmd : adds subcommand
 | |
| RootCmd --> SyncCmd : adds subcommand
 | |
| RootCmd --> TemplateCmd : adds subcommand
 | |
| RootCmd --> LintCmd : adds subcommand
 | |
| RootCmd --> StatusCmd : adds subcommand
 | |
| RootCmd --> DeleteCmd : adds subcommand
 | |
| RootCmd --> TestCmd : adds subcommand
 | |
| RootCmd --> FetchCmd : adds subcommand
 | |
| RootCmd --> WriteValuesCmd : adds subcommand
 | |
| 
 | |
| ' Command to Config Impl relationships
 | |
| DiffCmd --> DiffImpl : creates
 | |
| ApplyCmd --> ApplyImpl : creates
 | |
| SyncCmd --> SyncImpl : creates
 | |
| TemplateCmd --> TemplateImpl : creates
 | |
| LintCmd --> LintImpl : creates
 | |
| StatusCmd --> StatusImpl : creates
 | |
| DeleteCmd --> DestroyImpl : creates
 | |
| TestCmd --> TestImpl : creates
 | |
| FetchCmd --> FetchImpl : creates
 | |
| WriteValuesCmd --> WriteValuesImpl : creates
 | |
| 
 | |
| ' Command to App relationships
 | |
| DiffCmd --> App : creates and uses
 | |
| ApplyCmd --> App : creates and uses
 | |
| SyncCmd --> App : creates and uses
 | |
| TemplateCmd --> App : creates and uses
 | |
| LintCmd --> App : creates and uses
 | |
| StatusCmd --> App : creates and uses
 | |
| DeleteCmd --> App : creates and uses
 | |
| TestCmd --> App : creates and uses
 | |
| FetchCmd --> App : creates and uses
 | |
| WriteValuesCmd --> App : creates and uses
 | |
| 
 | |
| ' Config interface implementations
 | |
| DiffConfigProvider <|.. DiffImpl : implements
 | |
| ApplyConfigProvider <|.. ApplyImpl : implements
 | |
| SyncConfigProvider <|.. SyncImpl : implements
 | |
| TemplateConfigProvider <|.. TemplateImpl : implements
 | |
| LintConfigProvider <|.. LintImpl : implements
 | |
| StatusesConfigProvider <|.. StatusImpl : implements
 | |
| DestroyConfigProvider <|.. DestroyImpl : implements
 | |
| TestConfigProvider <|.. TestImpl : implements
 | |
| FetchConfigProvider <|.. FetchImpl : implements
 | |
| WriteValuesConfigProvider <|.. WriteValuesImpl : implements
 | |
| 
 | |
| ConfigProvider <|.. GlobalImpl : implements
 | |
| GlobalImpl <-- DiffImpl : contains
 | |
| GlobalImpl <-- ApplyImpl : contains
 | |
| GlobalImpl <-- SyncImpl : contains
 | |
| GlobalImpl <-- TemplateImpl : contains
 | |
| GlobalImpl <-- LintImpl : contains
 | |
| GlobalImpl <-- StatusImpl : contains
 | |
| GlobalImpl <-- DestroyImpl : contains
 | |
| GlobalImpl <-- TestImpl : contains
 | |
| GlobalImpl <-- FetchImpl : contains
 | |
| GlobalImpl <-- WriteValuesImpl : contains
 | |
| 
 | |
| ' App relationships
 | |
| App --> Run : creates and uses
 | |
| App ..> DiffConfigProvider : uses for Diff()
 | |
| App ..> ApplyConfigProvider : uses for Apply()
 | |
| App ..> SyncConfigProvider : uses for Sync()
 | |
| App ..> TemplateConfigProvider : uses for Template()
 | |
| App ..> LintConfigProvider : uses for Lint()
 | |
| App ..> StatusesConfigProvider : uses for Status()
 | |
| App ..> DestroyConfigProvider : uses for Destroy()
 | |
| App ..> TestConfigProvider : uses for Test()
 | |
| App ..> FetchConfigProvider : uses for Fetch()
 | |
| App ..> WriteValuesConfigProvider : uses for WriteValues()
 | |
| 
 | |
| ' Run relationships
 | |
| Run --> HelmState : operates on
 | |
| Run --> HelmExec : executes helm commands
 | |
| 
 | |
| ' State relationships
 | |
| HelmState ..> HelmExec : uses for helm operations
 | |
| 
 | |
| note right of RootCmd
 | |
|   Command Flow:
 | |
|   1. Root command adds subcommands
 | |
|   2. Each subcommand parses flags into its Config implementation
 | |
|   3. Creates App with Config implementation
 | |
|   4. Calls corresponding App method
 | |
| end note
 | |
| 
 | |
| note right of App
 | |
|   App Flow:
 | |
|   1. ForEachState() loads state files
 | |
|   2. Creates Run instances
 | |
|   3. Calls appropriate Run methods
 | |
|   4. Run methods use HelmState for operations
 | |
| end note
 | |
| 
 | |
| note right of Run
 | |
|   Run Flow:
 | |
|   1. withPreparedCharts() prepares charts
 | |
|   2. Command-specific methods execute operations
 | |
|   3. Uses HelmState for actual operations
 | |
|   4. HelmState uses helmexec interface
 | |
| end note
 | |
| 
 | |
| @enduml
 |