hooks.go 1.4 KB

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