-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Sviatoslav Dumchenko edited this page Oct 31, 2022
·
3 revisions
stateDiagram-v2
[*] --> ParseChartFile
ParseChartFile --> HelmBuild
ParseChartFile --> WaveBuild
HelmBuild --> PackageChart
WaveBuild --> PackageChart
PackageChart --> UploadChart
UploadChart --> [*]
ParseChartFile: Parse Chartfile
state ParseChartFile {
ParseBuildMode: Parse build mode (helm-compatible or chartwave v1)
ParseCommands: Parse build commands
BuildDependencies: Build dependencies graph for builder
ParseBuildMode --> ParseCommands
ParseCommands --> BuildDependencies
}
HelmBuild: Helm-compatible builder
state HelmBuild {
HelmDownloadBaseTarget: Download base target helm chart to tmpdir
HelmDownloadBaseDep1: Download base dependency helm chart to tmpdir
HelmDownloadBaseDep2: Download base dependency helm chart to tmpdir
HelmRunCommandsTarget: Run commands in the chart dir (tmpdir)
HelmRunCommandsDep1: Run commands in the chart dir (tmpdir)
HelmRunCommandsDep2: Run commands in the chart dir (tmpdir)
HelmPackageIntermediate: Package intermediate result (e.g. copy to predefined directory)
HelmBuildTarget: Build target helm chart
state HelmBuildTarget {
HelmDownloadBaseTarget --> HelmRunCommandsTarget
}
HelmBuildDep1: Build dependency target
state HelmBuildDep1 {
HelmDownloadBaseDep1 --> HelmRunCommandsDep1
}
HelmBuildDep2: Build dependency target
state HelmBuildDep2 {
HelmDownloadBaseDep2 --> HelmRunCommandsDep2
}
HelmBuildDep1 --> HelmBuildTarget
HelmBuildDep2 --> HelmBuildTarget
HelmBuildTarget --> HelmPackageIntermediate
}
WaveBuild: Chartwave v1 builder
state WaveBuild {
WaveDownloadBaseTarget: Download base target Chartwave v1 chart to tmpdir
WaveDownloadBaseDep1: Download base dependency Chartwave v1 chart to tmpdir
WaveDownloadBaseDep2: Download base dependency Chartwave v1 chart to tmpdir
WaveRunCommandsTarget: Run commands in the chart dir (tmpdir)
WaveRunCommandsDep1: Run commands in the chart dir (tmpdir)
WaveRunCommandsDep2: Run commands in the chart dir (tmpdir)
WavePackageIntermediate: Package intermediate result (e.g. copy to predefined directory)
WaveBuildTarget: Build target Chartwave v1 chart
state WaveBuildTarget {
WaveDownloadBaseTarget --> WaveRunCommandsTarget
}
WaveBuildDep1: Build dependency target
state WaveBuildDep1 {
WaveDownloadBaseDep1 --> WaveRunCommandsDep1
}
WaveBuildDep2: Build dependency target
state WaveBuildDep2 {
WaveDownloadBaseDep2 --> WaveRunCommandsDep2
}
WaveBuildDep1 --> WaveBuildTarget
WaveBuildDep2 --> WaveBuildTarget
WaveBuildTarget --> WavePackageIntermediate
}
PackageChart: Package Chart
state PackageChart {
HelmPackageArchive: Create helm-compatible tar.gz archive
--
HelmPackageOCI: Create helm-compatible OCI image
--
WavePackageOCI: Create chartwave v1 OCI image
}
UploadChart: Upload Chart
state UploadChart {
UploadChartArchive: HTTP PUT/POST archive
--
UploadChartOCI: Push OCI image to OCI registry
}
stateDiagram-v2
DownloadChart: Download chart as archive or OCI image. Skip for local charts
DetectArch: Detect chart architecture (helm or chartwave v1)
[*] --> DownloadChart
DownloadChart --> DetectArch
DetectArch --> DeployHelm: if arch == helm
DetectArch --> DeployWave: if arch == chartwave
DeployHelm --> [*]
DeployWave --> [*]
DeployHelm: Deploy using Helm
state DeployHelm {
PrepareHelm: Prepare helm (copy from helmwave)
RunHelm: Run helm (copy from helmwave)
PrepareHelm --> RunHelm
}
DeployWave: Deploy using Chartwave
state DeployWave {
RunTemplater: Run templater (sprig or gomplate)
PreprocessDependencies: Try to process all dependencies (like self-dependencies or already known values)
BuildDependencies: Build dependencies graph for manifests (self-dependencies outside of graph)
AcquireLease: Acquire Kubernetes lease.coordination.k8s.io
SavePendingState: Save pending release state (secret?)
ApplyManifest: Apply manifest via kubectl apply
FetchManifest: Fetch applied manifest
ProcessDependencies: Process dependencies on applied manifest
SaveFailedState: Save failed release state
SaveSuccessState: Save succeeded release state (secret?)
ReleaseLease: Release Kubernetes lease.coordination.k8s.io
RunTemplater --> PreprocessDependencies
PreprocessDependencies --> BuildDependencies
BuildDependencies --> AcquireLease
AcquireLease --> SavePendingState
SavePendingState --> ApplyManifest
ApplyManifest --> FetchManifest
FetchManifest --> ProcessDependencies
ProcessDependencies --> ApplyManifest: Dependencies graph cycle
ApplyManifest --> SaveFailedState: Apply failed
ProcessDependencies --> SaveSuccessState: No more manifests in graph
SaveFailedState --> ReleaseLease
SaveSuccessState --> ReleaseLease
}