hooks.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package stacks
  2. import (
  3. "fmt"
  4. "github.com/porter-dev/porter/api/server/shared/config"
  5. "gorm.io/gorm"
  6. "helm.sh/helm/v3/pkg/release"
  7. )
  8. func UpdateHelmRevision(config *config.Config, projID, clusterID uint, rel *release.Release) error {
  9. // read release by stack ID
  10. relModel, err := config.Repo.Release().ReadRelease(clusterID, rel.Name, rel.Namespace)
  11. if err != nil {
  12. return err
  13. }
  14. if relModel.StackResourceID == 0 {
  15. return nil
  16. }
  17. stackResource, err := config.Repo.Stack().ReadStackResource(relModel.StackResourceID)
  18. if err != nil {
  19. return err
  20. }
  21. // read the revision number corresponding and create a new revision of the stack
  22. oldStackRevision, err := config.Repo.Stack().ReadStackRevision(stackResource.StackRevisionID)
  23. if err != nil {
  24. return err
  25. }
  26. // get the latest revision for that stack
  27. stack, err := config.Repo.Stack().ReadStackByID(projID, oldStackRevision.StackID)
  28. if err != nil {
  29. return err
  30. }
  31. if len(stack.Revisions) == 0 {
  32. return fmt.Errorf("length of stack revision list was 0")
  33. }
  34. currStackRevision := stack.Revisions[0]
  35. stackRevision := &currStackRevision
  36. clonedSourceConfigs, err := CloneSourceConfigs(stackRevision.SourceConfigs)
  37. if err != nil {
  38. return err
  39. }
  40. clonedAppResources, err := CloneAppResources(stackRevision.Resources, stackRevision.SourceConfigs, clonedSourceConfigs)
  41. if err != nil {
  42. return err
  43. }
  44. for i, appResource := range clonedAppResources {
  45. if appResource.Name == rel.Name {
  46. clonedAppResources[i].HelmRevisionID = uint(rel.Version)
  47. }
  48. }
  49. stackRevision.Model = gorm.Model{}
  50. stackRevision.RevisionNumber++
  51. stackRevision.Resources = clonedAppResources
  52. stackRevision.SourceConfigs = clonedSourceConfigs
  53. _, err = config.Repo.Stack().AppendNewRevision(stackRevision)
  54. return err
  55. }