From f40fea795591126c6aca906a55af631decdabb69 Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Mon, 25 Mar 2024 12:40:10 +0100 Subject: [PATCH 1/2] Update the custom command mirror --- helmule/examples/giantswarm/charts/zot.yaml | 3 ++- helmule/examples/giantswarm/helmule.yaml | 11 +++++++---- helmule/src/main.rs | 3 ++- helmule/src/mirror/custom_command.rs | 6 +++--- lib/src/helm/git_repository.rs | 6 ++++++ lib/src/helm/helm_repository.rs | 17 +++++++++-------- lib/src/helm/repository.rs | 1 + 7 files changed, 30 insertions(+), 17 deletions(-) diff --git a/helmule/examples/giantswarm/charts/zot.yaml b/helmule/examples/giantswarm/charts/zot.yaml index 3b17f9b..a8a6f9a 100644 --- a/helmule/examples/giantswarm/charts/zot.yaml +++ b/helmule/examples/giantswarm/charts/zot.yaml @@ -21,4 +21,5 @@ patches: git: path: ../patches/git/zot.patch mirrors: - - apps-git + # - apps-git + - custom-command diff --git a/helmule/examples/giantswarm/helmule.yaml b/helmule/examples/giantswarm/helmule.yaml index 3bd26c2..d0533ba 100644 --- a/helmule/examples/giantswarm/helmule.yaml +++ b/helmule/examples/giantswarm/helmule.yaml @@ -4,10 +4,6 @@ variables: include: - kind: Charts path: ./charts/zot.yaml - - kind: Charts - path: ./charts/gitops-server.yaml - - kind: Charts - path: ./charts/external-secrets-operator.yaml patches: - name: yamlfmt custom_command: @@ -56,3 +52,10 @@ mirrors: commit: |- chore: mirror {{ name }}-{{ version }} upstream_repo: {{ repo_url }} + - name: custom-commands + custom_command: + package: + - helm package -d package . + upload: + - helm push ./package/{{ name }}-{{ version }}.tgz oci://registry.badhouseplants.net + - rm -rf ./package diff --git a/helmule/src/main.rs b/helmule/src/main.rs index 0f9f147..44ee561 100644 --- a/helmule/src/main.rs +++ b/helmule/src/main.rs @@ -61,6 +61,7 @@ fn exec(args: Args) -> Result<(), Box> { // First step is to pull the chart to the working dir let current_repo = chart.chart.find_repo(config.repositories.clone())?; let chart_path = current_repo.pull_chart(chart.chart.clone(), workdir_path.clone())?; + chart.chart.version = current_repo.get_version(chart_path.clone())?; if let Some(extensions) = chart.extensions.clone() { extensions .into_iter() @@ -89,7 +90,7 @@ fn exec(args: Args) -> Result<(), Box> { message_empty(&format!("{}", chart.chart.name)); Ok(()) })?; - todo!() + Ok(()) } fn main() { diff --git a/helmule/src/mirror/custom_command.rs b/helmule/src/mirror/custom_command.rs index e01f426..c11ef17 100644 --- a/helmule/src/mirror/custom_command.rs +++ b/helmule/src/mirror/custom_command.rs @@ -12,7 +12,7 @@ pub(crate) struct CustomCommands { impl Target for CustomCommands { fn push( &self, - workdir_path: String, + _: String, chart_path: String, chart_local: ChartExtended, dry_run: bool, @@ -21,14 +21,14 @@ impl Target for CustomCommands { let mut reg = helmzoo_lib::template::register_handlebars(); reg.register_template_string("cmd", cmd_tmpl)?; let cmd = reg.render("cmd", &chart_local)?; - cli_exec_from_dir(cmd, workdir_path.clone())?; + cli_exec_from_dir(cmd, chart_path.clone())?; } if !dry_run { for cmd_tmpl in self.upload.clone() { let mut reg = template::register_handlebars(); reg.register_template_string("cmd", cmd_tmpl)?; let cmd = reg.render("cmd", &chart_local)?; - cli_exec_from_dir(cmd, workdir_path.clone())?; + cli_exec_from_dir(cmd, chart_path.clone())?; } } Ok(()) diff --git a/lib/src/helm/git_repository.rs b/lib/src/helm/git_repository.rs index 66637ad..156fcee 100644 --- a/lib/src/helm/git_repository.rs +++ b/lib/src/helm/git_repository.rs @@ -73,4 +73,10 @@ impl RepositoryImpl for GitRepo { fn get_url(&self) -> String { self.url.clone() } + + fn get_version(&self, chart_path: String) -> Result> { + let cmd = "helm show chart . | yq '.version'".to_string(); + let version = cli_exec_from_dir(cmd, chart_path.clone())?; + Ok(version) + } } diff --git a/lib/src/helm/helm_repository.rs b/lib/src/helm/helm_repository.rs index 764d67c..81fe1d0 100644 --- a/lib/src/helm/helm_repository.rs +++ b/lib/src/helm/helm_repository.rs @@ -30,6 +30,12 @@ impl RepositoryImpl for HelmRepo { fn get_url(&self) -> String { self.url.clone() } + + fn get_version(&self, chart_path: String) -> Result> { + let cmd = "helm show chart . | yq '.version'".to_string(); + let version = cli_exec_from_dir(cmd, chart_path.clone())?; + Ok(version) + } } pub(crate) enum RepoKind { @@ -54,7 +60,7 @@ impl HelmRepo { } } - fn pull_oci(&self, chart: Chart, workdir_path: String) -> Result> { + fn pull_oci(&self, mut chart: Chart, workdir_path: String) -> Result> { let args = match chart.version.as_str() { LATEST_VERSION => "".to_string(), _ => format!("--version {}", chart.version.clone()), @@ -85,13 +91,11 @@ impl HelmRepo { Err(err) => return Err(Box::from(err)), }; - // TODO: Do we really need it? - let cmd = "helm show chart . | yq '.version'".to_string(); - let _version = cli_exec_from_dir(cmd, new_dir_name.clone())?; Ok(new_dir_name) } - fn pull_default(&self, chart: Chart, workdir_path: String) -> Result> { + + fn pull_default(&self, mut chart: Chart, workdir_path: String) -> Result> { // Add repo and update let repo_local_name = general_purpose::STANDARD_NO_PAD.encode(self.get_url()); let cmd = format!("helm repo add {} {}", repo_local_name, self.get_url()); @@ -125,9 +129,6 @@ impl HelmRepo { let cmd = format!("helm repo remove {}", repo_local_name); cli_exec(cmd)?; - // TODO: Do we really need it? - let cmd = "helm show chart . | yq '.version'".to_string(); - let _version = cli_exec_from_dir(cmd, new_dir_name.clone())?; Ok(new_dir_name) } } diff --git a/lib/src/helm/repository.rs b/lib/src/helm/repository.rs index ec0eebf..ca36a1b 100644 --- a/lib/src/helm/repository.rs +++ b/lib/src/helm/repository.rs @@ -27,6 +27,7 @@ pub(crate) enum RepositoryKind { pub trait RepositoryImpl { fn pull_chart(&self, chart: Chart, workdir_path: String) -> Result>; + fn get_version(&self, chart_path: String) -> Result>; fn get_url(&self) -> String; } -- 2.45.2 From 055072f491cafadc2fd7edbdbcd483a8f077b99a Mon Sep 17 00:00:00 2001 From: Nikolai Rodionov Date: Sat, 15 Jun 2024 20:54:19 +0200 Subject: [PATCH 2/2] Some updates --- helmule/src/config.rs | 7 +++++++ helmule/src/patches.rs | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/helmule/src/config.rs b/helmule/src/config.rs index 8a21e65..4ac0545 100644 --- a/helmule/src/config.rs +++ b/helmule/src/config.rs @@ -18,6 +18,12 @@ pub(crate) enum SupportedIncludes { Charts, } + +#[derive(Serialize, Deserialize, PartialEq, Debug, Clone, Default)] +pub(crate) struct Hooks{ + pre_hooks: Option>, + post_hooks: Option> +} #[derive(Serialize, Deserialize, PartialEq, Debug, Clone, Default)] pub(crate) struct ChartExtended { #[serde(flatten)] @@ -52,6 +58,7 @@ pub(crate) struct Config { pub(crate) patches: Option>, #[serde(default = "empty_vec")] pub(crate) mirrors: Vec, + pub(crate) hooks: Hooks, } fn empty_vec() -> Vec { diff --git a/helmule/src/patches.rs b/helmule/src/patches.rs index 251fc55..13e7155 100644 --- a/helmule/src/patches.rs +++ b/helmule/src/patches.rs @@ -1,4 +1,4 @@ -use std::{ + use std::{ fs::{self, read_dir, remove_dir_all, File, OpenOptions}, io::Write, path::{Path, PathBuf}, -- 2.45.2