Skip to content

Commit

Permalink
Merge pull request #1676 from Netyyyy
Browse files Browse the repository at this point in the history
* pr/1676:
  Polish "Add help section and Maven plugin when azure-support is selected"
  Add help section and Maven plugin when azure-support is selected

Closes gh-1676
  • Loading branch information
mhalbritter committed Dec 19, 2024
2 parents 99374c1 + 32ba6e1 commit 1f305a0
Show file tree
Hide file tree
Showing 5 changed files with 158 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
/*
* Copyright 2012-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package io.spring.start.site.extension.dependency.springazure;

import io.spring.initializr.generator.buildsystem.maven.MavenBuild;
import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.spring.build.BuildCustomizer;

/**
* A {@link BuildCustomizer} that adds a Maven plugin when azure-support is selected.
*
* @author Muyao Feng
*/
class SpringAzureMavenBuildCustomizer implements BuildCustomizer<MavenBuild> {

private static final String PLUGIN_VERSION = "0.1.0";

private final ProjectDescription projectDescription;

SpringAzureMavenBuildCustomizer(ProjectDescription projectDescription) {
this.projectDescription = projectDescription;
}

@Override
public void customize(MavenBuild build) {
build.plugins().add("com.microsoft.azure", "azure-container-apps-maven-plugin", (plugin) -> {
plugin.version(PLUGIN_VERSION);
plugin.configuration((configuration) -> {
configuration.add("subscriptionId", "your-subscription-id");
configuration.add("resourceGroup", "your-resource-group");
configuration.add("appEnvironmentName", "your-app-environment-name");
configuration.add("region", "your-region");
configuration.add("appName", this.projectDescription.getName());
configuration.add("containers", (containers) -> {
containers.add("container", (container) -> {
container.add("type", "code");
container.add("directory", "${project.basedir}");
});
});
configuration.add("ingress", (ingress) -> {
ingress.add("external", "true");
ingress.add("targetPort", "8080");
});
configuration.add("scale", (scale) -> {
scale.add("minReplicas", "0");
scale.add("maxReplicas", "10");
});
});
});
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
abstract class SpringAzureModuleRegistry {

static Iterable<ImplicitDependency> createSpringBootRegistry() {
return create(
return create(onDependencies("azure-support").customizeHelpDocument(addDeploySection()),
onDependencies("actuator").customizeBuild(addDependency("spring-cloud-azure-starter-actuator"))
.customizeHelpDocument(addReferenceLink("actuator", "Azure Actuator")),
onDependencies("integration", "azure-storage")
Expand Down Expand Up @@ -81,4 +81,31 @@ private static Consumer<HelpDocument> addReferenceLink(String id, String descrip
};
}

private static Consumer<HelpDocument> addDeploySection() {
return (helpDocument) -> {
helpDocument.addSection((writer) -> {
writer.println("### Deploy to Azure");
writer.println();
writer.println("This project can be deployed to Azure with Maven.");
writer.println();
writer.println(
"To get started, replace the following placeholder in your `pom.xml` with your specific Azure details:");
writer.println();
writer.println("- `subscriptionId`");
writer.println("- `resourceGroup`");
writer.println("- `appEnvironmentName`");
writer.println("- `region`");
writer.println();
writer.println("Now you can deploy your application:");
writer.println("""
```bash
./mvnw azure-container-apps:deploy
```
""");
writer.println(
"Learn more about [Java on Azure Container Apps](https://learn.microsoft.com/azure/container-apps/java-overview).");
});
};
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2012-2023 the original author or authors.
* Copyright 2012-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand All @@ -17,6 +17,10 @@
package io.spring.start.site.extension.dependency.springazure;

import io.spring.initializr.generator.buildsystem.Build;
import io.spring.initializr.generator.buildsystem.maven.MavenBuildSystem;
import io.spring.initializr.generator.condition.ConditionalOnBuildSystem;
import io.spring.initializr.generator.condition.ConditionalOnRequestedDependency;
import io.spring.initializr.generator.project.ProjectDescription;
import io.spring.initializr.generator.project.ProjectGenerationConfiguration;
import io.spring.start.site.support.implicit.ImplicitDependency;
import io.spring.start.site.support.implicit.ImplicitDependencyBuildCustomizer;
Expand Down Expand Up @@ -50,4 +54,11 @@ ImplicitDependencyHelpDocumentCustomizer azureDependencyHelpDocumentCustomizer(B
return new ImplicitDependencyHelpDocumentCustomizer(this.azureDependencies, build);
}

@Bean
@ConditionalOnRequestedDependency("azure-support")
@ConditionalOnBuildSystem(MavenBuildSystem.ID)
SpringAzureMavenBuildCustomizer azureDependencyMavenBuildCustomizer(ProjectDescription projectDescription) {
return new SpringAzureMavenBuildCustomizer(projectDescription);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
* Copyright 2012-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package io.spring.start.site.extension.dependency.springazure;

import io.spring.initializr.web.project.ProjectRequest;
import io.spring.start.site.extension.AbstractExtensionTests;
import org.junit.jupiter.api.Test;

import static org.assertj.core.api.Assertions.assertThat;

/**
* Tests for {@link SpringAzureMavenBuildCustomizer}.
*
* @author Muyao Feng
* @author Moritz Halbritter
*/
class SpringAzureMavenBuildCustomizerTests extends AbstractExtensionTests {

@Test
void shouldDoNothingIfAzureSupportIsntSelected() {
ProjectRequest request = createProjectRequest("web");
assertThat(mavenPom(request)).doesNotContain("azure-container-apps-maven-plugin");
}

@Test
void azureContainerAppsMavenPluginAddedWhenAzureSupportPresent() {
ProjectRequest request = createProjectRequest("azure-support");
assertThat(mavenPom(request)).hasText("/project/build/plugins/plugin[1]/groupId", "com.microsoft.azure")
.hasText("/project/build/plugins/plugin[1]/artifactId", "azure-container-apps-maven-plugin");
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,12 @@ void azureJdbcWithPostgresql() {
.doesNotContain("https://aka.ms/spring/msdocs/mysql");
}

@Test
void DeploytoAzureSectionAddedWhenAzureSupportPresent() {
ProjectStructure project = generateProject("azure-support");
assertThatHelpDocumentOf(project).contains("### Deploy to Azure");
}

private static Stream<Arguments> azureDependencies() {
return Stream.of(Arguments.of("azure-active-directory"), Arguments.of("azure-keyvault"),
Arguments.of("azure-storage"), Arguments.of("azure-support"));
Expand Down

0 comments on commit 1f305a0

Please sign in to comment.