@@ -207,49 +207,61 @@ func parsePulumiError(err error) error {
207207 return pe
208208}
209209
210- // Up - automatically called by the Nitric CLI via the `up` command
211- func (s * PulumiProviderServer ) Up (req * deploymentspb.DeploymentUpRequest , stream deploymentspb.Deployment_UpServer ) error {
210+ func (s * PulumiProviderServer ) initializePulumiStack (spec * deploymentspb.Spec , attributesMap map [string ]any ) (* auto.Stack , error ) {
212211 // Verify if dependencies are available
213212 if err := checkDependencies (checkPulumiAvailable , checkDockerAvailable ); err != nil {
214- return status .Error (codes .FailedPrecondition , err .Error ())
213+ return nil , status .Error (codes .FailedPrecondition , err .Error ())
215214 }
216215
217- projectName , stackName , err := stackAndProjectFromAttributes (req . Attributes . AsMap () )
216+ projectName , stackName , err := stackAndProjectFromAttributes (attributesMap )
218217 if err != nil {
219- return err
218+ return nil , err
220219 }
221220
222- attributesMap := req .Attributes .AsMap ()
223-
224221 err = s .provider .Init (attributesMap )
225222 if err != nil {
226- return err
223+ return nil , err
227224 }
228225
229- pulumiProgram := createPulumiProgramForNitricProvider (req .Spec , s .provider , s .runtime )
226+ var pulumiProgram func (* pulumi.Context ) error
227+ if spec != nil {
228+ pulumiProgram = createPulumiProgramForNitricProvider (spec , s .provider , s .runtime )
229+ }
230230
231231 autoStack , err := auto .UpsertStackInlineSource (context .TODO (), fmt .Sprintf ("%s-%s" , projectName , stackName ), projectName , pulumiProgram )
232232 if err != nil {
233- return err
233+ return nil , err
234234 }
235235
236- pulumiEventsChan := make (chan events.EngineEvent )
237-
238- go func () {
239- // output the stream
240- _ = pulumix .StreamPulumiUpEngineEvents (stream , pulumiEventsChan )
241- }()
242-
243236 config , err := s .provider .Config ()
244237 if err != nil {
245- return err
238+ return nil , err
246239 }
247240
248241 err = autoStack .SetAllConfig (context .TODO (), config )
242+ if err != nil {
243+ return nil , err
244+ }
245+
246+ return & autoStack , err
247+ }
248+
249+ // Up - automatically called by the Nitric CLI via the `up` command
250+ func (s * PulumiProviderServer ) Up (req * deploymentspb.DeploymentUpRequest , stream deploymentspb.Deployment_UpServer ) error {
251+ attributesMap := req .Attributes .AsMap ()
252+
253+ autoStack , err := s .initializePulumiStack (req .Spec , attributesMap )
249254 if err != nil {
250255 return err
251256 }
252257
258+ pulumiEventsChan := make (chan events.EngineEvent )
259+
260+ go func () {
261+ // output the stream
262+ _ = pulumix .StreamPulumiUpEngineEvents (stream , pulumiEventsChan )
263+ }()
264+
253265 refresh , ok := attributesMap ["refresh" ].(bool )
254266
255267 options := []optup.Option {optup .EventStreams (pulumiEventsChan )}
@@ -289,25 +301,9 @@ func (s *PulumiProviderServer) Up(req *deploymentspb.DeploymentUpRequest, stream
289301
290302// Down - automatically called by the Nitric CLI via the `down` command
291303func (s * PulumiProviderServer ) Down (req * deploymentspb.DeploymentDownRequest , stream deploymentspb.Deployment_DownServer ) error {
292- // Verify if dependencies are available
293- if err := checkDependencies (checkPulumiAvailable , checkDockerAvailable ); err != nil {
294- return status .Error (codes .FailedPrecondition , err .Error ())
295- }
296-
297- projectName , stackName , err := stackAndProjectFromAttributes (req .Attributes .AsMap ())
298-
299304 attributesMap := req .Attributes .AsMap ()
300- if err != nil {
301- return err
302- }
303305
304- // run down on the stack
305- err = s .provider .Init (attributesMap )
306- if err != nil {
307- return err
308- }
309-
310- stack , err := auto .UpsertStackInlineSource (context .TODO (), fmt .Sprintf ("%s-%s" , projectName , stackName ), projectName , nil )
306+ autoStack , err := s .initializePulumiStack (nil , attributesMap )
311307 if err != nil {
312308 return err
313309 }
@@ -318,16 +314,6 @@ func (s *PulumiProviderServer) Down(req *deploymentspb.DeploymentDownRequest, st
318314 _ = pulumix .StreamPulumiDownEngineEvents (stream , pulumiEventsChan )
319315 }()
320316
321- config , err := s .provider .Config ()
322- if err != nil {
323- return err
324- }
325-
326- err = stack .SetAllConfig (context .TODO (), config )
327- if err != nil {
328- return err
329- }
330-
331317 refresh , ok := attributesMap ["refresh" ].(bool )
332318
333319 options := []optdestroy.Option {optdestroy .EventStreams (pulumiEventsChan )}
@@ -336,7 +322,7 @@ func (s *PulumiProviderServer) Down(req *deploymentspb.DeploymentDownRequest, st
336322 options = append (options , optdestroy .Refresh ())
337323 }
338324
339- _ , err = stack .Destroy (context .TODO (), options ... )
325+ _ , err = autoStack .Destroy (context .TODO (), options ... )
340326 if err != nil {
341327 logger .Error (err .Error ())
342328 return err
@@ -347,26 +333,9 @@ func (s *PulumiProviderServer) Down(req *deploymentspb.DeploymentDownRequest, st
347333
348334// Preview - automatically called by the Nitric CLI via the `preview` command
349335func (s * PulumiProviderServer ) Preview (req * deploymentspb.DeploymentPreviewRequest , stream deploymentspb.Deployment_PreviewServer ) error {
350- // Verify if dependencies are available
351- if err := checkDependencies (checkPulumiAvailable , checkDockerAvailable ); err != nil {
352- return status .Error (codes .FailedPrecondition , err .Error ())
353- }
354-
355- projectName , stackName , err := stackAndProjectFromAttributes (req .Attributes .AsMap ())
356- if err != nil {
357- return err
358- }
359-
360336 attributesMap := req .Attributes .AsMap ()
361337
362- err = s .provider .Init (attributesMap )
363- if err != nil {
364- return err
365- }
366-
367- pulumiProgram := createPulumiProgramForNitricProvider (req .Spec , s .provider , s .runtime )
368-
369- autoStack , err := auto .UpsertStackInlineSource (context .TODO (), fmt .Sprintf ("%s-%s" , projectName , stackName ), projectName , pulumiProgram )
338+ autoStack , err := s .initializePulumiStack (req .Spec , attributesMap )
370339 if err != nil {
371340 return err
372341 }
@@ -378,16 +347,6 @@ func (s *PulumiProviderServer) Preview(req *deploymentspb.DeploymentPreviewReque
378347 _ = pulumix .StreamPulumiPreviewEngineEvents (stream , pulumiEventsChan )
379348 }()
380349
381- config , err := s .provider .Config ()
382- if err != nil {
383- return err
384- }
385-
386- err = autoStack .SetAllConfig (context .TODO (), config )
387- if err != nil {
388- return err
389- }
390-
391350 refresh , ok := attributesMap ["refresh" ].(bool )
392351
393352 options := []optpreview.Option {optpreview .EventStreams (pulumiEventsChan )}
0 commit comments