RedeployProject de-provisions and re-provisions a project's deployment. If prevDepl is nil, it provisions a new prod deployment based on primary_branch.
(ctx context.Context, proj *database.Project, prevDepl *database.Deployment)
| 334 | // RedeployProject de-provisions and re-provisions a project's deployment. |
| 335 | // If prevDepl is nil, it provisions a new prod deployment based on primary_branch. |
| 336 | func (s *Service) RedeployProject(ctx context.Context, proj *database.Project, prevDepl *database.Deployment) (*database.Project, error) { |
| 337 | // Provision new deployment |
| 338 | var branch, environment string |
| 339 | var editable bool |
| 340 | if prevDepl != nil { |
| 341 | branch = prevDepl.Branch |
| 342 | environment = prevDepl.Environment |
| 343 | editable = prevDepl.Editable |
| 344 | } else { |
| 345 | branch = proj.PrimaryBranch |
| 346 | environment = "prod" |
| 347 | } |
| 348 | newDepl, err := s.CreateDeployment(ctx, &CreateDeploymentOptions{ |
| 349 | ProjectID: proj.ID, |
| 350 | OwnerUserID: nil, |
| 351 | Environment: environment, |
| 352 | Branch: branch, |
| 353 | Editable: editable, |
| 354 | }) |
| 355 | if err != nil { |
| 356 | return nil, err |
| 357 | } |
| 358 | |
| 359 | if environment != "prod" || branch != proj.PrimaryBranch { |
| 360 | // Delete old prod deployment if exists |
| 361 | if prevDepl != nil { |
| 362 | err := s.TeardownDeployment(ctx, prevDepl) |
| 363 | if err != nil { |
| 364 | s.Logger.Error("trigger redeploy: could not teardown old deployment", zap.String("deployment_id", prevDepl.ID), zap.Error(err), observability.ZapCtx(ctx)) |
| 365 | } |
| 366 | } |
| 367 | return proj, nil |
| 368 | } |
| 369 | |
| 370 | // Update prod deployment on project |
| 371 | proj, err = s.DB.UpdateProject(ctx, proj.ID, &database.UpdateProjectOptions{ |
| 372 | Name: proj.Name, |
| 373 | Description: proj.Description, |
| 374 | Public: proj.Public, |
| 375 | DirectoryName: proj.DirectoryName, |
| 376 | Provisioner: proj.Provisioner, |
| 377 | ArchiveAssetID: proj.ArchiveAssetID, |
| 378 | GitRemote: proj.GitRemote, |
| 379 | GithubInstallationID: proj.GithubInstallationID, |
| 380 | GithubRepoID: proj.GithubRepoID, |
| 381 | ManagedGitRepoID: proj.ManagedGitRepoID, |
| 382 | ProdVersion: proj.ProdVersion, |
| 383 | PrimaryBranch: proj.PrimaryBranch, |
| 384 | Subpath: proj.Subpath, |
| 385 | PrimaryDeploymentID: &newDepl.ID, |
| 386 | ProdSlots: proj.ProdSlots, |
| 387 | ProdTTLSeconds: proj.ProdTTLSeconds, |
| 388 | DevSlots: proj.DevSlots, |
| 389 | DevTTLSeconds: proj.DevTTLSeconds, |
| 390 | OverrideDiskGB: proj.OverrideDiskGB, |
| 391 | Annotations: proj.Annotations, |
| 392 | }) |
| 393 | if err != nil { |
nothing calls this directly
no test coverage detected