get_upgrade_notes.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. package template
  2. import (
  3. "context"
  4. "net/http"
  5. "strings"
  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/helm/loader"
  13. "github.com/porter-dev/porter/internal/helm/upgrade"
  14. )
  15. type TemplateGetUpgradeNotesHandler struct {
  16. handlers.PorterHandlerReadWriter
  17. }
  18. func NewTemplateGetUpgradeNotesHandler(
  19. config *config.Config,
  20. decoderValidator shared.RequestDecoderValidator,
  21. writer shared.ResultWriter,
  22. ) *TemplateGetUpgradeNotesHandler {
  23. return &TemplateGetUpgradeNotesHandler{
  24. PorterHandlerReadWriter: handlers.NewDefaultPorterHandler(config, decoderValidator, writer),
  25. }
  26. }
  27. func (t *TemplateGetUpgradeNotesHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
  28. request := &types.GetTemplateUpgradeNotesRequest{}
  29. ok := t.DecodeAndValidate(w, r, request)
  30. if !ok {
  31. return
  32. }
  33. name, _ := requestutils.GetURLParamString(r, types.URLParamTemplateName)
  34. version, _ := requestutils.GetURLParamString(r, types.URLParamTemplateVersion)
  35. // if version passed as latest, pass empty string to loader to get latest
  36. if version == "latest" {
  37. version = ""
  38. }
  39. prevVersion := request.PrevVersion
  40. if prevVersion == "" {
  41. prevVersion = "v0.0.0"
  42. }
  43. chart, err := loader.LoadChartPublic(context.Background(), request.RepoURL, name, version)
  44. if err != nil {
  45. t.HandleAPIError(w, r, apierrors.NewErrInternal(err))
  46. return
  47. }
  48. res := &upgrade.UpgradeFile{}
  49. for _, file := range chart.Files {
  50. if strings.Contains(file.Name, "upgrade.yaml") {
  51. upgradeFile, err := upgrade.ParseUpgradeFileFromBytes(file.Data)
  52. if err != nil {
  53. break
  54. }
  55. upgradeFile, err = upgradeFile.GetUpgradeFileBetweenVersions(prevVersion, version)
  56. if err != nil {
  57. break
  58. }
  59. res = upgradeFile
  60. }
  61. }
  62. t.WriteResult(w, r, res)
  63. }