Skip to content

Commit 3397d6a

Browse files
vhvb1989Copilot
andauthored
vs aspire integration service name support (#5249)
* Adding DeployServiceAsync to support deploying environment but only for one service. - Updated formatting for consistency in AcceptanceTests.cs, including spacing and braces. - Added a new test method LiveDeployServiceRefresh to AcceptanceTests.cs to validate service deployment and refresh functionality. - Enhanced IEnvironmentService interface by adding DeployServiceAsync method to support service deployment operations. * Update cli/azd/test/functional/testdata/vs-server/tests/AzdServices.cs Co-authored-by: Copilot <[email protected]> --------- Co-authored-by: Copilot <[email protected]>
1 parent 1fcf1ec commit 3397d6a

File tree

11 files changed

+6093
-1212
lines changed

11 files changed

+6093
-1212
lines changed

cli/azd/internal/cmd/deploy.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import (
3030
)
3131

3232
type DeployFlags struct {
33-
serviceName string
33+
ServiceName string
3434
All bool
3535
fromPackage string
3636
global *internal.GlobalCommandOptions
@@ -46,7 +46,7 @@ func (d *DeployFlags) BindNonCommon(
4646
local *pflag.FlagSet,
4747
global *internal.GlobalCommandOptions) {
4848
local.StringVar(
49-
&d.serviceName,
49+
&d.ServiceName,
5050
"service",
5151
"",
5252
//nolint:lll
@@ -170,13 +170,11 @@ type DeploymentResult struct {
170170
}
171171

172172
func (da *DeployAction) Run(ctx context.Context) (*actions.ActionResult, error) {
173-
targetServiceName := da.flags.serviceName
173+
targetServiceName := da.flags.ServiceName
174174
if len(da.args) == 1 {
175175
targetServiceName = da.args[0]
176176
}
177177

178-
serviceNameWarningCheck(da.console, da.flags.serviceName, "deploy")
179-
180178
if da.env.GetSubscriptionId() == "" {
181179
return nil, errors.New(
182180
"infrastructure has not been provisioned. Run `azd provision`",

cli/azd/internal/cmd/util.go

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import (
1313

1414
"github.com/azure/azure-dev/cli/azd/internal/tracing"
1515
"github.com/azure/azure-dev/cli/azd/pkg/environment"
16-
"github.com/azure/azure-dev/cli/azd/pkg/input"
1716
"github.com/azure/azure-dev/cli/azd/pkg/output"
1817
"github.com/azure/azure-dev/cli/azd/pkg/project"
1918
)
@@ -67,18 +66,6 @@ func AzurePortalLink(portalUrlBase, subscriptionId, resourceGroupName string) st
6766
resourceGroupName))
6867
}
6968

70-
func serviceNameWarningCheck(console input.Console, serviceNameFlag string, commandName string) {
71-
if serviceNameFlag == "" {
72-
return
73-
}
74-
75-
fmt.Fprintln(
76-
console.Handles().Stderr,
77-
output.WithWarningFormat("WARNING: The `--service` flag is deprecated and will be removed in a future release."),
78-
)
79-
fmt.Fprintf(console.Handles().Stderr, "Next time use `azd %s <service>`.\n\n", commandName)
80-
}
81-
8269
func getTargetServiceName(
8370
ctx context.Context,
8471
projectManager project.ProjectManager,

cli/azd/internal/vsrpc/environment_service.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,5 +204,6 @@ func (s *environmentService) ServeHTTP(w http.ResponseWriter, r *http.Request) {
204204
"DeleteEnvironmentAsync": NewHandler(s.DeleteEnvironmentAsync),
205205
"RefreshEnvironmentAsync": NewHandler(s.RefreshEnvironmentAsync),
206206
"DeployAsync": NewHandler(s.DeployAsync),
207+
"DeployServiceAsync": NewHandler(s.DeployServiceAsync),
207208
})
208209
}

cli/azd/internal/vsrpc/environment_service_deploy.go

Lines changed: 1 addition & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,6 @@ package vsrpc
55

66
import (
77
"context"
8-
9-
"github.com/azure/azure-dev/cli/azd/cmd/actions"
10-
"github.com/azure/azure-dev/cli/azd/internal"
11-
"github.com/azure/azure-dev/cli/azd/internal/cmd"
12-
"github.com/azure/azure-dev/cli/azd/pkg/ioc"
138
)
149

1510
// DeployAsync is the server implementation of:
@@ -19,99 +14,5 @@ import (
1914
func (s *environmentService) DeployAsync(
2015
ctx context.Context, rc RequestContext, name string, observer *Observer[ProgressMessage],
2116
) (*Environment, error) {
22-
session, err := s.server.validateSession(rc.Session)
23-
if err != nil {
24-
return nil, err
25-
}
26-
27-
outputWriter := &lineWriter{
28-
next: &messageWriter{
29-
ctx: ctx,
30-
observer: observer,
31-
messageTemplate: ProgressMessage{
32-
Kind: MessageKind(Info),
33-
Severity: Info,
34-
},
35-
},
36-
}
37-
38-
spinnerWriter := &lineWriter{
39-
trimLineEndings: true,
40-
next: &messageWriter{
41-
ctx: ctx,
42-
observer: observer,
43-
messageTemplate: ProgressMessage{
44-
Kind: MessageKind(Important),
45-
Severity: Info,
46-
},
47-
},
48-
}
49-
50-
container, err := session.newContainer(rc)
51-
if err != nil {
52-
return nil, err
53-
}
54-
container.outWriter.AddWriter(outputWriter)
55-
container.spinnerWriter.AddWriter(spinnerWriter)
56-
57-
provisionFlags := cmd.NewProvisionFlagsFromEnvAndOptions(
58-
&internal.EnvFlag{
59-
EnvironmentName: name,
60-
},
61-
&internal.GlobalCommandOptions{
62-
Cwd: session.rootPath,
63-
NoPrompt: true,
64-
},
65-
)
66-
67-
deployFlags := cmd.NewDeployFlagsFromEnvAndOptions(
68-
&internal.EnvFlag{
69-
EnvironmentName: name,
70-
},
71-
&internal.GlobalCommandOptions{
72-
Cwd: session.rootPath,
73-
NoPrompt: true,
74-
},
75-
)
76-
deployFlags.All = true
77-
78-
container.MustRegisterScoped(func() internal.EnvFlag {
79-
return internal.EnvFlag{
80-
EnvironmentName: name,
81-
}
82-
})
83-
84-
ioc.RegisterInstance(container.NestedContainer, provisionFlags)
85-
ioc.RegisterInstance(container.NestedContainer, deployFlags)
86-
ioc.RegisterInstance(container.NestedContainer, []string{})
87-
88-
container.MustRegisterNamedTransient("provisionAction", cmd.NewProvisionAction)
89-
container.MustRegisterNamedTransient("deployAction", cmd.NewDeployAction)
90-
91-
var c struct {
92-
deployAction actions.Action `container:"name"`
93-
provisionAction actions.Action `container:"name"`
94-
}
95-
96-
if err := container.Fill(&c); err != nil {
97-
return nil, err
98-
}
99-
100-
if _, err := c.provisionAction.Run(ctx); err != nil {
101-
return nil, err
102-
}
103-
104-
if _, err := c.deployAction.Run(ctx); err != nil {
105-
return nil, err
106-
}
107-
108-
if err := outputWriter.Flush(ctx); err != nil {
109-
return nil, err
110-
}
111-
112-
if err := spinnerWriter.Flush(ctx); err != nil {
113-
return nil, err
114-
}
115-
116-
return s.refreshEnvironmentAsync(ctx, container, name, observer)
17+
return s.DeployServiceAsync(ctx, rc, name, "", observer)
11718
}
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
package vsrpc
5+
6+
import (
7+
"context"
8+
9+
"github.com/azure/azure-dev/cli/azd/cmd/actions"
10+
"github.com/azure/azure-dev/cli/azd/internal"
11+
"github.com/azure/azure-dev/cli/azd/internal/cmd"
12+
"github.com/azure/azure-dev/cli/azd/pkg/ioc"
13+
)
14+
15+
// DeployServiceAsync is the server implementation of:
16+
// ValueTask<Environment> DeployServiceAsync(RequestContext, string, string, IObserver<ProgressMessage>, CancellationToken)
17+
//
18+
// While it is named simply `DeployServiceAsync`,
19+
// it behaves as if the user had run `azd provision` and `azd deploy serviceName` when serviceName is provided.
20+
// If serviceName is not provided, it behaves as if the user had run `azd provision` and `azd deploy`.
21+
func (s *environmentService) DeployServiceAsync(
22+
ctx context.Context, rc RequestContext, name, serviceName string, observer *Observer[ProgressMessage],
23+
) (*Environment, error) {
24+
session, err := s.server.validateSession(rc.Session)
25+
if err != nil {
26+
return nil, err
27+
}
28+
29+
outputWriter := &lineWriter{
30+
next: &messageWriter{
31+
ctx: ctx,
32+
observer: observer,
33+
messageTemplate: ProgressMessage{
34+
Kind: MessageKind(Info),
35+
Severity: Info,
36+
},
37+
},
38+
}
39+
40+
spinnerWriter := &lineWriter{
41+
trimLineEndings: true,
42+
next: &messageWriter{
43+
ctx: ctx,
44+
observer: observer,
45+
messageTemplate: ProgressMessage{
46+
Kind: MessageKind(Important),
47+
Severity: Info,
48+
},
49+
},
50+
}
51+
52+
container, err := session.newContainer(rc)
53+
if err != nil {
54+
return nil, err
55+
}
56+
container.outWriter.AddWriter(outputWriter)
57+
container.spinnerWriter.AddWriter(spinnerWriter)
58+
59+
provisionFlags := cmd.NewProvisionFlagsFromEnvAndOptions(
60+
&internal.EnvFlag{
61+
EnvironmentName: name,
62+
},
63+
&internal.GlobalCommandOptions{
64+
Cwd: session.rootPath,
65+
NoPrompt: true,
66+
},
67+
)
68+
69+
deployFlags := cmd.NewDeployFlagsFromEnvAndOptions(
70+
&internal.EnvFlag{
71+
EnvironmentName: name,
72+
},
73+
&internal.GlobalCommandOptions{
74+
Cwd: session.rootPath,
75+
NoPrompt: true,
76+
},
77+
)
78+
79+
// If a service name is provided, we only deploy that service.
80+
deployFlags.All = true
81+
if serviceName != "" {
82+
deployFlags.ServiceName = serviceName
83+
deployFlags.All = false
84+
}
85+
86+
container.MustRegisterScoped(func() internal.EnvFlag {
87+
return internal.EnvFlag{
88+
EnvironmentName: name,
89+
}
90+
})
91+
92+
ioc.RegisterInstance(container.NestedContainer, provisionFlags)
93+
ioc.RegisterInstance(container.NestedContainer, deployFlags)
94+
ioc.RegisterInstance(container.NestedContainer, []string{})
95+
96+
container.MustRegisterNamedTransient("provisionAction", cmd.NewProvisionAction)
97+
container.MustRegisterNamedTransient("deployAction", cmd.NewDeployAction)
98+
99+
var c struct {
100+
deployAction actions.Action `container:"name"`
101+
provisionAction actions.Action `container:"name"`
102+
}
103+
104+
if err := container.Fill(&c); err != nil {
105+
return nil, err
106+
}
107+
108+
if _, err := c.provisionAction.Run(ctx); err != nil {
109+
return nil, err
110+
}
111+
112+
if _, err := c.deployAction.Run(ctx); err != nil {
113+
return nil, err
114+
}
115+
116+
if err := outputWriter.Flush(ctx); err != nil {
117+
return nil, err
118+
}
119+
120+
if err := spinnerWriter.Flush(ctx); err != nil {
121+
return nil, err
122+
}
123+
124+
return s.refreshEnvironmentAsync(ctx, container, name, observer)
125+
}

0 commit comments

Comments
 (0)