-
Notifications
You must be signed in to change notification settings - Fork 55
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Carter Cundiff <[email protected]>
- Loading branch information
1 parent
0e39534
commit 8748c9b
Showing
6 changed files
with
188 additions
and
48 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
75 changes: 75 additions & 0 deletions
75
src/main/java/io/kokuwa/maven/helm/AbstractDependencyMojo.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
package io.kokuwa.maven.helm; | ||
|
||
import java.nio.file.Path; | ||
|
||
import org.apache.maven.plugin.MojoExecutionException; | ||
import org.apache.maven.plugins.annotations.Parameter; | ||
|
||
import io.kokuwa.maven.helm.util.DependencyOverwriter; | ||
import lombok.Setter; | ||
|
||
/** | ||
* Base class for dependency build and update mojos | ||
* | ||
* @since 6.10.2 | ||
*/ | ||
@Setter | ||
public abstract class AbstractDependencyMojo extends AbstractHelmMojo { | ||
|
||
/** | ||
* Controls whether a local path chart should be used for a chart dependency. When set to <code>true</code>, chart | ||
* dependencies on a local path chart will be overwritten with the respective properties set by | ||
* "helm.overwriteDependencyVersion" and "helm.overwriteDependencyRepository". This is helpful for deploying charts | ||
* with intra repository dependencies, while still being able to use local path dependencies for development builds. | ||
* | ||
* Example usage: | ||
* <ul> | ||
* <li>For development: mvn clean install</li> | ||
* <li>For deployment: mvn clean deploy -Dhelm.overwriteLocalDependencies=true</li> | ||
* </ul> | ||
* | ||
* @since 6.10.0 | ||
*/ | ||
@Parameter(property = "helm.overwriteLocalDependencies", defaultValue = "false") | ||
protected boolean overwriteLocalDependencies; | ||
|
||
/** | ||
* Value used to overwrite a local path chart's version within a chart's dependencies. The property | ||
* "helm.overwriteLocalDependencies" must be set to <code>true</code> for this to apply. | ||
* | ||
* @since 6.10.0 | ||
*/ | ||
@Parameter(property = "helm.overwriteDependencyVersion") | ||
protected String overwriteDependencyVersion; | ||
|
||
/** | ||
* Value used to overwrite a local path chart's repository within a chart's dependencies. The property | ||
* "helm.overwriteLocalDependencies" must be set to <code>true</code> for this to apply. | ||
* | ||
* @since 6.10.0 | ||
*/ | ||
@Parameter(property = "helm.overwriteDependencyRepository") | ||
protected String overwriteDependencyRepository; | ||
|
||
/** | ||
* Overwrites the local path of a chart dependency with the desired repository and version when | ||
* helm.overwriteLocalDependencies is set to <code>true</code>. | ||
* | ||
* @param chartDirectory directory containing a Helm chart | ||
* @throws MojoExecutionException Null value for 'overwriteDependencyRepository' | ||
* | ||
* @since 6.10.2 | ||
*/ | ||
protected void doOverwriteLocalDependencies(Path chartDirectory) throws MojoExecutionException { | ||
if (overwriteLocalDependencies) { | ||
if (overwriteDependencyRepository == null) { | ||
throw new MojoExecutionException("Null value for 'overwriteDependencyRepository' is " + | ||
"not allowed when using 'overwriteLocalDependencies'. See the README for more details."); | ||
} | ||
getLog().info("Overwriting dependencies that contain local path charts with " | ||
+ overwriteDependencyRepository); | ||
new DependencyOverwriter(overwriteDependencyRepository, overwriteDependencyVersion, getLog()) | ||
.execute(chartDirectory); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
48 changes: 48 additions & 0 deletions
48
src/main/java/io/kokuwa/maven/helm/DependencyUpdateMojo.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
package io.kokuwa.maven.helm; | ||
|
||
import java.nio.file.Path; | ||
|
||
import org.apache.maven.plugin.MojoExecutionException; | ||
import org.apache.maven.plugins.annotations.LifecyclePhase; | ||
import org.apache.maven.plugins.annotations.Mojo; | ||
import org.apache.maven.plugins.annotations.Parameter; | ||
|
||
import lombok.Setter; | ||
|
||
/** | ||
* Mojo for executing "helm dependency-update". | ||
* | ||
* @see <a href="https://helm.sh/docs/helm/helm_dependency_update/">helm dependency-update</a> | ||
* @since 6.10.2 | ||
*/ | ||
@Mojo(name = "dependency-update", defaultPhase = LifecyclePhase.PROCESS_RESOURCES, threadSafe = true) | ||
@Setter | ||
public class DependencyUpdateMojo extends AbstractDependencyMojo { | ||
|
||
/** | ||
* Set this to <code>true</code> to skip invoking dependency-update goal. | ||
* | ||
* @since 6.10.2 | ||
*/ | ||
@Parameter(property = "helm.dependency-update.skip", defaultValue = "false") | ||
private boolean skipDependencyUpdate; | ||
|
||
@Override | ||
public void execute() throws MojoExecutionException { | ||
|
||
if (skip || skipDependencyUpdate) { | ||
getLog().info("Skip dependency update"); | ||
return; | ||
} | ||
|
||
for (Path chartDirectory : getChartDirectories()) { | ||
|
||
doOverwriteLocalDependencies(chartDirectory); | ||
|
||
getLog().info("Updating chart dependencies for " + chartDirectory + " ..."); | ||
helm() | ||
.arguments("dependency", "update", chartDirectory) | ||
.execute("Failed to resolve dependencies"); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
61 changes: 61 additions & 0 deletions
61
src/test/java/io/kokuwa/maven/helm/DependencyUpdateMojoTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
package io.kokuwa.maven.helm; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertThrows; | ||
import static org.junit.jupiter.api.Assertions.assertTrue; | ||
|
||
import java.io.File; | ||
|
||
import org.apache.maven.plugin.MojoExecutionException; | ||
import org.junit.jupiter.api.DisplayName; | ||
import org.junit.jupiter.api.Test; | ||
|
||
@DisplayName("helm:dependency-update") | ||
public class DependencyUpdateMojoTest extends AbstractMojoTest { | ||
|
||
@DisplayName("default values") | ||
@Test | ||
void DependencyUpdate(DependencyUpdateMojo mojo) { | ||
assertHelm(mojo, "dependency update src/test/resources/simple"); | ||
} | ||
|
||
@DisplayName("with flag skip") | ||
@Test | ||
void skip(DependencyUpdateMojo mojo) { | ||
assertHelm(mojo.setSkipDependencyUpdate(false).setSkip(true)); | ||
assertHelm(mojo.setSkipDependencyUpdate(true).setSkip(false)); | ||
assertHelm(mojo.setSkipDependencyUpdate(true).setSkip(true)); | ||
} | ||
|
||
@DisplayName("with dependencies") | ||
@Test | ||
void dependencies(DependencyUpdateMojo mojo) { | ||
mojo.setChartDirectory(new File("src/test/resources/dependencies")); | ||
assertHelm(mojo, | ||
"dependency update src/test/resources/dependencies/b", | ||
"dependency update src/test/resources/dependencies/a2", | ||
"dependency update src/test/resources/dependencies/a1", | ||
"dependency update src/test/resources/dependencies"); | ||
} | ||
|
||
@DisplayName("with overwriteLocalDependencies (throws invalid config)") | ||
@Test | ||
void overwriteLocalDependenciesMisconfig(DependencyUpdateMojo mojo) { | ||
mojo.setChartDirectory(new File("src/test/resources/dependencies")); | ||
mojo.setOverwriteLocalDependencies(true); | ||
String message = assertThrows(MojoExecutionException.class, () -> mojo.execute()).getMessage(); | ||
assertTrue(message.startsWith("Null value for 'overwriteDependencyRepository' "), message); | ||
} | ||
|
||
@DisplayName("with overwriteLocalDependencies and overwriteDependencyRepository") | ||
@Test | ||
void overwriteLocalDependencies(DependencyUpdateMojo mojo) { | ||
mojo.setChartDirectory(new File("src/test/resources/dependencies")); | ||
mojo.setOverwriteLocalDependencies(true); | ||
mojo.setOverwriteDependencyRepository("fake.example.org"); | ||
assertHelm(mojo, | ||
"dependency update src/test/resources/dependencies/b", | ||
"dependency update src/test/resources/dependencies/a2", | ||
"dependency update src/test/resources/dependencies/a1", | ||
"dependency update src/test/resources/dependencies"); | ||
} | ||
} |