Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions cloud/aws/deploy/deploy.go
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,9 @@ func (a *NitricAwsPulumiProvider) Pre(ctx *pulumi.Context, resources []*pulumix.
}`, tags.GetResourceNameKey(a.StackId)),
},
})
if err != nil {
return fmt.Errorf("failed to create resource group: %w", err)
}

databases := lo.Filter(resources, func(item *pulumix.NitricPulumiResource[any], idx int) bool {
return item.Id.Type == resourcespb.ResourceType_SqlDatabase
Expand Down
5 changes: 4 additions & 1 deletion cloud/aws/deploy/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ func (a *NitricAwsPulumiProvider) Service(ctx *pulumi.Context, parent pulumi.Res
}

// ensure that the lambda was deployed successfully
_ = a.Lambdas[name].Arn.ApplyT(func(arn string) (bool, error) {
healthCheckOutput := a.Lambdas[name].Arn.ApplyT(func(arn string) (bool, error) {
payload, _ := json.Marshal(map[string]interface{}{
"x-nitric-healthcheck": true,
})
Expand All @@ -297,5 +297,8 @@ func (a *NitricAwsPulumiProvider) Service(ctx *pulumi.Context, parent pulumi.Res
return true, nil
})

// Register the health check as a dependency to ensure it completes
ctx.Export(fmt.Sprintf("lambda-%s-healthcheck", name), healthCheckOutput)

return nil
}
8 changes: 1 addition & 7 deletions cloud/common/deploy/provider/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,7 @@ import (

type ErrorHandler = func(err error) error

func WithErrorHandler(handler ErrorHandler) func(*PulumiProviderServer) {
return func(s *PulumiProviderServer) {
s.errorHandlers = append(s.errorHandlers, handler)
}
}

func handleCommonErrors(err error) error {
func explainCommonErrs(err error) error {
// Check for common Pulumi 'autoError' types
if auto.IsConcurrentUpdateError(err) {
if pe := parsePulumiError(err); pe != nil {
Expand Down
27 changes: 12 additions & 15 deletions cloud/common/deploy/provider/pulumi.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,8 @@ import (
)

type PulumiProviderServer struct {
provider NitricPulumiProvider
runtime RuntimeProvider
errorHandlers []ErrorHandler
provider NitricPulumiProvider
runtime RuntimeProvider
}

func NewPulumiProviderServer(provider NitricPulumiProvider, runtime RuntimeProvider, options ...func(*PulumiProviderServer)) *PulumiProviderServer {
Expand Down Expand Up @@ -237,7 +236,10 @@ func (s *PulumiProviderServer) Up(req *deploymentspb.DeploymentUpRequest, stream

go func() {
// output the stream
_ = pulumix.StreamPulumiUpEngineEvents(stream, pulumiEventsChan)
err := pulumix.StreamPulumiUpEngineEvents(stream, pulumiEventsChan)
if err != nil {
logger.Errorf("error streaming Pulumi events: %v", err)
}
}()

config, err := s.provider.Config()
Expand All @@ -260,21 +262,15 @@ func (s *PulumiProviderServer) Up(req *deploymentspb.DeploymentUpRequest, stream

result, err := autoStack.Up(context.TODO(), options...)
if err != nil {
err = handleCommonErrors(err)

for _, handler := range s.errorHandlers {
err = handler(err)
}

return err
return explainCommonErrs(err)
}

resultStr, ok := result.Outputs[resultCtxKey].Value.(string)
if !ok {
resultStr = ""
}

err = stream.Send(&deploymentspb.DeploymentUpEvent{
return stream.Send(&deploymentspb.DeploymentUpEvent{
Content: &deploymentspb.DeploymentUpEvent_Result{
Result: &deploymentspb.UpResult{
Content: &deploymentspb.UpResult_Text{
Expand All @@ -283,8 +279,6 @@ func (s *PulumiProviderServer) Up(req *deploymentspb.DeploymentUpRequest, stream
},
},
})

return err
}

// Down - automatically called by the Nitric CLI via the `down` command
Expand Down Expand Up @@ -315,7 +309,10 @@ func (s *PulumiProviderServer) Down(req *deploymentspb.DeploymentDownRequest, st
pulumiEventsChan := make(chan events.EngineEvent)

go func() {
_ = pulumix.StreamPulumiDownEngineEvents(stream, pulumiEventsChan)
err = pulumix.StreamPulumiDownEngineEvents(stream, pulumiEventsChan)
if err != nil {
logger.Errorf("error streaming Pulumi events: %v", err)
}
}()

config, err := s.provider.Config()
Expand Down
4 changes: 2 additions & 2 deletions cloud/common/deploy/pulumix/clistream.go
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ func StreamPulumiUpEngineEvents(stream deploymentspb.Deployment_UpServer, pulumi
},
})
if err != nil {
return err
return fmt.Errorf("failed to send deployment up event: %w", err)
}
}
return nil
Expand Down Expand Up @@ -290,7 +290,7 @@ func StreamPulumiDownEngineEvents(stream deploymentspb.Deployment_DownServer, pu
},
})
if err != nil {
return err
return fmt.Errorf("failed to send deployment down event: %w", err)
}
}
}
Expand Down