reenable_deployment.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package environment
  2. import (
  3. "fmt"
  4. "net/http"
  5. "github.com/google/go-github/v41/github"
  6. "github.com/porter-dev/porter/api/server/handlers"
  7. "github.com/porter-dev/porter/api/server/shared"
  8. "github.com/porter-dev/porter/api/server/shared/apierrors"
  9. "github.com/porter-dev/porter/api/server/shared/config"
  10. "github.com/porter-dev/porter/api/server/shared/requestutils"
  11. "github.com/porter-dev/porter/api/types"
  12. "github.com/porter-dev/porter/internal/models"
  13. )
  14. type ReenableDeploymentHandler struct {
  15. handlers.PorterHandlerReadWriter
  16. }
  17. func NewReenableDeploymentHandler(
  18. config *config.Config,
  19. decoderValidator shared.RequestDecoderValidator,
  20. writer shared.ResultWriter,
  21. ) *ReenableDeploymentHandler {
  22. return &ReenableDeploymentHandler{
  23. PorterHandlerReadWriter: handlers.NewDefaultPorterHandler(config, decoderValidator, writer),
  24. }
  25. }
  26. func (c *ReenableDeploymentHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
  27. project, _ := r.Context().Value(types.ProjectScope).(*models.Project)
  28. cluster, _ := r.Context().Value(types.ClusterScope).(*models.Cluster)
  29. deplID, reqErr := requestutils.GetURLParamUint(r, "deployment_id")
  30. if reqErr != nil {
  31. c.HandleAPIError(w, r, reqErr)
  32. return
  33. }
  34. depl, err := c.Repo().Environment().ReadDeploymentByID(deplID)
  35. if err != nil {
  36. c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
  37. return
  38. }
  39. if depl.Status != types.DeploymentStatusInactive {
  40. return
  41. }
  42. env, err := c.Repo().Environment().ReadEnvironmentByID(project.ID, cluster.ID, depl.EnvironmentID)
  43. if err != nil {
  44. c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
  45. return
  46. }
  47. client, err := getGithubClientFromEnvironment(c.Config(), env)
  48. if err != nil {
  49. c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
  50. return
  51. }
  52. _, err = client.Actions.CreateWorkflowDispatchEventByFileName(
  53. r.Context(), env.GitRepoOwner, env.GitRepoName, fmt.Sprintf("porter_%s_env.yml", env.Name),
  54. github.CreateWorkflowDispatchEventRequest{
  55. Ref: depl.PRBranchFrom,
  56. Inputs: map[string]interface{}{
  57. "pr_number": depl.PullRequestID,
  58. "pr_title": depl.PRName,
  59. "pr_branch_from": depl.PRBranchFrom,
  60. "pr_branch_into": depl.PRBranchInto,
  61. },
  62. },
  63. )
  64. if err != nil {
  65. c.HandleAPIError(w, r, apierrors.NewErrInternal(err))
  66. return
  67. }
  68. }