From 8fd80cbbc4a53a6cc9f0b9a6016dc016d2fddcaa Mon Sep 17 00:00:00 2001 From: Victor Vazquez Date: Wed, 23 Oct 2024 19:37:34 -0700 Subject: [PATCH] fix projects with empty spaces aspire (#4472) * use label as package out of repository and re-use for apphost project generation * use names * use GetDefaultProjectName * fix `show` not using project name as AppName * refactor as a function * clean up one spot * add copyright notice * remove panic --------- Co-authored-by: Wei Lim --- cli/azd/cmd/show.go | 2 +- cli/azd/internal/{repository/util.go => names/label.go} | 5 ++++- .../{repository/util_test.go => names/label_test.go} | 2 +- cli/azd/internal/repository/app_init.go | 7 ++++--- cli/azd/internal/repository/infra_confirm.go | 3 ++- cli/azd/internal/repository/initializer.go | 2 +- cli/azd/internal/repository/initializer_test.go | 2 +- cli/azd/internal/vsrpc/environment_service_create.go | 2 +- cli/azd/pkg/environment/azdcontext/azdcontext.go | 6 ++++-- .../functional/testdata/samples/aspire-full/azure.yaml | 2 +- 10 files changed, 20 insertions(+), 13 deletions(-) rename cli/azd/internal/{repository/util.go => names/label.go} (95%) rename cli/azd/internal/{repository/util_test.go => names/label_test.go} (98%) diff --git a/cli/azd/cmd/show.go b/cli/azd/cmd/show.go index 5ab9932fd1d..01658913e1b 100644 --- a/cli/azd/cmd/show.go +++ b/cli/azd/cmd/show.go @@ -226,7 +226,7 @@ func (s *showAction) Run(ctx context.Context) (*actions.ActionResult, error) { } s.console.MessageUxItem(ctx, &ux.Show{ - AppName: s.azdCtx.GetDefaultProjectName(), + AppName: s.projectConfig.Name, Services: uxServices, Environments: uxEnvironments, AzurePortalLink: azurePortalLink(s.portalUrlBase, subId, rgName), diff --git a/cli/azd/internal/repository/util.go b/cli/azd/internal/names/label.go similarity index 95% rename from cli/azd/internal/repository/util.go rename to cli/azd/internal/names/label.go index 3e5f563646a..44402d5e266 100644 --- a/cli/azd/internal/repository/util.go +++ b/cli/azd/internal/names/label.go @@ -1,4 +1,7 @@ -package repository +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package names import "strings" diff --git a/cli/azd/internal/repository/util_test.go b/cli/azd/internal/names/label_test.go similarity index 98% rename from cli/azd/internal/repository/util_test.go rename to cli/azd/internal/names/label_test.go index 56a2c467756..71cb5f18cef 100644 --- a/cli/azd/internal/repository/util_test.go +++ b/cli/azd/internal/names/label_test.go @@ -1,4 +1,4 @@ -package repository +package names import ( "testing" diff --git a/cli/azd/internal/repository/app_init.go b/cli/azd/internal/repository/app_init.go index b145ebb9a44..86a4f65d9ba 100644 --- a/cli/azd/internal/repository/app_init.go +++ b/cli/azd/internal/repository/app_init.go @@ -9,6 +9,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/names" "github.com/azure/azure-dev/cli/azd/internal/scaffold" "github.com/azure/azure-dev/cli/azd/internal/tracing" "github.com/azure/azure-dev/cli/azd/internal/tracing/fields" @@ -176,7 +177,7 @@ func (i *Initializer) InitFromApp( files, err := apphost.GenerateProjectArtifacts( ctx, azdCtx.ProjectDirectory(), - filepath.Base(azdCtx.ProjectDirectory()), + azdcontext.ProjectName(azdCtx.ProjectDirectory()), appHostManifests[appHost.Path], appHost.Path, ) @@ -345,7 +346,7 @@ func prjConfigFromDetect( root string, detect detectConfirm) (project.ProjectConfig, error) { config := project.ProjectConfig{ - Name: LabelName(filepath.Base(root)), + Name: azdcontext.ProjectName(root), Metadata: &project.ProjectMetadata{ Template: fmt.Sprintf("%s@%s", InitGenTemplateId, internal.VersionInfo().Version), }, @@ -410,7 +411,7 @@ func prjConfigFromDetect( if name == "." { name = config.Name } - name = LabelName(name) + name = names.LabelName(name) config.Services[name] = &svc } diff --git a/cli/azd/internal/repository/infra_confirm.go b/cli/azd/internal/repository/infra_confirm.go index dff626b6296..64997cd9956 100644 --- a/cli/azd/internal/repository/infra_confirm.go +++ b/cli/azd/internal/repository/infra_confirm.go @@ -9,6 +9,7 @@ import ( "strings" "github.com/azure/azure-dev/cli/azd/internal/appdetect" + "github.com/azure/azure-dev/cli/azd/internal/names" "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/output/ux" @@ -93,7 +94,7 @@ func (i *Initializer) infraSpecFromDetect( } for _, svc := range detect.Services { - name := LabelName(filepath.Base(svc.Path)) + name := names.LabelName(filepath.Base(svc.Path)) serviceSpec := scaffold.ServiceSpec{ Name: name, Port: -1, diff --git a/cli/azd/internal/repository/initializer.go b/cli/azd/internal/repository/initializer.go index 04abddc4f23..f1595a90b21 100644 --- a/cli/azd/internal/repository/initializer.go +++ b/cli/azd/internal/repository/initializer.go @@ -425,7 +425,7 @@ func (i *Initializer) writeFileSafe( func (i *Initializer) writeCoreAssets(ctx context.Context, azdCtx *azdcontext.AzdContext) error { // Check to see if `azure.yaml` exists, and if it doesn't, create it. if _, err := os.Stat(azdCtx.ProjectPath()); errors.Is(err, os.ErrNotExist) { - _, err = project.New(ctx, azdCtx.ProjectPath(), azdCtx.GetDefaultProjectName()) + _, err = project.New(ctx, azdCtx.ProjectPath(), azdcontext.ProjectName(azdCtx.ProjectDirectory())) if err != nil { return fmt.Errorf("failed to create a project file: %w", err) } diff --git a/cli/azd/internal/repository/initializer_test.go b/cli/azd/internal/repository/initializer_test.go index 84d20af19f9..0db223dd083 100644 --- a/cli/azd/internal/repository/initializer_test.go +++ b/cli/azd/internal/repository/initializer_test.go @@ -436,7 +436,7 @@ func verifyFileContent(t *testing.T, file string, content string) { } func verifyProjectFile(t *testing.T, azdCtx *azdcontext.AzdContext, content string) { - content = strings.Replace(content, "", azdCtx.GetDefaultProjectName(), 1) + content = strings.Replace(content, "", azdcontext.ProjectName(azdCtx.ProjectDirectory()), 1) verifyFileContent(t, azdCtx.ProjectPath(), content) _, err := project.Load(context.Background(), azdCtx.ProjectPath()) diff --git a/cli/azd/internal/vsrpc/environment_service_create.go b/cli/azd/internal/vsrpc/environment_service_create.go index eb8ebc25d24..f75de742157 100644 --- a/cli/azd/internal/vsrpc/environment_service_create.go +++ b/cli/azd/internal/vsrpc/environment_service_create.go @@ -67,7 +67,7 @@ func (s *environmentService) CreateEnvironmentAsync( return false, fmt.Errorf("reading app host manifest: %w", err) } - projectName := strings.TrimSuffix(filepath.Base(c.azdContext.ProjectDirectory()), ".AppHost") + projectName := azdcontext.ProjectName(strings.TrimSuffix(c.azdContext.ProjectDirectory(), ".AppHost")) // Write an azure.yaml file to the project. files, err := apphost.GenerateProjectArtifacts( diff --git a/cli/azd/pkg/environment/azdcontext/azdcontext.go b/cli/azd/pkg/environment/azdcontext/azdcontext.go index 0bbe40238a2..b9333855499 100644 --- a/cli/azd/pkg/environment/azdcontext/azdcontext.go +++ b/cli/azd/pkg/environment/azdcontext/azdcontext.go @@ -7,6 +7,7 @@ import ( "os" "path/filepath" + "github.com/azure/azure-dev/cli/azd/internal/names" "github.com/azure/azure-dev/cli/azd/pkg/osutil" ) @@ -36,8 +37,9 @@ func (c *AzdContext) EnvironmentDirectory() string { return filepath.Join(c.ProjectDirectory(), EnvironmentDirectoryName) } -func (c *AzdContext) GetDefaultProjectName() string { - return filepath.Base(c.ProjectDirectory()) +// ProjectName returns a suitable project name from the given project directory. +func ProjectName(projectDirectory string) string { + return names.LabelName(filepath.Base(projectDirectory)) } func (c *AzdContext) EnvironmentRoot(name string) string { diff --git a/cli/azd/test/functional/testdata/samples/aspire-full/azure.yaml b/cli/azd/test/functional/testdata/samples/aspire-full/azure.yaml index d746c06bda7..0ab07f17b5b 100644 --- a/cli/azd/test/functional/testdata/samples/aspire-full/azure.yaml +++ b/cli/azd/test/functional/testdata/samples/aspire-full/azure.yaml @@ -1,6 +1,6 @@ # yaml-language-server: $schema=https://raw.githubusercontent.com/Azure/azure-dev/main/schemas/v1.0/azure.yaml.json -name: AspireAzdTests +name: aspire-azd-tests services: app: language: dotnet