diff --git a/cli/app/rollback.go b/cli/app/rollback.go index 77741dc7..1972fccd 100644 --- a/cli/app/rollback.go +++ b/cli/app/rollback.go @@ -170,7 +170,7 @@ recipes. } if !internal.Force { - if err := internal.NewVersionOverview(app, deployedVersion, chosenDowngrade); err != nil { + if err := internal.NewVersionOverview(app, deployedVersion, chosenDowngrade, ""); err != nil { logrus.Fatal(err) } } diff --git a/cli/app/upgrade.go b/cli/app/upgrade.go index 3fe30c63..557d408f 100644 --- a/cli/app/upgrade.go +++ b/cli/app/upgrade.go @@ -137,6 +137,14 @@ recipes. } } + // if release notes written after git tag published, read them before we + // check out the tag and then they'll appear to be missing. this covers + // when we obviously will forget to write release notes before publishing + releaseNotes, err := internal.GetReleaseNotes(app.Type, chosenUpgrade) + if err != nil { + return err + } + if !internal.Chaos { if err := recipe.EnsureVersion(app.Type, chosenUpgrade); err != nil { logrus.Fatal(err) @@ -176,7 +184,7 @@ recipes. logrus.Fatal(err) } - if err := internal.NewVersionOverview(app, deployedVersion, chosenUpgrade); err != nil { + if err := internal.NewVersionOverview(app, deployedVersion, chosenUpgrade, releaseNotes); err != nil { logrus.Fatal(err) } diff --git a/cli/internal/deploy.go b/cli/internal/deploy.go index fc1f9634..da7cbd0c 100644 --- a/cli/internal/deploy.go +++ b/cli/internal/deploy.go @@ -2,6 +2,9 @@ package internal import ( "fmt" + "io/ioutil" + "os" + "path" "strings" "coopcloud.tech/abra/pkg/client" @@ -194,7 +197,7 @@ func DeployOverview(app config.App, version, message string) error { } // NewVersionOverview shows an upgrade or downgrade overview -func NewVersionOverview(app config.App, currentVersion, newVersion string) error { +func NewVersionOverview(app config.App, currentVersion, newVersion, releaseNotes string) error { tableCol := []string{"server", "compose", "domain", "app name", "current version", "to be deployed"} table := formatter.CreateTable(tableCol) @@ -211,6 +214,21 @@ func NewVersionOverview(app config.App, currentVersion, newVersion string) error table.Append([]string{server, deployConfig, app.Domain, app.StackName(), currentVersion, newVersion}) table.Render() + if releaseNotes == "" { + var err error + releaseNotes, err = GetReleaseNotes(app.Type, newVersion) + if err != nil { + return err + } + } + + if releaseNotes != "" { + fmt.Println() + fmt.Println(fmt.Sprintf("%s release notes:\n\n%s", newVersion, releaseNotes)) + } else { + logrus.Warnf("no release notes available for %s", newVersion) + } + if NoInput { return nil } @@ -230,3 +248,18 @@ func NewVersionOverview(app config.App, currentVersion, newVersion string) error return nil } + +// GetReleaseNotes prints release notes for a recipe version +func GetReleaseNotes(recipeName, version string) (string, error) { + fpath := path.Join(config.RECIPES_DIR, recipeName, "release", version) + + if _, err := os.Stat(fpath); !os.IsNotExist(err) { + releaseNotes, err := ioutil.ReadFile(fpath) + if err != nil { + return "", err + } + return string(releaseNotes), nil + } + + return "", nil +}