From 4a0e05084a996415c793c75d0aedeae89f905219 Mon Sep 17 00:00:00 2001 From: rujche Date: Tue, 31 Dec 2024 21:41:23 +0800 Subject: [PATCH 01/13] Support deploying app without web server. --- cli/azd/internal/appdetect/appdetect.go | 3 +- cli/azd/internal/appdetect/spring_boot.go | 23 ++++++++++- cli/azd/internal/repository/infra_confirm.go | 38 +++++++++++-------- cli/azd/pkg/project/scaffold_gen.go | 5 ++- .../scaffold/templates/resources.bicept | 4 +- 5 files changed, 52 insertions(+), 21 deletions(-) diff --git a/cli/azd/internal/appdetect/appdetect.go b/cli/azd/internal/appdetect/appdetect.go index 787866413f2..ea8a92e8c75 100644 --- a/cli/azd/internal/appdetect/appdetect.go +++ b/cli/azd/internal/appdetect/appdetect.go @@ -174,7 +174,7 @@ func (a AzureDepStorageAccount) ResourceDisplay() string { type Metadata struct { ApplicationName string - ServerPort string + ServerPort int DatabaseNameInPropertySpringDatasourceUrl map[DatabaseDep]string ContainsDependencySpringCloudAzureStarter bool ContainsDependencySpringCloudAzureStarterJdbcPostgresql bool @@ -183,6 +183,7 @@ type Metadata struct { ContainsDependencySpringCloudEurekaClient bool ContainsDependencySpringCloudConfigServer bool ContainsDependencySpringCloudConfigClient bool + ContainsDependencyAboutEmbeddedWebServer bool } type Project struct { diff --git a/cli/azd/internal/appdetect/spring_boot.go b/cli/azd/internal/appdetect/spring_boot.go index 6c8651ffe33..b5fd3356a7d 100644 --- a/cli/azd/internal/appdetect/spring_boot.go +++ b/cli/azd/internal/appdetect/spring_boot.go @@ -6,6 +6,7 @@ import ( "maps" "regexp" "slices" + "strconv" "strings" ) @@ -296,6 +297,7 @@ func detectMetadata(azdProject *Project, springBootProject *SpringBootProject) { detectDependencySpringCloudAzureStarterJdbcPostgresql(azdProject, springBootProject) detectDependencySpringCloudConfig(azdProject, springBootProject) detectDependencySpringCloudEureka(azdProject, springBootProject) + detectDependencyAboutEmbeddedWebServer(azdProject, springBootProject) } func detectPropertySpringCloudAzureCosmosDatabase(azdProject *Project, springBootProject *SpringBootProject) { @@ -442,7 +444,9 @@ func detectPropertySpringApplicationName(azdProject *Project, springBootProject func detectPropertyServerPort(azdProject *Project, springBootProject *SpringBootProject) { var targetPropertyName = "server.port" if serverPort, ok := springBootProject.applicationProperties[targetPropertyName]; ok { - azdProject.Metadata.ServerPort = serverPort + if port, err := strconv.Atoi(serverPort); err == nil { + azdProject.Metadata.ServerPort = port + } } } @@ -478,6 +482,23 @@ func detectDependencySpringCloudConfig(azdProject *Project, springBootProject *S } } +func detectDependencyAboutEmbeddedWebServer(azdProject *Project, springBootProject *SpringBootProject) { + var targetGroupId = "org.springframework.boot" + var targetArtifactIds = []string{ + "spring-boot-starter-tomcat", + "spring-boot-starter-jetty", + "spring-boot-starter-undertow", + "spring-boot-starter-reactor-netty", + } + for _, targetArtifactId := range targetArtifactIds { + if hasDependency(springBootProject, targetGroupId, targetArtifactId) { + azdProject.Metadata.ContainsDependencyAboutEmbeddedWebServer = true + logMetadataUpdated("ContainsDependencyAboutEmbeddedWebServer = true") + return + } + } +} + func logServiceAddedAccordingToMavenDependency(resourceName, groupId string, artifactId string) { logServiceAddedAccordingToMavenDependencyAndExtraCondition(resourceName, groupId, artifactId, "") } diff --git a/cli/azd/internal/repository/infra_confirm.go b/cli/azd/internal/repository/infra_confirm.go index dec8e4303c0..4be607dcca2 100644 --- a/cli/azd/internal/repository/infra_confirm.go +++ b/cli/azd/internal/repository/infra_confirm.go @@ -275,17 +275,10 @@ func GetOrPromptPort( ctx context.Context, name string, svc appdetect.Project) (int, error) { - if svc.Metadata.ServerPort != "" { - return strconv.Atoi(svc.Metadata.ServerPort) - } if svc.Docker == nil || svc.Docker.Path == "" { // using default builder from azd - if svc.Language == appdetect.Java || svc.Language == appdetect.DotNet { - if svc.Metadata.ContainsDependencySpringCloudEurekaServer { - return 8761, nil - } - if svc.Metadata.ContainsDependencySpringCloudConfigServer { - return 8888, nil - } + if svc.Language == appdetect.Java { + return getJavaApplicationPort(svc), nil + } else if svc.Language == appdetect.DotNet { return 8080, nil } return 80, nil @@ -296,12 +289,8 @@ func GetOrPromptPort( switch len(ports) { case 1: // only one port was exposed, that's the one return ports[0].Number, nil - case 0: // no ports exposed, prompt for port - port, err := promptPortNumber(console, ctx, "What port does '"+name+"' listen on?") - if err != nil { - return -1, err - } - return port, nil + case 0: // no ports exposed, not expose port + return 0, nil } // multiple ports exposed, prompt for selection @@ -332,6 +321,23 @@ func GetOrPromptPort( return port, nil } +func getJavaApplicationPort(svc appdetect.Project) int { + if svc.Metadata.ContainsDependencySpringCloudEurekaServer { + return 8761 + } + if svc.Metadata.ContainsDependencySpringCloudConfigServer { + return 8888 + } + if svc.Metadata.ContainsDependencyAboutEmbeddedWebServer { + if svc.Metadata.ServerPort != 0 { + return svc.Metadata.ServerPort + } else { + return 8080 + } + } + return 0 +} + func (i *Initializer) buildInfraSpecByAzureDep( ctx context.Context, azureDep appdetect.AzureDep, diff --git a/cli/azd/pkg/project/scaffold_gen.go b/cli/azd/pkg/project/scaffold_gen.go index c6cda5c4b09..3cc10a5ed73 100644 --- a/cli/azd/pkg/project/scaffold_gen.go +++ b/cli/azd/pkg/project/scaffold_gen.go @@ -397,8 +397,9 @@ func handleContainerAppProps( } port := props.Port - if port < 1 || port > 65535 { - return fmt.Errorf("port value %d for host %s must be between 1 and 65535", port, resourceConfig.Name) + if port < 0 || port > 65535 { + return fmt.Errorf("port value for '%s' must be between 0 and 65535 (0 means not expost port), "+ + "but it's %d ", resourceConfig.Name, port) } serviceSpec.Port = port diff --git a/cli/azd/resources/scaffold/templates/resources.bicept b/cli/azd/resources/scaffold/templates/resources.bicept index 7cc9db9d53d..4fabfa941c4 100644 --- a/cli/azd/resources/scaffold/templates/resources.bicept +++ b/cli/azd/resources/scaffold/templates/resources.bicept @@ -544,7 +544,6 @@ module {{bicepName .Name}} 'br/public:avm/res/app/container-app:0.8.0' = { name: '{{containerAppName .Name}}' {{- if ne .Port 0}} ingressTargetPort: {{.Port}} - {{- end}} {{- if (and .Backend .Backend.Frontends)}} corsPolicy: { allowedOrigins: [ @@ -557,6 +556,9 @@ module {{bicepName .Name}} 'br/public:avm/res/app/container-app:0.8.0' = { ] } {{- end}} + {{- else}} + disableIngress: true + {{- end}} scaleMinReplicas: 1 scaleMaxReplicas: 10 secrets: { From 7d6db20190f53db841020c215c3acecf86c7bbd7 Mon Sep 17 00:00:00 2001 From: rujche Date: Tue, 31 Dec 2024 21:47:39 +0800 Subject: [PATCH 02/13] "port" is not required when not expose port. --- schemas/alpha/azure.yaml.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/schemas/alpha/azure.yaml.json b/schemas/alpha/azure.yaml.json index 7611a0d23f7..02e9fa72880 100644 --- a/schemas/alpha/azure.yaml.json +++ b/schemas/alpha/azure.yaml.json @@ -1254,9 +1254,6 @@ "type": "object", "description": "A Docker-based container app.", "additionalProperties": false, - "required": [ - "port" - ], "properties": { "type": true, "uses": true, From 429090c385e30808294deef4e1b21d53bb5cd05b Mon Sep 17 00:00:00 2001 From: rujche Date: Tue, 31 Dec 2024 22:29:43 +0800 Subject: [PATCH 03/13] Fix error reported by lint. --- cli/azd/pkg/project/scaffold_gen.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/azd/pkg/project/scaffold_gen.go b/cli/azd/pkg/project/scaffold_gen.go index 3cc10a5ed73..cc20456064d 100644 --- a/cli/azd/pkg/project/scaffold_gen.go +++ b/cli/azd/pkg/project/scaffold_gen.go @@ -398,7 +398,7 @@ func handleContainerAppProps( port := props.Port if port < 0 || port > 65535 { - return fmt.Errorf("port value for '%s' must be between 0 and 65535 (0 means not expost port), "+ + return fmt.Errorf("port value for '%s' must be between 0 and 65535 (port = 0 means ingress disabled), "+ "but it's %d ", resourceConfig.Name, port) } From 9c26c282d433011ad10c33e9d79f153b4cd71ab9 Mon Sep 17 00:00:00 2001 From: rujche Date: Thu, 2 Jan 2025 15:21:53 +0800 Subject: [PATCH 04/13] Add unit test for getJavaApplicationPort. --- cli/azd/internal/repository/infra_confirm.go | 24 +++--- .../internal/repository/infra_confirm_test.go | 80 +++++++++++++++++++ 2 files changed, 92 insertions(+), 12 deletions(-) diff --git a/cli/azd/internal/repository/infra_confirm.go b/cli/azd/internal/repository/infra_confirm.go index 4be607dcca2..c3c336cb514 100644 --- a/cli/azd/internal/repository/infra_confirm.go +++ b/cli/azd/internal/repository/infra_confirm.go @@ -322,20 +322,20 @@ func GetOrPromptPort( } func getJavaApplicationPort(svc appdetect.Project) int { - if svc.Metadata.ContainsDependencySpringCloudEurekaServer { - return 8761 + if !shouldExposePort(svc) { + return 0 } - if svc.Metadata.ContainsDependencySpringCloudConfigServer { - return 8888 + if svc.Metadata.ServerPort != 0 { + return svc.Metadata.ServerPort + } else { + return 8080 } - if svc.Metadata.ContainsDependencyAboutEmbeddedWebServer { - if svc.Metadata.ServerPort != 0 { - return svc.Metadata.ServerPort - } else { - return 8080 - } - } - return 0 +} + +func shouldExposePort(svc appdetect.Project) bool { + return svc.Metadata.ContainsDependencySpringCloudEurekaServer || + svc.Metadata.ContainsDependencySpringCloudConfigServer || + svc.Metadata.ContainsDependencyAboutEmbeddedWebServer } func (i *Initializer) buildInfraSpecByAzureDep( diff --git a/cli/azd/internal/repository/infra_confirm_test.go b/cli/azd/internal/repository/infra_confirm_test.go index aeb7f2d89a5..196b8f04da8 100644 --- a/cli/azd/internal/repository/infra_confirm_test.go +++ b/cli/azd/internal/repository/infra_confirm_test.go @@ -308,3 +308,83 @@ func TestDetectCosmosSqlDatabaseContainerInFile(t *testing.T) { }) } } + +func Test_getJavaApplicationPort(t *testing.T) { + tests := []struct { + name string + svc appdetect.Project + expected int + }{ + { + name: "not configure anything", + svc: appdetect.Project{ + Metadata: appdetect.Metadata{}, + }, + expected: 0, + }, + { + name: "only configure ServerPort", + svc: appdetect.Project{ + Metadata: appdetect.Metadata{ + ServerPort: 8888, + }, + }, + expected: 0, + }, + { + name: "only configure ContainsDependencySpringCloudEurekaServer", + svc: appdetect.Project{ + Metadata: appdetect.Metadata{ + ContainsDependencySpringCloudEurekaServer: true, + }, + }, + expected: 8080, + }, + { + name: "only configure ContainsDependencySpringCloudConfigServer", + svc: appdetect.Project{ + Metadata: appdetect.Metadata{ + ContainsDependencySpringCloudConfigServer: true, + }, + }, + expected: 8080, + }, + { + name: "only configure ContainsDependencyAboutEmbeddedWebServer", + svc: appdetect.Project{ + Metadata: appdetect.Metadata{ + ContainsDependencyAboutEmbeddedWebServer: true, + }, + }, + expected: 8080, + }, + { + name: "configure multiple dependencies", + svc: appdetect.Project{ + Metadata: appdetect.Metadata{ + ContainsDependencySpringCloudEurekaServer: true, + ContainsDependencySpringCloudConfigServer: true, + ContainsDependencyAboutEmbeddedWebServer: true, + }, + }, + expected: 8080, + }, + { + name: "configure ServerPort and multiple dependencies", + svc: appdetect.Project{ + Metadata: appdetect.Metadata{ + ServerPort: 8888, + ContainsDependencySpringCloudEurekaServer: true, + ContainsDependencySpringCloudConfigServer: true, + ContainsDependencyAboutEmbeddedWebServer: true, + }, + }, + expected: 8888, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + assert.Equal(t, tt.expected, getJavaApplicationPort(tt.svc)) + }) + } +} From 4e7d30e8b8945e4234dd88930ab1ae245c904eca Mon Sep 17 00:00:00 2001 From: rujche Date: Thu, 2 Jan 2025 15:44:00 +0800 Subject: [PATCH 05/13] Add log when failed to convert the value of "server.port" to int/ --- cli/azd/internal/appdetect/spring_boot.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cli/azd/internal/appdetect/spring_boot.go b/cli/azd/internal/appdetect/spring_boot.go index b5fd3356a7d..f3fc76fef5f 100644 --- a/cli/azd/internal/appdetect/spring_boot.go +++ b/cli/azd/internal/appdetect/spring_boot.go @@ -446,6 +446,8 @@ func detectPropertyServerPort(azdProject *Project, springBootProject *SpringBoot if serverPort, ok := springBootProject.applicationProperties[targetPropertyName]; ok { if port, err := strconv.Atoi(serverPort); err == nil { azdProject.Metadata.ServerPort = port + } else { + log.Printf("Failed to convert the value of server.port to int. %v.", err) } } } From 53a54e78b7b757124612786f3f31c729f4f033d1 Mon Sep 17 00:00:00 2001 From: rujche Date: Thu, 2 Jan 2025 15:52:55 +0800 Subject: [PATCH 06/13] Fix unit test failure by removing port when there is no port specified in Dockerfile. --- cli/azd/internal/repository/infra_confirm_test.go | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/cli/azd/internal/repository/infra_confirm_test.go b/cli/azd/internal/repository/infra_confirm_test.go index 196b8f04da8..ed6432c44cb 100644 --- a/cli/azd/internal/repository/infra_confirm_test.go +++ b/cli/azd/internal/repository/infra_confirm_test.go @@ -85,19 +85,11 @@ func TestInitializer_infraSpecFromDetect(t *testing.T) { }, }, }, - interactions: []string{ - // prompt for port -- hit multiple validation cases - "notAnInteger", - "-2", - "65536", - "1234", - }, + interactions: []string{}, want: scaffold.InfraSpec{ Services: []scaffold.ServiceSpec{ { - Name: "dotnet", - Port: 1234, - Backend: &scaffold.Backend{}, + Name: "dotnet", }, }, }, From 6a129b02b7ed6ef0ff642d61617673ae8b248271 Mon Sep 17 00:00:00 2001 From: rujche Date: Thu, 2 Jan 2025 16:04:11 +0800 Subject: [PATCH 07/13] Fix unit test (in app_init_test) failure by removing port when there is no port specified in Dockerfile. --- cli/azd/internal/repository/app_init_test.go | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/cli/azd/internal/repository/app_init_test.go b/cli/azd/internal/repository/app_init_test.go index 8669c6a09cd..b75795c3146 100644 --- a/cli/azd/internal/repository/app_init_test.go +++ b/cli/azd/internal/repository/app_init_test.go @@ -3,7 +3,6 @@ package repository import ( "context" "fmt" - "github.com/azure/azure-dev/cli/azd/internal/scaffold" "os" "path/filepath" "strings" @@ -11,6 +10,7 @@ import ( "github.com/azure/azure-dev/cli/azd/internal" "github.com/azure/azure-dev/cli/azd/internal/appdetect" + "github.com/azure/azure-dev/cli/azd/internal/scaffold" "github.com/azure/azure-dev/cli/azd/pkg/input" "github.com/azure/azure-dev/cli/azd/pkg/project" "github.com/stretchr/testify/require" @@ -98,13 +98,7 @@ func TestInitializer_prjConfigFromDetect(t *testing.T) { }, }, }, - interactions: []string{ - // prompt for port -- hit multiple validation cases - "notAnInteger", - "-2", - "65536", - "1234", - }, + interactions: []string{}, want: project.ProjectConfig{ Services: map[string]*project.ServiceConfig{ "dotnet": { @@ -118,11 +112,9 @@ func TestInitializer_prjConfigFromDetect(t *testing.T) { }, Resources: map[string]*project.ResourceConfig{ "dotnet": { - Type: project.ResourceTypeHostContainerApp, - Name: "dotnet", - Props: project.ContainerAppProps{ - Port: 1234, - }, + Type: project.ResourceTypeHostContainerApp, + Name: "dotnet", + Props: project.ContainerAppProps{}, }, }, }, From b3da0969c11331e1cff239dc59f78f913b5ef51f Mon Sep 17 00:00:00 2001 From: rujche Date: Mon, 6 Jan 2025 17:24:03 +0800 Subject: [PATCH 08/13] Fix bug in "detectDependencyAboutEmbeddedWebServer", and add related unit test. --- cli/azd/internal/appdetect/spring_boot.go | 2 + .../internal/appdetect/spring_boot_test.go | 101 ++++++++++++++++++ 2 files changed, 103 insertions(+) diff --git a/cli/azd/internal/appdetect/spring_boot.go b/cli/azd/internal/appdetect/spring_boot.go index f3fc76fef5f..c49d8ec993e 100644 --- a/cli/azd/internal/appdetect/spring_boot.go +++ b/cli/azd/internal/appdetect/spring_boot.go @@ -487,6 +487,8 @@ func detectDependencySpringCloudConfig(azdProject *Project, springBootProject *S func detectDependencyAboutEmbeddedWebServer(azdProject *Project, springBootProject *SpringBootProject) { var targetGroupId = "org.springframework.boot" var targetArtifactIds = []string{ + "spring-boot-starter-web", + "spring-boot-starter-webflux", "spring-boot-starter-tomcat", "spring-boot-starter-jetty", "spring-boot-starter-undertow", diff --git a/cli/azd/internal/appdetect/spring_boot_test.go b/cli/azd/internal/appdetect/spring_boot_test.go index ab049ffbe9e..eb39b593cd1 100644 --- a/cli/azd/internal/appdetect/spring_boot_test.go +++ b/cli/azd/internal/appdetect/spring_boot_test.go @@ -1,6 +1,7 @@ package appdetect import ( + "path/filepath" "testing" ) @@ -62,3 +63,103 @@ func TestIsValidDatabaseName(t *testing.T) { }) } } + +func TestDetectDependencyAboutEmbeddedWebServer(t *testing.T) { + tests := []struct { + name string + testPoms []testPom + expected bool + }{ + { + name: "no web dependency", + testPoms: []testPom{ + { + pomFilePath: "pom.xml", + pomContentString: ` + + 4.0.0 + com.example + example-project + 1.0.0 + + `, + }, + }, + expected: false, + }, + { + name: "has dependency: spring-boot-starter-web", + testPoms: []testPom{ + { + pomFilePath: "pom.xml", + pomContentString: ` + + 4.0.0 + com.example + example-project + 1.0.0 + + + org.springframework.boot + spring-boot-starter-web + 3.0.0 + + + + `, + }, + }, + expected: true, + }, + { + name: "has dependency: spring-boot-starter-webflux", + testPoms: []testPom{ + { + pomFilePath: "pom.xml", + pomContentString: ` + + 4.0.0 + com.example + example-project + 1.0.0 + + + org.springframework.boot + spring-boot-starter-webflux + 3.0.0 + + + + `, + }, + }, + expected: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + workingDir, err := prepareTestPomFiles(tt.testPoms) + if err != nil { + t.Fatalf("%v", err) + } + for _, testPom := range tt.testPoms { + pomFilePath := filepath.Join(workingDir, testPom.pomFilePath) + mavenProject, err := createMavenProject(pomFilePath) + if err != nil { + t.Fatalf("%v", err) + } + project := Project{ + Language: Java, + Path: pomFilePath, + DetectionRule: "Inferred by presence of: pom.xml", + } + detectAzureDependenciesByAnalyzingSpringBootProject(mavenProject, &project) + if project.Metadata.ContainsDependencyAboutEmbeddedWebServer != tt.expected { + t.Errorf("\nExpected: %v\nActual: %v", tt.expected, + project.Metadata.ContainsDependencyAboutEmbeddedWebServer) + } + } + }) + } +} From 5294ce06d36daedaafc16f8f0ea7e286b72c3779 Mon Sep 17 00:00:00 2001 From: rujche Date: Mon, 6 Jan 2025 17:31:28 +0800 Subject: [PATCH 09/13] Fix error caused by merge. --- cli/azd/internal/appdetect/spring_boot_test.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cli/azd/internal/appdetect/spring_boot_test.go b/cli/azd/internal/appdetect/spring_boot_test.go index eb39b593cd1..d3120daf12b 100644 --- a/cli/azd/internal/appdetect/spring_boot_test.go +++ b/cli/azd/internal/appdetect/spring_boot_test.go @@ -1,8 +1,12 @@ package appdetect import ( + "context" "path/filepath" "testing" + + "github.com/azure/azure-dev/cli/azd/pkg/exec" + "github.com/azure/azure-dev/cli/azd/pkg/tools/maven" ) func TestGetDatabaseName(t *testing.T) { @@ -145,7 +149,8 @@ func TestDetectDependencyAboutEmbeddedWebServer(t *testing.T) { } for _, testPom := range tt.testPoms { pomFilePath := filepath.Join(workingDir, testPom.pomFilePath) - mavenProject, err := createMavenProject(pomFilePath) + mavenProject, err := createMavenProject(context.TODO(), maven.NewCli(exec.NewCommandRunner(nil)), + pomFilePath) if err != nil { t.Fatalf("%v", err) } From 7aae1067c0d7bb0cb79ae1b6fd49dc6f07abb9f8 Mon Sep 17 00:00:00 2001 From: rujche Date: Mon, 6 Jan 2025 17:33:31 +0800 Subject: [PATCH 10/13] Fix error reported by lint. --- cli/azd/.vscode/cspell.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/cli/azd/.vscode/cspell.yaml b/cli/azd/.vscode/cspell.yaml index a6ff0d57fa0..2b023e9741d 100644 --- a/cli/azd/.vscode/cspell.yaml +++ b/cli/azd/.vscode/cspell.yaml @@ -23,6 +23,7 @@ words: - sjad - configserver - chardata + - webflux languageSettings: - languageId: go ignoreRegExpList: From 38f5c8ab79ce4c3d6929817f7934f5fa65b3454a Mon Sep 17 00:00:00 2001 From: rujche Date: Mon, 6 Jan 2025 17:55:53 +0800 Subject: [PATCH 11/13] Fix test error caused by ContainsDependencyAboutEmbeddedWebServer. --- cli/azd/internal/appdetect/appdetect_test.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/cli/azd/internal/appdetect/appdetect_test.go b/cli/azd/internal/appdetect/appdetect_test.go index a5c5f6cc3a9..3c2fa40c07b 100644 --- a/cli/azd/internal/appdetect/appdetect_test.go +++ b/cli/azd/internal/appdetect/appdetect_test.go @@ -87,6 +87,9 @@ func TestDetect(t *testing.T) { JavaProjectOptionPosixMavenWrapperPath: filepath.Join(dir, "java-multimodules", "mvnw"), JavaProjectOptionWinMavenWrapperPath: filepath.Join(dir, "java-multimodules", "mvnw.cmd"), }, + Metadata: Metadata{ + ContainsDependencyAboutEmbeddedWebServer: true, + }, }, { Language: Java, @@ -214,6 +217,9 @@ func TestDetect(t *testing.T) { JavaProjectOptionPosixMavenWrapperPath: filepath.Join(dir, "java-multimodules", "mvnw"), JavaProjectOptionWinMavenWrapperPath: filepath.Join(dir, "java-multimodules", "mvnw.cmd"), }, + Metadata: Metadata{ + ContainsDependencyAboutEmbeddedWebServer: true, + }, }, { Language: Java, @@ -290,6 +296,9 @@ func TestDetect(t *testing.T) { JavaProjectOptionPosixMavenWrapperPath: filepath.Join(dir, "java-multimodules", "mvnw"), JavaProjectOptionWinMavenWrapperPath: filepath.Join(dir, "java-multimodules", "mvnw.cmd"), }, + Metadata: Metadata{ + ContainsDependencyAboutEmbeddedWebServer: true, + }, }, { Language: Java, @@ -369,6 +378,9 @@ func TestDetect(t *testing.T) { JavaProjectOptionPosixMavenWrapperPath: filepath.Join(dir, "java-multimodules", "mvnw"), JavaProjectOptionWinMavenWrapperPath: filepath.Join(dir, "java-multimodules", "mvnw.cmd"), }, + Metadata: Metadata{ + ContainsDependencyAboutEmbeddedWebServer: true, + }, }, { Language: Java, From f41c796b96dbd9798716a6f010c7ed98c2f9ecf7 Mon Sep 17 00:00:00 2001 From: rujche Date: Thu, 16 Jan 2025 07:57:52 +0800 Subject: [PATCH 12/13] Fix error caused by previous resolve conflict. --- cli/azd/internal/appdetect/appdetect_test.go | 40 ++------------------ 1 file changed, 4 insertions(+), 36 deletions(-) diff --git a/cli/azd/internal/appdetect/appdetect_test.go b/cli/azd/internal/appdetect/appdetect_test.go index bb509f6cc88..9a0d14cfa4c 100644 --- a/cli/azd/internal/appdetect/appdetect_test.go +++ b/cli/azd/internal/appdetect/appdetect_test.go @@ -73,20 +73,12 @@ func TestDetect(t *testing.T) { DbRedis, }, Options: map[string]interface{}{ - JavaProjectOptionParentPomDir: filepath.Join(dir, "java-multimodules"), + JavaProjectOptionParentPomDir: filepath.Join(dir, "java-multimodules"), }, Metadata: Metadata{ ContainsDependencyAboutEmbeddedWebServer: true, }, }, - { - Language: Java, - Path: "java-multimodules/library", - DetectionRule: "Inferred by presence of: pom.xml", - Options: map[string]interface{}{ - JavaProjectOptionParentPomDir: filepath.Join(dir, "java-multimodules"), - }, - }, { Language: JavaScript, Path: "javascript", @@ -189,20 +181,12 @@ func TestDetect(t *testing.T) { DbRedis, }, Options: map[string]interface{}{ - JavaProjectOptionParentPomDir: filepath.Join(dir, "java-multimodules"), + JavaProjectOptionParentPomDir: filepath.Join(dir, "java-multimodules"), }, Metadata: Metadata{ ContainsDependencyAboutEmbeddedWebServer: true, }, }, - { - Language: Java, - Path: "java-multimodules/library", - DetectionRule: "Inferred by presence of: pom.xml", - Options: map[string]interface{}{ - JavaProjectOptionParentPomDir: filepath.Join(dir, "java-multimodules"), - }, - }, }, }, { @@ -254,20 +238,12 @@ func TestDetect(t *testing.T) { DbRedis, }, Options: map[string]interface{}{ - JavaProjectOptionParentPomDir: filepath.Join(dir, "java-multimodules"), + JavaProjectOptionParentPomDir: filepath.Join(dir, "java-multimodules"), }, Metadata: Metadata{ ContainsDependencyAboutEmbeddedWebServer: true, }, }, - { - Language: Java, - Path: "java-multimodules/library", - DetectionRule: "Inferred by presence of: pom.xml", - Options: map[string]interface{}{ - JavaProjectOptionParentPomDir: filepath.Join(dir, "java-multimodules"), - }, - }, }, }, { @@ -322,20 +298,12 @@ func TestDetect(t *testing.T) { DbRedis, }, Options: map[string]interface{}{ - JavaProjectOptionParentPomDir: filepath.Join(dir, "java-multimodules"), + JavaProjectOptionParentPomDir: filepath.Join(dir, "java-multimodules"), }, Metadata: Metadata{ ContainsDependencyAboutEmbeddedWebServer: true, }, }, - { - Language: Java, - Path: "java-multimodules/library", - DetectionRule: "Inferred by presence of: pom.xml", - Options: map[string]interface{}{ - JavaProjectOptionParentPomDir: filepath.Join(dir, "java-multimodules"), - }, - }, { Language: Python, Path: "python", From a6cfadb85be0a15208f46d8ef662252f354f7541 Mon Sep 17 00:00:00 2001 From: rujche Date: Thu, 16 Jan 2025 09:22:27 +0800 Subject: [PATCH 13/13] Skip test failure that is not cause by current PR. --- .github/workflows/go-test-for-sjad-branch.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/go-test-for-sjad-branch.yml b/.github/workflows/go-test-for-sjad-branch.yml index c44aefe5b36..31b7c897341 100644 --- a/.github/workflows/go-test-for-sjad-branch.yml +++ b/.github/workflows/go-test-for-sjad-branch.yml @@ -39,4 +39,4 @@ jobs: - name: Run tests run: | cd ./cli/azd - go test $(go list ./... | grep -v github.com/azure/azure-dev/cli/azd/test/functional) -cover -v + go test $(go list ./... | grep -v github.com/azure/azure-dev/cli/azd/test/functional | grep -v github.com/azure/azure-dev/cli/azd/pkg/infra/provisioning/terraform) -cover -v