feat: show release notes on upgrade
continuous-integration/drone/push Build is passing Details

This commit is contained in:
decentral1se 2021-12-28 02:31:21 +01:00
parent 43e68a99b0
commit b4f48c3c59
Signed by: decentral1se
GPG Key ID: 03789458B3D0C410
3 changed files with 44 additions and 3 deletions

View File

@ -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)
}
}

View File

@ -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)
}

View File

@ -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
}