From e6d23e81d8d4cd81a4d8a7ab63118a13d13737b6 Mon Sep 17 00:00:00 2001 From: peteyoungs <102791049+peteyoungs@users.noreply.github.com> Date: Mon, 24 Jun 2024 15:13:57 +0200 Subject: [PATCH] feat: support --pass-credentials option when adding repositories (#367) Co-authored-by: Peter YOUNGS Co-authored-by: Stephan Schnabel --- README.md | 1 + .../java/io/kokuwa/maven/helm/InitMojo.java | 12 +++++- .../maven/helm/pojo/HelmRepository.java | 8 ++++ .../io/kokuwa/maven/helm/InitMojoTest.java | 38 +++++++++++++++++++ 4 files changed, 58 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 78089a0c..e76b9dcb 100644 --- a/README.md +++ b/README.md @@ -281,6 +281,7 @@ Parameter | Type | User Property | Required | Description `` | string | helm.repositoryCache | false | path to the file containing cached repository indexes `` | string | helm.repositoryConfig | false | path to the file containing repository names and URLs ``| boolean | helm.repo.add.force-update | false | If `true`, replaces (overwrite) the repo if they already exists. +``| boolean | helm.repo.add.pass-credentials | false | If `true`, pass credentials to all domains `` | list of [HelmRepository](./src/main/java/io/kokuwa/maven/helm/pojo/HelmRepository.java) | | false | adds extra repositories while init ``| [HelmRepository](./src/main/java/io/kokuwa/maven/helm/pojo/HelmRepository.java) | | false | Upload repository for stable charts ``| [HelmRepository](./src/main/java/io/kokuwa/maven/helm/pojo/HelmRepository.java) | | false | Upload repository for snapshot charts (determined by version postfix 'SNAPSHOT') diff --git a/src/main/java/io/kokuwa/maven/helm/InitMojo.java b/src/main/java/io/kokuwa/maven/helm/InitMojo.java index b9de507d..3fb96a16 100644 --- a/src/main/java/io/kokuwa/maven/helm/InitMojo.java +++ b/src/main/java/io/kokuwa/maven/helm/InitMojo.java @@ -102,6 +102,15 @@ public class InitMojo extends AbstractHelmMojo { @Parameter(property = "helm.repo.add.force-update", defaultValue = "false") private boolean repositoryAddForceUpdate; + /** + * If true, pass credentials to all domains. Can be also specified on repository level in + * "helmExtraRepos". + * + * @since 6.15.0 + */ + @Parameter(property = "helm.repo.add.pass-credentials", defaultValue = "false") + private boolean repositoryAddPassCredentials; + /** * Download url of helm. * @@ -210,7 +219,8 @@ private void addRepository(HelmRepository repository, boolean authenticationRequ getLog().info("Adding repo [" + repository + "]"); HelmExecutable helm = helm() .arguments("repo", "add", repository.getName(), repository.getUrl()) - .flag("force-update", repositoryAddForceUpdate || repository.isForceUpdate()); + .flag("force-update", repositoryAddForceUpdate || repository.isForceUpdate()) + .flag("pass-credentials", repositoryAddPassCredentials || repository.isPassCredentials()); PasswordAuthentication auth = authenticationRequired ? getAuthentication(repository) : null; if (auth != null) { helm.flag("username", auth.getUserName()).flag("password", String.valueOf(auth.getPassword())); diff --git a/src/main/java/io/kokuwa/maven/helm/pojo/HelmRepository.java b/src/main/java/io/kokuwa/maven/helm/pojo/HelmRepository.java index a3ec36a9..cacaff95 100644 --- a/src/main/java/io/kokuwa/maven/helm/pojo/HelmRepository.java +++ b/src/main/java/io/kokuwa/maven/helm/pojo/HelmRepository.java @@ -54,4 +54,12 @@ public class HelmRepository { * @since 6.6.0 */ private boolean forceUpdate = false; + + /** + * If true, pass credentials to all domains (useful when the chart archive is on a different domain + * from the index.yaml, for example on a CDN) + * + * @since 6.15.0 + */ + private boolean passCredentials = false; } diff --git a/src/test/java/io/kokuwa/maven/helm/InitMojoTest.java b/src/test/java/io/kokuwa/maven/helm/InitMojoTest.java index 61eaf423..00538da2 100644 --- a/src/test/java/io/kokuwa/maven/helm/InitMojoTest.java +++ b/src/test/java/io/kokuwa/maven/helm/InitMojoTest.java @@ -344,6 +344,44 @@ void allKindsOfRepositories(InitMojo mojo) { "repo add extra3 https://example.org/extra3"); } + @DisplayName("with flag --pass-credentials") + @Test + void withPassCredentialsForAll(InitMojo mojo) { + mojo.setAddDefaultRepo(true); + mojo.setAddUploadRepos(true); + mojo.setRepositoryAddPassCredentials(true); + mojo.setHelmExtraRepos(new HelmRepository[] { new HelmRepository() + .setName("example") + .setUrl("https://example.org/repo/example") + .setPassCredentials(true) }); + mojo.setUploadRepoStable(new HelmRepository() + .setType(RepoType.ARTIFACTORY) + .setName("example-stable") + .setUrl("https://example.org/repo/stable")); + mojo.setUploadRepoSnapshot(new HelmRepository() + .setType(RepoType.ARTIFACTORY) + .setName("example-snapshot") + .setUrl("https://example.org/repo/snapshot")); + assertHelm(mojo, + "repo add stable " + InitMojo.STABLE_HELM_REPO + " --pass-credentials", + "repo add example-stable https://example.org/repo/stable --pass-credentials", + "repo add example-snapshot https://example.org/repo/snapshot --pass-credentials", + "repo add example https://example.org/repo/example --pass-credentials"); + } + + @DisplayName("with flag --pass-credentials for single repository") + @Test + void withPassCredentialsForSingleRepository(InitMojo mojo) { + mojo.setAddDefaultRepo(true); + mojo.setHelmExtraRepos(new HelmRepository[] { new HelmRepository() + .setName("example") + .setUrl("https://example.org/repo/example") + .setPassCredentials(true) }); + assertHelm(mojo, + "repo add stable " + InitMojo.STABLE_HELM_REPO, + "repo add example https://example.org/repo/example --pass-credentials"); + } + private File createTempDirectory() { return assertDoesNotThrow(() -> Files.createTempDirectory("helm-maven-plugin-test")).toFile(); }