Skip to content

Commit

Permalink
Share PluginConfigurationProcessor between Gradle and Maven (#1163)
Browse files Browse the repository at this point in the history
  • Loading branch information
chanseokoh authored Oct 29, 2018
1 parent 8f46e19 commit af00e2d
Show file tree
Hide file tree
Showing 35 changed files with 2,009 additions and 1,766 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,7 @@ public class AuthParameters implements AuthProperty {

@Nullable private String username;
@Nullable private String password;
private String usernameDescriptor;
private String passwordDescriptor;
private String descriptor;

/**
* Constructs a new {@link AuthParameters}.
Expand All @@ -42,20 +41,25 @@ public class AuthParameters implements AuthProperty {
*/
@Inject
public AuthParameters(String descriptor) {
this.usernameDescriptor = descriptor + ".username";
this.passwordDescriptor = descriptor + ".password";
this.descriptor = descriptor;
}

@Internal
@Override
public String getPropertyDescriptor() {
return Preconditions.checkNotNull(descriptor);
}

@Internal
@Override
public String getUsernamePropertyDescriptor() {
return Preconditions.checkNotNull(usernameDescriptor);
return Preconditions.checkNotNull(descriptor) + ".username";
}

@Internal
@Override
public String getPasswordPropertyDescriptor() {
return Preconditions.checkNotNull(passwordDescriptor);
return Preconditions.checkNotNull(descriptor) + ".password";
}

@Input
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,15 @@
import com.google.cloud.tools.jib.filesystem.AbsoluteUnixPath;
import com.google.cloud.tools.jib.image.ImageReference;
import com.google.cloud.tools.jib.image.InvalidImageReferenceException;
import com.google.cloud.tools.jib.plugins.common.AppRootInvalidException;
import com.google.cloud.tools.jib.plugins.common.BuildStepsExecutionException;
import com.google.cloud.tools.jib.plugins.common.BuildStepsRunner;
import com.google.cloud.tools.jib.plugins.common.ConfigurationPropertyValidator;
import com.google.cloud.tools.jib.plugins.common.HelpfulSuggestions;
import com.google.cloud.tools.jib.plugins.common.InferredAuthRetrievalException;
import com.google.cloud.tools.jib.plugins.common.MainClassInferenceException;
import com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor;
import com.google.cloud.tools.jib.plugins.common.RawConfiguration;
import com.google.common.base.Preconditions;
import java.io.IOException;
import java.nio.file.Path;
Expand Down Expand Up @@ -74,67 +79,78 @@ public void setTargetImage(String targetImage) {
@TaskAction
public void buildDocker()
throws InvalidImageReferenceException, IOException, BuildStepsExecutionException,
CacheDirectoryCreationException {
CacheDirectoryCreationException, MainClassInferenceException,
InferredAuthRetrievalException {
if (!DOCKER_CLIENT.isDockerInstalled()) {
throw new GradleException(
HelpfulSuggestions.forDockerNotInstalled(HELPFUL_SUGGESTIONS_PREFIX));
}

// Asserts required @Input parameters are not null.
Preconditions.checkNotNull(jibExtension);
AbsoluteUnixPath appRoot = PluginConfigurationProcessor.getAppRootChecked(jibExtension);
GradleProjectProperties gradleProjectProperties =
GradleProjectProperties.getForProject(
getProject(),
getLogger(),
jibExtension.getExtraDirectory().getPath(),
jibExtension.getExtraDirectory().getPermissions(),
appRoot);
Path buildOutput = getProject().getBuildDir().toPath();

GradleHelpfulSuggestionsBuilder gradleHelpfulSuggestionsBuilder =
new GradleHelpfulSuggestionsBuilder(HELPFUL_SUGGESTIONS_PREFIX, jibExtension);

EventDispatcher eventDispatcher =
new DefaultEventDispatcher(gradleProjectProperties.getEventHandlers());
ImageReference targetImageReference =
ConfigurationPropertyValidator.getGeneratedTargetDockerTag(
jibExtension.getTo().getImage(),
eventDispatcher,
getProject().getName(),
getProject().getVersion().toString().equals("unspecified")
? "latest"
: getProject().getVersion().toString(),
gradleHelpfulSuggestionsBuilder.build());

DockerDaemonImage targetImage = DockerDaemonImage.named(targetImageReference);

PluginConfigurationProcessor pluginConfigurationProcessor =
PluginConfigurationProcessor.processCommonConfiguration(
getLogger(), jibExtension, gradleProjectProperties);

JibContainerBuilder jibContainerBuilder = pluginConfigurationProcessor.getJibContainerBuilder();

Containerizer containerizer = Containerizer.to(targetImage);
PluginConfigurationProcessor.configureContainerizer(
containerizer, jibExtension, gradleProjectProperties);

HelpfulSuggestions helpfulSuggestions =
gradleHelpfulSuggestionsBuilder
.setBaseImageReference(pluginConfigurationProcessor.getBaseImageReference())
.setBaseImageHasConfiguredCredentials(
pluginConfigurationProcessor.isBaseImageCredentialPresent())
.setTargetImageReference(targetImageReference)
.build();

BuildStepsRunner.forBuildToDockerDaemon(targetImageReference, jibExtension.getTo().getTags())
.writeImageDigest(buildOutput.resolve("jib-image.digest"))
.build(
jibContainerBuilder,
containerizer,
eventDispatcher,
gradleProjectProperties.getJavaLayerConfigurations().getLayerConfigurations(),
helpfulSuggestions);
TaskCommon.disableHttpLogging();

try {
AbsoluteUnixPath appRoot = TaskCommon.getAppRootChecked(jibExtension, getProject());
GradleProjectProperties projectProperties =
GradleProjectProperties.getForProject(
getProject(),
getLogger(),
jibExtension.getExtraDirectory().getPath(),
jibExtension.getExtraDirectory().getPermissions(),
appRoot);
RawConfiguration rawConfiguration = new GradleRawConfiguration(jibExtension);

GradleHelpfulSuggestionsBuilder gradleHelpfulSuggestionsBuilder =
new GradleHelpfulSuggestionsBuilder(HELPFUL_SUGGESTIONS_PREFIX, jibExtension);

EventDispatcher eventDispatcher =
new DefaultEventDispatcher(projectProperties.getEventHandlers());
ImageReference targetImageReference =
ConfigurationPropertyValidator.getGeneratedTargetDockerTag(
jibExtension.getTo().getImage(),
eventDispatcher,
getProject().getName(),
getProject().getVersion().toString().equals("unspecified")
? "latest"
: getProject().getVersion().toString(),
gradleHelpfulSuggestionsBuilder.build());

DockerDaemonImage targetImage = DockerDaemonImage.named(targetImageReference);

PluginConfigurationProcessor pluginConfigurationProcessor =
PluginConfigurationProcessor.processCommonConfiguration(
rawConfiguration, projectProperties);

JibContainerBuilder jibContainerBuilder =
pluginConfigurationProcessor.getJibContainerBuilder();

Containerizer containerizer = Containerizer.to(targetImage);
PluginConfigurationProcessor.configureContainerizer(
containerizer, rawConfiguration, projectProperties, GradleProjectProperties.TOOL_NAME);

HelpfulSuggestions helpfulSuggestions =
gradleHelpfulSuggestionsBuilder
.setBaseImageReference(pluginConfigurationProcessor.getBaseImageReference())
.setBaseImageHasConfiguredCredentials(
pluginConfigurationProcessor.isBaseImageCredentialPresent())
.setTargetImageReference(targetImageReference)
.build();

Path buildOutput = getProject().getBuildDir().toPath();
BuildStepsRunner.forBuildToDockerDaemon(targetImageReference, jibExtension.getTo().getTags())
.writeImageDigest(buildOutput.resolve("jib-image.digest"))
.build(
jibContainerBuilder,
containerizer,
eventDispatcher,
projectProperties.getJavaLayerConfigurations().getLayerConfigurations(),
helpfulSuggestions);

} catch (AppRootInvalidException ex) {
throw new GradleException(
"container.appRoot is not an absolute Unix-style path: " + ex.getInvalidAppRoot());
}
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,17 @@
import com.google.cloud.tools.jib.frontend.CredentialRetrieverFactory;
import com.google.cloud.tools.jib.image.ImageReference;
import com.google.cloud.tools.jib.image.InvalidImageReferenceException;
import com.google.cloud.tools.jib.plugins.common.AppRootInvalidException;
import com.google.cloud.tools.jib.plugins.common.BuildStepsExecutionException;
import com.google.cloud.tools.jib.plugins.common.BuildStepsRunner;
import com.google.cloud.tools.jib.plugins.common.ConfigurationPropertyValidator;
import com.google.cloud.tools.jib.plugins.common.DefaultCredentialRetrievers;
import com.google.cloud.tools.jib.plugins.common.HelpfulSuggestions;
import com.google.cloud.tools.jib.plugins.common.InferredAuthRetrievalException;
import com.google.cloud.tools.jib.plugins.common.MainClassInferenceException;
import com.google.cloud.tools.jib.plugins.common.PluginConfigurationProcessor;
import com.google.cloud.tools.jib.plugins.common.PropertyNames;
import com.google.cloud.tools.jib.plugins.common.RawConfiguration;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import java.io.IOException;
Expand Down Expand Up @@ -77,80 +82,90 @@ public void setTargetImage(String targetImage) {
@TaskAction
public void buildImage()
throws InvalidImageReferenceException, IOException, BuildStepsExecutionException,
CacheDirectoryCreationException {
CacheDirectoryCreationException, MainClassInferenceException,
InferredAuthRetrievalException {
// Asserts required @Input parameters are not null.
Preconditions.checkNotNull(jibExtension);
AbsoluteUnixPath appRoot = PluginConfigurationProcessor.getAppRootChecked(jibExtension);
GradleProjectProperties gradleProjectProperties =
GradleProjectProperties.getForProject(
getProject(),
getLogger(),
jibExtension.getExtraDirectory().getPath(),
jibExtension.getExtraDirectory().getPermissions(),
appRoot);
Path buildOutput = getProject().getBuildDir().toPath();

if (Strings.isNullOrEmpty(jibExtension.getTo().getImage())) {
TaskCommon.disableHttpLogging();

try {
AbsoluteUnixPath appRoot = TaskCommon.getAppRootChecked(jibExtension, getProject());
GradleProjectProperties projectProperties =
GradleProjectProperties.getForProject(
getProject(),
getLogger(),
jibExtension.getExtraDirectory().getPath(),
jibExtension.getExtraDirectory().getPermissions(),
appRoot);
RawConfiguration rawConfiguration = new GradleRawConfiguration(jibExtension);

if (Strings.isNullOrEmpty(jibExtension.getTo().getImage())) {
throw new GradleException(
HelpfulSuggestions.forToNotConfigured(
"Missing target image parameter",
"'jib.to.image'",
"build.gradle",
"gradle jib --image <your image name>"));
}

ImageReference targetImageReference = ImageReference.parse(jibExtension.getTo().getImage());

EventDispatcher eventDispatcher =
new DefaultEventDispatcher(projectProperties.getEventHandlers());
DefaultCredentialRetrievers defaultCredentialRetrievers =
DefaultCredentialRetrievers.init(
CredentialRetrieverFactory.forImage(targetImageReference, eventDispatcher));
Optional<Credential> optionalToCredential =
ConfigurationPropertyValidator.getImageCredential(
eventDispatcher,
PropertyNames.TO_AUTH_USERNAME,
PropertyNames.TO_AUTH_PASSWORD,
jibExtension.getTo().getAuth());
optionalToCredential.ifPresent(
toCredential ->
defaultCredentialRetrievers.setKnownCredential(toCredential, "jib.to.auth"));
defaultCredentialRetrievers.setCredentialHelper(jibExtension.getTo().getCredHelper());

RegistryImage targetImage = RegistryImage.named(targetImageReference);
defaultCredentialRetrievers.asList().forEach(targetImage::addCredentialRetriever);

PluginConfigurationProcessor pluginConfigurationProcessor =
PluginConfigurationProcessor.processCommonConfiguration(
rawConfiguration, projectProperties);

JibContainerBuilder jibContainerBuilder =
pluginConfigurationProcessor
.getJibContainerBuilder()
// Only uses possibly non-Docker formats for build to registry.
.setFormat(jibExtension.getContainer().getFormat());

Containerizer containerizer = Containerizer.to(targetImage);
PluginConfigurationProcessor.configureContainerizer(
containerizer, rawConfiguration, projectProperties, GradleProjectProperties.TOOL_NAME);

HelpfulSuggestions helpfulSuggestions =
new GradleHelpfulSuggestionsBuilder(HELPFUL_SUGGESTIONS_PREFIX, jibExtension)
.setBaseImageReference(pluginConfigurationProcessor.getBaseImageReference())
.setBaseImageHasConfiguredCredentials(
pluginConfigurationProcessor.isBaseImageCredentialPresent())
.setTargetImageReference(targetImageReference)
.setTargetImageHasConfiguredCredentials(optionalToCredential.isPresent())
.build();

Path buildOutput = getProject().getBuildDir().toPath();
BuildStepsRunner.forBuildImage(targetImageReference, jibExtension.getTo().getTags())
.writeImageDigest(buildOutput.resolve("jib-image.digest"))
.build(
jibContainerBuilder,
containerizer,
eventDispatcher,
projectProperties.getJavaLayerConfigurations().getLayerConfigurations(),
helpfulSuggestions);

} catch (AppRootInvalidException ex) {
throw new GradleException(
HelpfulSuggestions.forToNotConfigured(
"Missing target image parameter",
"'jib.to.image'",
"build.gradle",
"gradle jib --image <your image name>"));
"container.appRoot is not an absolute Unix-style path: " + ex.getInvalidAppRoot());
}

ImageReference targetImageReference = ImageReference.parse(jibExtension.getTo().getImage());

EventDispatcher eventDispatcher =
new DefaultEventDispatcher(gradleProjectProperties.getEventHandlers());
DefaultCredentialRetrievers defaultCredentialRetrievers =
DefaultCredentialRetrievers.init(
CredentialRetrieverFactory.forImage(targetImageReference, eventDispatcher));
Optional<Credential> optionalToCredential =
ConfigurationPropertyValidator.getImageCredential(
eventDispatcher,
PropertyNames.TO_AUTH_USERNAME,
PropertyNames.TO_AUTH_PASSWORD,
jibExtension.getTo().getAuth());
optionalToCredential.ifPresent(
toCredential ->
defaultCredentialRetrievers.setKnownCredential(toCredential, "jib.to.auth"));
defaultCredentialRetrievers.setCredentialHelper(jibExtension.getTo().getCredHelper());

RegistryImage targetImage = RegistryImage.named(targetImageReference);
defaultCredentialRetrievers.asList().forEach(targetImage::addCredentialRetriever);

PluginConfigurationProcessor pluginConfigurationProcessor =
PluginConfigurationProcessor.processCommonConfiguration(
getLogger(), jibExtension, gradleProjectProperties);

JibContainerBuilder jibContainerBuilder =
pluginConfigurationProcessor
.getJibContainerBuilder()
// Only uses possibly non-Docker formats for build to registry.
.setFormat(jibExtension.getContainer().getFormat());

Containerizer containerizer = Containerizer.to(targetImage);
PluginConfigurationProcessor.configureContainerizer(
containerizer, jibExtension, gradleProjectProperties);

HelpfulSuggestions helpfulSuggestions =
new GradleHelpfulSuggestionsBuilder(HELPFUL_SUGGESTIONS_PREFIX, jibExtension)
.setBaseImageReference(pluginConfigurationProcessor.getBaseImageReference())
.setBaseImageHasConfiguredCredentials(
pluginConfigurationProcessor.isBaseImageCredentialPresent())
.setTargetImageReference(targetImageReference)
.setTargetImageHasConfiguredCredentials(optionalToCredential.isPresent())
.build();

BuildStepsRunner.forBuildImage(targetImageReference, jibExtension.getTo().getTags())
.writeImageDigest(buildOutput.resolve("jib-image.digest"))
.build(
jibContainerBuilder,
containerizer,
eventDispatcher,
gradleProjectProperties.getJavaLayerConfigurations().getLayerConfigurations(),
helpfulSuggestions);
}

@Override
Expand Down
Loading

0 comments on commit af00e2d

Please sign in to comment.