| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- package upgrade
- import (
- semver "github.com/Masterminds/semver/v3"
- "sigs.k8s.io/yaml"
- )
- // UpgradeFile is a collection of upgrade notes between specific versions
- type UpgradeFile struct {
- UpgradeNotes []*UpgradeNote `yaml:"upgrade_notes" json:"upgrade_notes"`
- }
- // UpgradeNote is a single note for upgrading between a previous version and
- // a target version.
- type UpgradeNote struct {
- PreviousVersion string `yaml:"previous" json:"previous"`
- TargetVersion string `yaml:"target" json:"target"`
- Note string `yaml:"note" json:"note"`
- }
- // ParseUpgradeFileFromBytes parses the raw bytes of an upgrade file and returns an
- // UpgradeFile object. sigs.k8s.io/yaml parser is used.
- func ParseUpgradeFileFromBytes(upgradeNotes []byte) (*UpgradeFile, error) {
- // parse bytes into object
- res := &UpgradeFile{}
- err := yaml.Unmarshal(upgradeNotes, res)
- if err != nil {
- return nil, err
- }
- return res, err
- }
- // GetUpgradeFileBetweenVersions gets the set of upgrade notes that are applicable to an upgrade
- // between a previous and target version.
- func (u *UpgradeFile) GetUpgradeFileBetweenVersions(prev, target string) (*UpgradeFile, error) {
- prevVersion, err := semver.NewVersion(prev)
- if err != nil {
- return nil, err
- }
- // for each upgrade note, determine if it's geq than the previous version, leq the target
- // version
- resNotes := make([]*UpgradeNote, 0)
- for _, note := range u.UpgradeNotes {
- notePrevVersion, err := semver.NewVersion(note.PreviousVersion)
- if err != nil {
- return nil, err
- }
- noteTargetVersion, err := semver.NewVersion(note.TargetVersion)
- if err != nil {
- return nil, err
- }
- // if note(prev) <= prev and note(next) >= prev, render the note
- if comp := notePrevVersion.Compare(prevVersion); comp != -1 {
- if comp := noteTargetVersion.Compare(prevVersion); comp != -1 {
- resNotes = append(resNotes, note)
- }
- }
- }
- return &UpgradeFile{
- UpgradeNotes: resNotes,
- }, nil
- }
|