Add README_RUN.md to pkg/app for better understanding Run struct
Signed-off-by: yxxhero <aiopsclub@163.com>
This commit is contained in:
		
							parent
							
								
									acaaa34d69
								
							
						
					
					
						commit
						f42f134b1d
					
				|  | @ -0,0 +1,72 @@ | ||||||
|  | # Run Struct | ||||||
|  | 
 | ||||||
|  | ## Overview | ||||||
|  | 
 | ||||||
|  | The `Run` struct is a core component of Helmfile's execution model, responsible for orchestrating the preparation, execution, and cleanup phases of Helmfile commands. It provides a consistent workflow for all Helmfile operations while maintaining separation of concerns. | ||||||
|  | 
 | ||||||
|  | ## Core Mechanics | ||||||
|  | 
 | ||||||
|  | ### The Preparation-Execution-Cleanup Pattern | ||||||
|  | 
 | ||||||
|  | At the heart of the `Run` package is the `withPreparedCharts` method, which implements a functional programming pattern to standardize how Helmfile commands are executed: | ||||||
|  | 
 | ||||||
|  | ```go | ||||||
|  | func (r *Run) withPreparedCharts(helmfileCommand string, opts state.ChartPrepareOptions, f func()) error { | ||||||
|  |     // Preparation phase | ||||||
|  |     // ... | ||||||
|  | 
 | ||||||
|  |     // Execution phase | ||||||
|  |     f() | ||||||
|  | 
 | ||||||
|  |     // Cleanup phase | ||||||
|  |     // ... | ||||||
|  | } | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | This pattern consists of three distinct phases: | ||||||
|  | 
 | ||||||
|  | 1. **Preparation Phase**: | ||||||
|  |    - Validates the current state | ||||||
|  |    - Syncs repositories if needed | ||||||
|  |    - Creates temporary directories for chart downloads | ||||||
|  |    - Triggers global prepare events | ||||||
|  |    - Downloads and processes charts | ||||||
|  | 
 | ||||||
|  | 2. **Execution Phase**: | ||||||
|  |    - Executes the command-specific logic provided as a function parameter | ||||||
|  |    - Command implementations are decoupled from chart preparation | ||||||
|  | 
 | ||||||
|  | 3. **Cleanup Phase**: | ||||||
|  |    - Triggers global cleanup events | ||||||
|  |    - Handles resource cleanup | ||||||
|  | 
 | ||||||
|  | ### Usage Example | ||||||
|  | 
 | ||||||
|  | Commands like `diff`, `apply`, or `template` use this pattern by providing their specific implementation as a function: | ||||||
|  | 
 | ||||||
|  | ```go | ||||||
|  | // Example: How the diff command uses withPreparedCharts | ||||||
|  | err := run.withPreparedCharts("diff", opts, func() { | ||||||
|  |     msg, matched, affected, errs = a.diff(run, c) | ||||||
|  | }) | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ## Benefits | ||||||
|  | 
 | ||||||
|  | - **Consistent Workflow**: All commands follow the same preparation, execution, and cleanup flow | ||||||
|  | - **Separation of Concerns**: Chart preparation logic is centralized and reused across commands | ||||||
|  | - **Resource Management**: Temporary resources are properly created and cleaned up | ||||||
|  | - **Extensibility**: New commands can be added by implementing their specific logic without duplicating preparation code | ||||||
|  | 
 | ||||||
|  | ## Key Components | ||||||
|  | 
 | ||||||
|  | - **ReleaseToChart**: Maps release identifiers to their prepared chart paths | ||||||
|  | - **Chart Preparation**: Handles downloading, modifying, and preparing charts for use | ||||||
|  | - **Repository Synchronization**: Ensures all required Helm repositories are available | ||||||
|  | - **Event Triggers**: Executes global prepare and cleanup events at appropriate times | ||||||
|  | 
 | ||||||
|  | ## Implementation Details | ||||||
|  | 
 | ||||||
|  | The `Run` struct maintains state throughout the execution lifecycle, ensuring that charts are prepared only once and that all commands have access to the prepared charts through the `ReleaseToChart` map. | ||||||
|  | 
 | ||||||
|  | Commands can focus on their specific implementation while relying on the `withPreparedCharts` method to handle all the common preparation and cleanup tasks. | ||||||
		Loading…
	
		Reference in New Issue