feat: roll out pre-deploy changes to rollback and upgrade

This commit is contained in:
3wc
2025-09-02 13:58:45 -04:00
parent 14d3f1f669
commit 40b5c5cd63
3 changed files with 24 additions and 51 deletions

View File

@ -227,8 +227,6 @@ checkout as-is. Recipe commit hashes are also supported as values for
); err != nil { ); err != nil {
log.Fatal(err) log.Fatal(err)
} }
// FIXME: just for debugging
return
stack.WaitTimeout, err = appPkg.GetTimeoutFromLabel(compose, stackName) stack.WaitTimeout, err = appPkg.GetTimeoutFromLabel(compose, stackName)
if err != nil { if err != nil {

View File

@ -1,7 +1,6 @@
package app package app
import ( import (
"context"
"errors" "errors"
"strings" "strings"
@ -9,6 +8,7 @@ import (
appPkg "coopcloud.tech/abra/pkg/app" appPkg "coopcloud.tech/abra/pkg/app"
"coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/autocomplete"
"coopcloud.tech/abra/pkg/config" "coopcloud.tech/abra/pkg/config"
"coopcloud.tech/abra/pkg/deploy"
"coopcloud.tech/abra/pkg/envfile" "coopcloud.tech/abra/pkg/envfile"
"coopcloud.tech/abra/pkg/formatter" "coopcloud.tech/abra/pkg/formatter"
"coopcloud.tech/abra/pkg/i18n" "coopcloud.tech/abra/pkg/i18n"
@ -20,7 +20,6 @@ import (
"coopcloud.tech/abra/pkg/client" "coopcloud.tech/abra/pkg/client"
"coopcloud.tech/abra/pkg/log" "coopcloud.tech/abra/pkg/log"
"github.com/AlecAivazis/survey/v2" "github.com/AlecAivazis/survey/v2"
"github.com/docker/docker/api/types"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@ -192,36 +191,24 @@ beforehand. See "abra app backup" for more.`),
} }
appPkg.SetUpdateLabel(compose, stackName, app.Env) appPkg.SetUpdateLabel(compose, stackName, app.Env)
filters, err := app.Filters(false, false) // Gather secrets
secretInfo, err := deploy.GatherSecretsForDeploy(cl, app)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
secretList, err := cl.SecretList(context.Background(), types.SecretListOptions{Filters: filters}) // Gather configs
configInfo, err := deploy.GatherConfigsForDeploy(cl, app, compose, abraShEnv)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
var secretStrings []string // Gather images
for _, cont := range secretList { imageInfo, err := deploy.GatherImagesForDeploy(cl, app, compose)
secretStrings = append(secretStrings, cont.Spec.Name)
}
configList, err := cl.ConfigList(context.Background(), types.ConfigListOptions{Filters: filters})
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
var configStrings []string
for _, config := range configList {
configStrings = append(configStrings, config.Spec.Name)
}
var imageStrings []string
for _, service := range compose.Services {
imageStrings = append(imageStrings, service.Image)
}
// NOTE(d1): no release notes implemeneted for rolling back // NOTE(d1): no release notes implemeneted for rolling back
if err := internal.DeployOverview( if err := internal.DeployOverview(
app, app,
@ -229,9 +216,9 @@ beforehand. See "abra app backup" for more.`),
chosenDowngrade, chosenDowngrade,
"", "",
downgradeWarnMessages, downgradeWarnMessages,
strings.Join(secretStrings, "\n"), strings.Join(secretInfo, "\n"),
strings.Join(configStrings, "\n"), strings.Join(configInfo, "\n"),
strings.Join(imageStrings, "\n"), strings.Join(imageInfo, "\n"),
); err != nil { ); err != nil {
log.Fatal(err) log.Fatal(err)
} }

View File

@ -7,11 +7,11 @@ import (
"strings" "strings"
"coopcloud.tech/abra/cli/internal" "coopcloud.tech/abra/cli/internal"
"coopcloud.tech/abra/pkg/app"
appPkg "coopcloud.tech/abra/pkg/app" appPkg "coopcloud.tech/abra/pkg/app"
"coopcloud.tech/abra/pkg/autocomplete" "coopcloud.tech/abra/pkg/autocomplete"
"coopcloud.tech/abra/pkg/client" "coopcloud.tech/abra/pkg/client"
"coopcloud.tech/abra/pkg/config" "coopcloud.tech/abra/pkg/config"
"coopcloud.tech/abra/pkg/deploy"
"coopcloud.tech/abra/pkg/envfile" "coopcloud.tech/abra/pkg/envfile"
"coopcloud.tech/abra/pkg/formatter" "coopcloud.tech/abra/pkg/formatter"
"coopcloud.tech/abra/pkg/i18n" "coopcloud.tech/abra/pkg/i18n"
@ -21,7 +21,6 @@ import (
stack "coopcloud.tech/abra/pkg/upstream/stack" stack "coopcloud.tech/abra/pkg/upstream/stack"
"coopcloud.tech/tagcmp" "coopcloud.tech/tagcmp"
"github.com/AlecAivazis/survey/v2" "github.com/AlecAivazis/survey/v2"
"github.com/docker/docker/api/types"
dockerClient "github.com/docker/docker/client" dockerClient "github.com/docker/docker/client"
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
@ -217,35 +216,24 @@ beforehand. See "abra app backup" for more.`),
} }
} }
filters, err := app.Filters(false, false) // Gather secrets
secretInfo, err := deploy.GatherSecretsForDeploy(cl, app)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
secretList, err := cl.SecretList(context.Background(), types.SecretListOptions{Filters: filters}) // Gather configs
configInfo, err := deploy.GatherConfigsForDeploy(cl, app, compose, abraShEnv)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
var secretStrings []string // Gather images
for _, cont := range secretList { imageInfo, err := deploy.GatherImagesForDeploy(cl, app, compose)
secretStrings = append(secretStrings, cont.Spec.Name)
}
configList, err := cl.ConfigList(context.Background(), types.ConfigListOptions{Filters: filters})
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
var configStrings []string
for _, config := range configList {
configStrings = append(configStrings, config.Spec.Name)
}
var imageStrings []string
for _, service := range compose.Services {
imageStrings = append(imageStrings, service.Image)
}
if showReleaseNotes { if showReleaseNotes {
fmt.Print(upgradeReleaseNotes) fmt.Print(upgradeReleaseNotes)
@ -265,9 +253,9 @@ beforehand. See "abra app backup" for more.`),
chosenUpgrade, chosenUpgrade,
upgradeReleaseNotes, upgradeReleaseNotes,
upgradeWarnMessages, upgradeWarnMessages,
strings.Join(secretStrings, "\n"), strings.Join(secretInfo, "\n"),
strings.Join(configStrings, "\n"), strings.Join(configInfo, "\n"),
strings.Join(imageStrings, "\n"), strings.Join(imageInfo, "\n"),
); err != nil { ); err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -345,7 +333,7 @@ func chooseUpgrade(
} }
func getReleaseNotes( func getReleaseNotes(
app app.App, app appPkg.App,
versions []string, versions []string,
chosenUpgrade string, chosenUpgrade string,
deployMeta stack.DeployMeta, deployMeta stack.DeployMeta,
@ -390,7 +378,7 @@ func getReleaseNotes(
// ensureUpgradesAvailable ensures that there are available upgrades. // ensureUpgradesAvailable ensures that there are available upgrades.
func ensureUpgradesAvailable( func ensureUpgradesAvailable(
app app.App, app appPkg.App,
versions []string, versions []string,
availableUpgrades *[]string, availableUpgrades *[]string,
deployMeta stack.DeployMeta, deployMeta stack.DeployMeta,
@ -422,7 +410,7 @@ func ensureUpgradesAvailable(
// validateUpgradeVersionArg validates the specific version. // validateUpgradeVersionArg validates the specific version.
func validateUpgradeVersionArg( func validateUpgradeVersionArg(
specificVersion string, specificVersion string,
app app.App, app appPkg.App,
deployMeta stack.DeployMeta, deployMeta stack.DeployMeta,
) error { ) error {
parsedSpecificVersion, err := tagcmp.Parse(specificVersion) parsedSpecificVersion, err := tagcmp.Parse(specificVersion)
@ -449,7 +437,7 @@ func validateUpgradeVersionArg(
// ensureDeployed ensures the app is deployed and if so, returns deployment // ensureDeployed ensures the app is deployed and if so, returns deployment
// meta info. // meta info.
func ensureDeployed(cl *dockerClient.Client, app app.App) (stack.DeployMeta, error) { func ensureDeployed(cl *dockerClient.Client, app appPkg.App) (stack.DeployMeta, error) {
log.Debug(i18n.G("checking whether %s is already deployed", app.StackName())) log.Debug(i18n.G("checking whether %s is already deployed", app.StackName()))
deployMeta, err := stack.IsDeployed(context.Background(), cl, app.StackName()) deployMeta, err := stack.IsDeployed(context.Background(), cl, app.StackName())