forked from toolshed/abra
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			recipe-ini
			...
			app-volume
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 6f7ee1ee94 | |||
| 40c0fb4bac | 
@ -5,7 +5,6 @@ import (
 | 
				
			|||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"log"
 | 
						"log"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"time"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"coopcloud.tech/abra/cli/internal"
 | 
						"coopcloud.tech/abra/cli/internal"
 | 
				
			||||||
	"coopcloud.tech/abra/pkg/autocomplete"
 | 
						"coopcloud.tech/abra/pkg/autocomplete"
 | 
				
			||||||
@ -13,7 +12,6 @@ import (
 | 
				
			|||||||
	stack "coopcloud.tech/abra/pkg/upstream/stack"
 | 
						stack "coopcloud.tech/abra/pkg/upstream/stack"
 | 
				
			||||||
	"github.com/AlecAivazis/survey/v2"
 | 
						"github.com/AlecAivazis/survey/v2"
 | 
				
			||||||
	"github.com/docker/docker/api/types"
 | 
						"github.com/docker/docker/api/types"
 | 
				
			||||||
	"github.com/docker/docker/api/types/volume"
 | 
					 | 
				
			||||||
	"github.com/sirupsen/logrus"
 | 
						"github.com/sirupsen/logrus"
 | 
				
			||||||
	"github.com/urfave/cli"
 | 
						"github.com/urfave/cli"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
@ -112,28 +110,19 @@ flag.
 | 
				
			|||||||
			logrus.Fatal(err)
 | 
								logrus.Fatal(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		volumeListOptions := volume.ListOptions{fs}
 | 
							volumeList, err := client.GetVolumes(cl, context.Background(), app.Server, fs)
 | 
				
			||||||
		volumeListOKBody, err := cl.VolumeList(context.Background(), volumeListOptions)
 | 
					 | 
				
			||||||
		volumeList := volumeListOKBody.Volumes
 | 
					 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			logrus.Fatal(err)
 | 
								logrus.Fatal(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
							volumeNames := client.GetVolumeNames(volumeList)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		var vols []string
 | 
							if len(volumeNames) > 0 {
 | 
				
			||||||
		for _, vol := range volumeList {
 | 
								err := client.RemoveVolumes(cl, context.Background(), volumeNames, internal.Force, 5)
 | 
				
			||||||
			vols = append(vols, vol.Name)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if len(vols) > 0 {
 | 
					 | 
				
			||||||
			for _, vol := range vols {
 | 
					 | 
				
			||||||
				err = retryFunc(5, func() error {
 | 
					 | 
				
			||||||
					return cl.VolumeRemove(context.Background(), vol, internal.Force) // last argument is for force removing
 | 
					 | 
				
			||||||
				})
 | 
					 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				log.Fatalf("removing volumes failed: %s", err)
 | 
									log.Fatalf("removing volumes failed: %s", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
				logrus.Info(fmt.Sprintf("volume %s removed", vol))
 | 
					
 | 
				
			||||||
			}
 | 
								logrus.Infof("%d volumes removed successfully", len(volumeNames))
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			logrus.Info("no volumes to remove")
 | 
								logrus.Info("no volumes to remove")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@ -147,21 +136,3 @@ flag.
 | 
				
			|||||||
		return nil
 | 
							return nil
 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
// retryFunc retries the given function for the given retries. After the nth
 | 
					 | 
				
			||||||
// retry it waits (n + 1)^2 seconds before the next retry (starting with n=0).
 | 
					 | 
				
			||||||
// It returns an error if the function still failed after the last retry.
 | 
					 | 
				
			||||||
func retryFunc(retries int, fn func() error) error {
 | 
					 | 
				
			||||||
	for i := 0; i < retries; i++ {
 | 
					 | 
				
			||||||
		err := fn()
 | 
					 | 
				
			||||||
		if err == nil {
 | 
					 | 
				
			||||||
			return nil
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if i+1 < retries {
 | 
					 | 
				
			||||||
			sleep := time.Duration(i+1) * time.Duration(i+1)
 | 
					 | 
				
			||||||
			logrus.Infof("%s: waiting %d seconds before next retry", err, sleep)
 | 
					 | 
				
			||||||
			time.Sleep(sleep * time.Second)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return fmt.Errorf("%d retries failed", retries)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,7 @@ package app
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
						"log"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"coopcloud.tech/abra/cli/internal"
 | 
						"coopcloud.tech/abra/cli/internal"
 | 
				
			||||||
	"coopcloud.tech/abra/pkg/autocomplete"
 | 
						"coopcloud.tech/abra/pkg/autocomplete"
 | 
				
			||||||
@ -131,12 +132,12 @@ Passing "--force/-f" will select all volumes for removal. Be careful.
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if len(volumesToRemove) > 0 {
 | 
							if len(volumesToRemove) > 0 {
 | 
				
			||||||
			err = client.RemoveVolumes(cl, context.Background(), app.Server, volumesToRemove, internal.Force)
 | 
								err := client.RemoveVolumes(cl, context.Background(), volumesToRemove, internal.Force, 5)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				logrus.Fatal(err)
 | 
									log.Fatalf("removing volumes failed: %s", err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			logrus.Info("volumes removed successfully")
 | 
								logrus.Infof("%d volumes removed successfully", len(volumesToRemove))
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			logrus.Info("no volumes removed")
 | 
								logrus.Info("no volumes removed")
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
				
			|||||||
@ -238,22 +238,6 @@ var RemoteUserFlag = &cli.StringFlag{
 | 
				
			|||||||
	Destination: &RemoteUser,
 | 
						Destination: &RemoteUser,
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var GitName string
 | 
					 | 
				
			||||||
var GitNameFlag = &cli.StringFlag{
 | 
					 | 
				
			||||||
	Name:        "git-name, gn",
 | 
					 | 
				
			||||||
	Value:       "",
 | 
					 | 
				
			||||||
	Usage:       "Git (user) name to do commits with",
 | 
					 | 
				
			||||||
	Destination: &GitName,
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var GitEmail string
 | 
					 | 
				
			||||||
var GitEmailFlag = &cli.StringFlag{
 | 
					 | 
				
			||||||
	Name:        "git-email, ge",
 | 
					 | 
				
			||||||
	Value:       "",
 | 
					 | 
				
			||||||
	Usage:       "Git email name to do commits with",
 | 
					 | 
				
			||||||
	Destination: &GitEmail,
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// SubCommandBefore wires up pre-action machinery (e.g. --debug handling).
 | 
					// SubCommandBefore wires up pre-action machinery (e.g. --debug handling).
 | 
				
			||||||
func SubCommandBefore(c *cli.Context) error {
 | 
					func SubCommandBefore(c *cli.Context) error {
 | 
				
			||||||
	if Debug {
 | 
						if Debug {
 | 
				
			||||||
 | 
				
			|||||||
@ -4,6 +4,7 @@ import (
 | 
				
			|||||||
	"bytes"
 | 
						"bytes"
 | 
				
			||||||
	"errors"
 | 
						"errors"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"io/ioutil"
 | 
				
			||||||
	"os"
 | 
						"os"
 | 
				
			||||||
	"path"
 | 
						"path"
 | 
				
			||||||
	"text/template"
 | 
						"text/template"
 | 
				
			||||||
@ -36,8 +37,6 @@ var recipeNewCommand = cli.Command{
 | 
				
			|||||||
		internal.DebugFlag,
 | 
							internal.DebugFlag,
 | 
				
			||||||
		internal.NoInputFlag,
 | 
							internal.NoInputFlag,
 | 
				
			||||||
		internal.OfflineFlag,
 | 
							internal.OfflineFlag,
 | 
				
			||||||
		internal.GitNameFlag,
 | 
					 | 
				
			||||||
		internal.GitEmailFlag,
 | 
					 | 
				
			||||||
	},
 | 
						},
 | 
				
			||||||
	Before:    internal.SubCommandBefore,
 | 
						Before:    internal.SubCommandBefore,
 | 
				
			||||||
	Usage:     "Create a new recipe",
 | 
						Usage:     "Create a new recipe",
 | 
				
			||||||
@ -93,14 +92,14 @@ recipe and domain in the sample environment config).
 | 
				
			|||||||
				logrus.Fatal(err)
 | 
									logrus.Fatal(err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			if err := os.WriteFile(path, templated.Bytes(), 0644); err != nil {
 | 
								if err := ioutil.WriteFile(path, templated.Bytes(), 0644); err != nil {
 | 
				
			||||||
				logrus.Fatal(err)
 | 
									logrus.Fatal(err)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		newGitRepo := path.Join(config.RECIPES_DIR, recipeName)
 | 
							newGitRepo := path.Join(config.RECIPES_DIR, recipeName)
 | 
				
			||||||
		if err := git.Init(newGitRepo, true, internal.GitName, internal.GitEmail); err != nil {
 | 
							if err := git.Init(newGitRepo, true); err != nil {
 | 
				
			||||||
			logrus.Fatal(err)
 | 
								logrus.Fatal(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -2,15 +2,17 @@ package client
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"github.com/docker/docker/api/types/filters"
 | 
						"github.com/docker/docker/api/types/filters"
 | 
				
			||||||
	"github.com/docker/docker/api/types/volume"
 | 
						"github.com/docker/docker/api/types/volume"
 | 
				
			||||||
	"github.com/docker/docker/client"
 | 
						"github.com/docker/docker/client"
 | 
				
			||||||
 | 
						"github.com/sirupsen/logrus"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GetVolumes(cl *client.Client, ctx context.Context, server string, fs filters.Args) ([]*volume.Volume, error) {
 | 
					func GetVolumes(cl *client.Client, ctx context.Context, server string, fs filters.Args) ([]*volume.Volume, error) {
 | 
				
			||||||
	volumeListOptions := volume.ListOptions{fs}
 | 
						volumeListOKBody, err := cl.VolumeList(ctx, volume.ListOptions{Filters: fs})
 | 
				
			||||||
	volumeListOKBody, err := cl.VolumeList(ctx, volumeListOptions)
 | 
					 | 
				
			||||||
	volumeList := volumeListOKBody.Volumes
 | 
						volumeList := volumeListOKBody.Volumes
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return volumeList, err
 | 
							return volumeList, err
 | 
				
			||||||
@ -29,13 +31,32 @@ func GetVolumeNames(volumes []*volume.Volume) []string {
 | 
				
			|||||||
	return volumeNames
 | 
						return volumeNames
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func RemoveVolumes(cl *client.Client, ctx context.Context, server string, volumeNames []string, force bool) error {
 | 
					func RemoveVolumes(cl *client.Client, ctx context.Context, volumeNames []string, force bool, retries int) error {
 | 
				
			||||||
	for _, volName := range volumeNames {
 | 
						for _, volName := range volumeNames {
 | 
				
			||||||
		err := cl.VolumeRemove(ctx, volName, force)
 | 
							err := retryFunc(5, func() error {
 | 
				
			||||||
 | 
								return cl.VolumeRemove(context.Background(), volName, force)
 | 
				
			||||||
 | 
							})
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return err
 | 
								return fmt.Errorf("volume %s: %s", volName, err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					 | 
				
			||||||
	return nil
 | 
						return nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// retryFunc retries the given function for the given retries. After the nth
 | 
				
			||||||
 | 
					// retry it waits (n + 1)^2 seconds before the next retry (starting with n=0).
 | 
				
			||||||
 | 
					// It returns an error if the function still failed after the last retry.
 | 
				
			||||||
 | 
					func retryFunc(retries int, fn func() error) error {
 | 
				
			||||||
 | 
						for i := 0; i < retries; i++ {
 | 
				
			||||||
 | 
							err := fn()
 | 
				
			||||||
 | 
							if err == nil {
 | 
				
			||||||
 | 
								return nil
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if i+1 < retries {
 | 
				
			||||||
 | 
								sleep := time.Duration(i+1) * time.Duration(i+1)
 | 
				
			||||||
 | 
								logrus.Infof("%s: waiting %d seconds before next retry", err, sleep)
 | 
				
			||||||
 | 
								time.Sleep(sleep * time.Second)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return fmt.Errorf("%d retries failed", retries)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,4 @@
 | 
				
			|||||||
package app
 | 
					package client
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
@ -1,41 +1,35 @@
 | 
				
			|||||||
package git
 | 
					package git
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"github.com/go-git/go-git/v5"
 | 
						"github.com/go-git/go-git/v5"
 | 
				
			||||||
	"github.com/go-git/go-git/v5/plumbing/object"
 | 
						gitPkg "github.com/go-git/go-git/v5"
 | 
				
			||||||
	"github.com/sirupsen/logrus"
 | 
						"github.com/sirupsen/logrus"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Init inits a new repo and commits all the stuff if you want
 | 
					// Init inits a new repo and commits all the stuff if you want
 | 
				
			||||||
func Init(repoPath string, commit bool, gitName, gitEmail string) error {
 | 
					func Init(repoPath string, commit bool) error {
 | 
				
			||||||
	if _, err := git.PlainInit(repoPath, false); err != nil {
 | 
						if _, err := gitPkg.PlainInit(repoPath, false); err != nil {
 | 
				
			||||||
		return fmt.Errorf("git init: %s", err)
 | 
							logrus.Fatal(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	logrus.Debugf("initialised new git repo in %s", repoPath)
 | 
						logrus.Debugf("initialised new git repo in %s", repoPath)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if commit {
 | 
						if commit {
 | 
				
			||||||
		commitRepo, err := git.PlainOpen(repoPath)
 | 
							commitRepo, err := git.PlainOpen(repoPath)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return fmt.Errorf("git open: %s", err)
 | 
								logrus.Fatal(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		commitWorktree, err := commitRepo.Worktree()
 | 
							commitWorktree, err := commitRepo.Worktree()
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			return fmt.Errorf("git worktree: %s", err)
 | 
								logrus.Fatal(err)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if err := commitWorktree.AddWithOptions(&git.AddOptions{All: true}); err != nil {
 | 
							if err := commitWorktree.AddWithOptions(&git.AddOptions{All: true}); err != nil {
 | 
				
			||||||
			return fmt.Errorf("git add: %s", err)
 | 
								return err
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		var author *object.Signature
 | 
							if _, err = commitWorktree.Commit("init", &git.CommitOptions{}); err != nil {
 | 
				
			||||||
		if gitName != "" && gitEmail != "" {
 | 
								return err
 | 
				
			||||||
			author = &object.Signature{Name: gitName, Email: gitEmail}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if _, err = commitWorktree.Commit("init", &git.CommitOptions{Author: author}); err != nil {
 | 
					 | 
				
			||||||
			return fmt.Errorf("git commit: %s", err)
 | 
					 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		logrus.Debugf("init committed all files for new git repo in %s", repoPath)
 | 
							logrus.Debugf("init committed all files for new git repo in %s", repoPath)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
ABRA_VERSION="0.8.1-beta"
 | 
					ABRA_VERSION="0.8.1-beta"
 | 
				
			||||||
ABRA_RELEASE_URL="https://git.coopcloud.tech/api/v1/repos/coop-cloud/abra/releases/tags/$ABRA_VERSION"
 | 
					ABRA_RELEASE_URL="https://git.coopcloud.tech/api/v1/repos/coop-cloud/abra/releases/tags/$ABRA_VERSION"
 | 
				
			||||||
RC_VERSION="0.8.1-beta"
 | 
					RC_VERSION="0.8.0-rc1-beta"
 | 
				
			||||||
RC_VERSION_URL="https://git.coopcloud.tech/api/v1/repos/coop-cloud/abra/releases/tags/$RC_VERSION"
 | 
					RC_VERSION_URL="https://git.coopcloud.tech/api/v1/repos/coop-cloud/abra/releases/tags/$RC_VERSION"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
for arg in "$@"; do
 | 
					for arg in "$@"; do
 | 
				
			||||||
 | 
				
			|||||||
@ -70,13 +70,13 @@ setup(){
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app check "$TEST_APP_DOMAIN"
 | 
					  run $ABRA app check "$TEST_APP_DOMAIN"
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  refute_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  _reset_recipe
 | 
					  _reset_recipe
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -86,7 +86,7 @@ setup(){
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 1'
 | 
					  assert_output --partial "Your branch is behind 'origin/main' by 1 commit"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # NOTE(d1): we can't quite tell if this will fail or not in the future, so,
 | 
					  # NOTE(d1): we can't quite tell if this will fail or not in the future, so,
 | 
				
			||||||
  # since it isn't an important part of what we're testing here, we don't check
 | 
					  # since it isn't an important part of what we're testing here, we don't check
 | 
				
			||||||
@ -94,7 +94,7 @@ setup(){
 | 
				
			|||||||
  run $ABRA app check "$TEST_APP_DOMAIN" --offline
 | 
					  run $ABRA app check "$TEST_APP_DOMAIN" --offline
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 1'
 | 
					  assert_output --partial "Your branch is behind 'origin/main' by 1 commit"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  _reset_recipe
 | 
					  _reset_recipe
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -58,7 +58,7 @@ test_cmd_export"
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
  assert_not_exists "$ABRA_DIR/recipes/$TEST_RECIPE"
 | 
					  assert_not_exists "$ABRA_DIR/recipes/$TEST_RECIPE"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app cmd "$TEST_APP_DOMAIN" test_cmd --local
 | 
					  run $ABRA app cmd --local "$TEST_APP_DOMAIN" test_cmd
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
  assert_output --partial 'baz'
 | 
					  assert_output --partial 'baz'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -70,7 +70,7 @@ test_cmd_export"
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
  assert_exists "$ABRA_DIR/recipes/$TEST_RECIPE/foo"
 | 
					  assert_exists "$ABRA_DIR/recipes/$TEST_RECIPE/foo"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app cmd "$TEST_APP_DOMAIN" test_cmd --local
 | 
					  run $ABRA app cmd --local "$TEST_APP_DOMAIN" test_cmd
 | 
				
			||||||
  assert_failure
 | 
					  assert_failure
 | 
				
			||||||
  assert_output --partial 'locally unstaged changes'
 | 
					  assert_output --partial 'locally unstaged changes'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -83,7 +83,7 @@ test_cmd_export"
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
  assert_exists "$ABRA_DIR/recipes/$TEST_RECIPE/foo"
 | 
					  assert_exists "$ABRA_DIR/recipes/$TEST_RECIPE/foo"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app cmd "$TEST_APP_DOMAIN" test_cmd --local --chaos
 | 
					  run $ABRA app cmd --local --chaos "$TEST_APP_DOMAIN" test_cmd
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
  assert_output --partial 'baz'
 | 
					  assert_output --partial 'baz'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -96,14 +96,14 @@ test_cmd_export"
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app cmd "$TEST_APP_DOMAIN" test_cmd --local
 | 
					  run $ABRA app cmd --local "$TEST_APP_DOMAIN" test_cmd
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
  assert_output --partial 'baz'
 | 
					  assert_output --partial 'baz'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  refute_output --partial 'behind 3'
 | 
					  assert_output --partial "up to date"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  _reset_recipe "$TEST_RECIPE"
 | 
					  _reset_recipe "$TEST_RECIPE"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -113,14 +113,14 @@ test_cmd_export"
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app cmd "$TEST_APP_DOMAIN" test_cmd --local --offline
 | 
					  run $ABRA app cmd --local --offline "$TEST_APP_DOMAIN" test_cmd
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
  assert_output --partial 'baz'
 | 
					  assert_output --partial 'baz'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  _reset_recipe "$TEST_RECIPE"
 | 
					  _reset_recipe "$TEST_RECIPE"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -132,13 +132,13 @@ test_cmd_export"
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@test "error if missing arguments when passing --local" {
 | 
					@test "error if missing arguments when passing --local" {
 | 
				
			||||||
  run $ABRA app cmd "$TEST_APP_DOMAIN" --local
 | 
					  run $ABRA app cmd --local "$TEST_APP_DOMAIN"
 | 
				
			||||||
  assert_failure
 | 
					  assert_failure
 | 
				
			||||||
  assert_output --partial 'missing arguments'
 | 
					  assert_output --partial 'missing arguments'
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@test "cannot use --local and --user at same time" {
 | 
					@test "cannot use --local and --user at same time" {
 | 
				
			||||||
  run $ABRA app cmd "$TEST_APP_DOMAIN" test_cmd --local --user root
 | 
					  run $ABRA app cmd --local --user root "$TEST_APP_DOMAIN" test_cmd
 | 
				
			||||||
  assert_failure
 | 
					  assert_failure
 | 
				
			||||||
  assert_output --partial 'cannot use --local & --user together'
 | 
					  assert_output --partial 'cannot use --local & --user together'
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -147,7 +147,7 @@ test_cmd_export"
 | 
				
			|||||||
  run rm -rf "$ABRA_DIR/recipes/$TEST_RECIPE/abra.sh"
 | 
					  run rm -rf "$ABRA_DIR/recipes/$TEST_RECIPE/abra.sh"
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app cmd "$TEST_APP_DOMAIN" test_cmd --local --chaos
 | 
					  run $ABRA app cmd --local --chaos "$TEST_APP_DOMAIN" test_cmd
 | 
				
			||||||
  assert_failure
 | 
					  assert_failure
 | 
				
			||||||
  assert_output --partial "$ABRA_DIR/recipes/$TEST_RECIPE/abra.sh does not exist"
 | 
					  assert_output --partial "$ABRA_DIR/recipes/$TEST_RECIPE/abra.sh does not exist"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -155,25 +155,25 @@ test_cmd_export"
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@test "error if missing command" {
 | 
					@test "error if missing command" {
 | 
				
			||||||
  run $ABRA app cmd "$TEST_APP_DOMAIN" doesnt_exist --local
 | 
					  run $ABRA app cmd --local "$TEST_APP_DOMAIN" doesnt_exist
 | 
				
			||||||
  assert_failure
 | 
					  assert_failure
 | 
				
			||||||
  assert_output --partial "doesn't have a doesnt_exist function"
 | 
					  assert_output --partial "doesn't have a doesnt_exist function"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@test "run --local command" {
 | 
					@test "run --local command" {
 | 
				
			||||||
  run $ABRA app cmd "$TEST_APP_DOMAIN" test_cmd --local
 | 
					  run $ABRA app cmd --local "$TEST_APP_DOMAIN" test_cmd
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
  assert_output --partial 'baz'
 | 
					  assert_output --partial 'baz'
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@test "run command with single arg" {
 | 
					@test "run command with single arg" {
 | 
				
			||||||
  run $ABRA app cmd "$TEST_APP_DOMAIN" test_cmd_arg --local -- bing
 | 
					  run $ABRA app cmd --local "$TEST_APP_DOMAIN" test_cmd_arg -- bing
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
  assert_output --partial 'bing'
 | 
					  assert_output --partial 'bing'
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@test "run command with several args" {
 | 
					@test "run command with several args" {
 | 
				
			||||||
  run $ABRA app cmd "$TEST_APP_DOMAIN" test_cmd_args --local -- bong bang
 | 
					  run $ABRA app cmd --local "$TEST_APP_DOMAIN" test_cmd_args -- bong bang
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
  assert_output --partial 'bong bang'
 | 
					  assert_output --partial 'bong bang'
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -16,6 +16,7 @@ teardown_file(){
 | 
				
			|||||||
setup(){
 | 
					setup(){
 | 
				
			||||||
  load "$PWD/tests/integration/helpers/common"
 | 
					  load "$PWD/tests/integration/helpers/common"
 | 
				
			||||||
  _common_setup
 | 
					  _common_setup
 | 
				
			||||||
 | 
					  _reset_recipe
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
teardown(){
 | 
					teardown(){
 | 
				
			||||||
@ -82,13 +83,13 @@ teardown(){
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app deploy "$TEST_APP_DOMAIN" --no-input --no-converge-checks
 | 
					  run $ABRA app deploy "$TEST_APP_DOMAIN" --no-input --no-converge-checks
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  refute_output --partial 'behind 3'
 | 
					  refute_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  _reset_recipe
 | 
					  _reset_recipe
 | 
				
			||||||
  _undeploy_app
 | 
					  _undeploy_app
 | 
				
			||||||
@ -100,7 +101,7 @@ teardown(){
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # NOTE(d1): need to use --chaos to force same commit
 | 
					  # NOTE(d1): need to use --chaos to force same commit
 | 
				
			||||||
  run $ABRA app deploy "$TEST_APP_DOMAIN" \
 | 
					  run $ABRA app deploy "$TEST_APP_DOMAIN" \
 | 
				
			||||||
@ -108,7 +109,7 @@ teardown(){
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  _undeploy_app
 | 
					  _undeploy_app
 | 
				
			||||||
  _reset_recipe
 | 
					  _reset_recipe
 | 
				
			||||||
@ -116,6 +117,9 @@ teardown(){
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# bats test_tags=slow
 | 
					# bats test_tags=slow
 | 
				
			||||||
@test "deploy latest commit if no published versions and no --chaos" {
 | 
					@test "deploy latest commit if no published versions and no --chaos" {
 | 
				
			||||||
 | 
					  # TODO(d1): fix with a new test recipe which has no published versions?
 | 
				
			||||||
 | 
					  skip "known issue, abra-test-recipe has published versions now"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  latestCommit="$(git -C "$ABRA_DIR/recipes/$TEST_RECIPE" rev-parse --short HEAD)"
 | 
					  latestCommit="$(git -C "$ABRA_DIR/recipes/$TEST_RECIPE" rev-parse --short HEAD)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  _remove_tags
 | 
					  _remove_tags
 | 
				
			||||||
@ -140,7 +144,7 @@ teardown(){
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  threeCommitsBack="$(git -C "$ABRA_DIR/recipes/$TEST_RECIPE" rev-parse --short HEAD)"
 | 
					  threeCommitsBack="$(git -C "$ABRA_DIR/recipes/$TEST_RECIPE" rev-parse --short HEAD)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -273,6 +277,10 @@ teardown(){
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@test "ensure domain is checked" {
 | 
					@test "ensure domain is checked" {
 | 
				
			||||||
 | 
					  if [[ "$TEST_SERVER" == "default" ]]; then
 | 
				
			||||||
 | 
					      skip "domain checks are disabled for local server"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  appDomain="custom-html.DOESNTEXIST"
 | 
					  appDomain="custom-html.DOESNTEXIST"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app new custom-html \
 | 
					  run $ABRA app new custom-html \
 | 
				
			||||||
 | 
				
			|||||||
@ -45,7 +45,7 @@ teardown(){
 | 
				
			|||||||
  assert_exists "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
 | 
					  assert_exists "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial "Your branch is up to date with 'origin/main'."
 | 
					  assert_output --partial "up to date"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@test "create new app with version" {
 | 
					@test "create new app with version" {
 | 
				
			||||||
@ -121,7 +121,7 @@ teardown(){
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial "Your branch is behind 'origin/main' by 3 commits, and can be fast-forwarded."
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app new "$TEST_RECIPE" \
 | 
					  run $ABRA app new "$TEST_RECIPE" \
 | 
				
			||||||
    --no-input \
 | 
					    --no-input \
 | 
				
			||||||
@ -131,7 +131,7 @@ teardown(){
 | 
				
			|||||||
  assert_exists "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
 | 
					  assert_exists "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial "Your branch is up to date with 'origin/main'."
 | 
					  assert_output --partial "up to date"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  _reset_recipe
 | 
					  _reset_recipe
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -141,7 +141,7 @@ teardown(){
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial "Your branch is behind 'origin/main' by 3 commits, and can be fast-forwarded."
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # NOTE(d1): need to use --chaos to force same commit
 | 
					  # NOTE(d1): need to use --chaos to force same commit
 | 
				
			||||||
  run $ABRA app new "$TEST_RECIPE" \
 | 
					  run $ABRA app new "$TEST_RECIPE" \
 | 
				
			||||||
@ -154,7 +154,7 @@ teardown(){
 | 
				
			|||||||
  assert_exists "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
 | 
					  assert_exists "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial "Your branch is behind 'origin/main' by 3 commits, and can be fast-forwarded."
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  _reset_recipe
 | 
					  _reset_recipe
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -104,7 +104,7 @@ teardown(){
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  _undeploy_app
 | 
					  _undeploy_app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app volume rm "$TEST_APP_DOMAIN"
 | 
					  run $ABRA app volume rm "$TEST_APP_DOMAIN" --no-input
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app volume ls "$TEST_APP_DOMAIN"
 | 
					  run $ABRA app volume ls "$TEST_APP_DOMAIN"
 | 
				
			||||||
 | 
				
			|||||||
@ -109,13 +109,13 @@ teardown(){
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app restore "$TEST_APP_DOMAIN" app DOESNTEXIST
 | 
					  run $ABRA app restore "$TEST_APP_DOMAIN" app
 | 
				
			||||||
  assert_failure
 | 
					  assert_failure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  refute_output --partial 'behind 3'
 | 
					  assert_output --partial "up to date"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@test "ensure recipe not up to date if --offline" {
 | 
					@test "ensure recipe not up to date if --offline" {
 | 
				
			||||||
@ -126,19 +126,19 @@ teardown(){
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app restore "$TEST_APP_DOMAIN" app DOESNTEXIST --offline
 | 
					  run $ABRA app restore "$TEST_APP_DOMAIN" app --offline
 | 
				
			||||||
  assert_failure
 | 
					  assert_failure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" checkout "$latestCommit"
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" checkout "$latestCommit"
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  refute_output --partial 'behind 3'
 | 
					  assert_output --partial "HEAD detached at $latestCommit"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@test "error if missing service" {
 | 
					@test "error if missing service" {
 | 
				
			||||||
 | 
				
			|||||||
@ -50,13 +50,13 @@ teardown(){
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app rollback "$TEST_APP_DOMAIN" --no-input --no-converge-checks
 | 
					  run $ABRA app rollback "$TEST_APP_DOMAIN" --no-input --no-converge-checks
 | 
				
			||||||
  assert_failure
 | 
					  assert_failure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  refute_output --partial 'behind 3'
 | 
					  assert_output --partial "up to date"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@test "ensure recipe not up to date if --offline" {
 | 
					@test "ensure recipe not up to date if --offline" {
 | 
				
			||||||
@ -67,14 +67,14 @@ teardown(){
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app rollback "$TEST_APP_DOMAIN" \
 | 
					  run $ABRA app rollback "$TEST_APP_DOMAIN" \
 | 
				
			||||||
    --no-input --no-converge-checks --offline
 | 
					    --no-input --no-converge-checks --offline
 | 
				
			||||||
  assert_failure
 | 
					  assert_failure
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" checkout "$latestCommit"
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" checkout "$latestCommit"
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
@ -131,7 +131,7 @@ teardown(){
 | 
				
			|||||||
  latestCommit="$(git -C "$ABRA_DIR/recipes/$TEST_RECIPE" rev-parse --short HEAD)"
 | 
					  latestCommit="$(git -C "$ABRA_DIR/recipes/$TEST_RECIPE" rev-parse --short HEAD)"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app deploy "$TEST_APP_DOMAIN" \
 | 
					  run $ABRA app deploy "$TEST_APP_DOMAIN" \
 | 
				
			||||||
    --no-input --no-converge-checks --chaos
 | 
					    --no-input --chaos
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
  assert_output --partial "$latestCommit"
 | 
					  assert_output --partial "$latestCommit"
 | 
				
			||||||
  assert_output --partial 'chaos'
 | 
					  assert_output --partial 'chaos'
 | 
				
			||||||
 | 
				
			|||||||
@ -8,7 +8,7 @@ setup_file(){
 | 
				
			|||||||
  run $ABRA app new "$TEST_RECIPE" \
 | 
					  run $ABRA app new "$TEST_RECIPE" \
 | 
				
			||||||
    --no-input \
 | 
					    --no-input \
 | 
				
			||||||
    --server "$TEST_SERVER" \
 | 
					    --server "$TEST_SERVER" \
 | 
				
			||||||
    --domain "$TEST_APP_DOMAIN" \
 | 
					    --domain "$TEST_APP_DOMAIN"
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
  assert_exists "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
 | 
					  assert_exists "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -19,13 +19,6 @@ teardown_file(){
 | 
				
			|||||||
  _reset_recipe
 | 
					  _reset_recipe
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
teardown(){
 | 
					 | 
				
			||||||
  # https://github.com/bats-core/bats-core/issues/383#issuecomment-738628888
 | 
					 | 
				
			||||||
  if [[ -z "${BATS_TEST_COMPLETED}" ]]; then
 | 
					 | 
				
			||||||
    _undeploy_app
 | 
					 | 
				
			||||||
  fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
setup(){
 | 
					setup(){
 | 
				
			||||||
  load "$PWD/tests/integration/helpers/common"
 | 
					  load "$PWD/tests/integration/helpers/common"
 | 
				
			||||||
  _common_setup
 | 
					  _common_setup
 | 
				
			||||||
 | 
				
			|||||||
@ -59,6 +59,8 @@ teardown(){
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
# bats test_tags=slow
 | 
					# bats test_tags=slow
 | 
				
			||||||
@test "error if not in catalogue" {
 | 
					@test "error if not in catalogue" {
 | 
				
			||||||
 | 
					  skip "known issue, see https://git.coopcloud.tech/coop-cloud/recipes-catalogue-json/issues/6"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  _deploy_app
 | 
					  _deploy_app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app version "$TEST_APP_DOMAIN"
 | 
					  run $ABRA app version "$TEST_APP_DOMAIN"
 | 
				
			||||||
@ -92,7 +94,7 @@ teardown(){
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 # NOTE(d1): to let the stack come down before nuking volumes
 | 
					 # NOTE(d1): to let the stack come down before nuking volumes
 | 
				
			||||||
  sleep 3
 | 
					  sleep 5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app volume remove "$appDomain" --no-input
 | 
					  run $ABRA app volume remove "$appDomain" --no-input
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
				
			|||||||
@ -78,9 +78,6 @@ teardown(){
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  _undeploy_app
 | 
					  _undeploy_app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # NOTE(d1): to let the stack come down before nuking volumes
 | 
					 | 
				
			||||||
  sleep 5
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  run $ABRA app volume rm "$TEST_APP_DOMAIN" --force
 | 
					  run $ABRA app volume rm "$TEST_APP_DOMAIN" --force
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
  assert_output --partial 'volumes removed successfully'
 | 
					  assert_output --partial 'volumes removed successfully'
 | 
				
			||||||
@ -92,9 +89,6 @@ teardown(){
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  _undeploy_app
 | 
					  _undeploy_app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  # NOTE(d1): to let the stack come down before nuking volumes
 | 
					 | 
				
			||||||
  sleep 5
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  run $ABRA app volume rm "$TEST_APP_DOMAIN" --force
 | 
					  run $ABRA app volume rm "$TEST_APP_DOMAIN" --force
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
  assert_output --partial 'volumes removed successfully'
 | 
					  assert_output --partial 'volumes removed successfully'
 | 
				
			||||||
 | 
				
			|||||||
@ -49,7 +49,7 @@ _reset_app(){
 | 
				
			|||||||
  run $ABRA app new "$TEST_RECIPE" \
 | 
					  run $ABRA app new "$TEST_RECIPE" \
 | 
				
			||||||
    --no-input \
 | 
					    --no-input \
 | 
				
			||||||
    --server "$TEST_SERVER" \
 | 
					    --server "$TEST_SERVER" \
 | 
				
			||||||
    --domain "$TEST_APP_DOMAIN" \
 | 
					    --domain "$TEST_APP_DOMAIN"
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
  assert_exists "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
 | 
					  assert_exists "$ABRA_DIR/servers/$TEST_SERVER/$TEST_APP_DOMAIN.env"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -11,7 +11,11 @@ _add_server() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
_rm_server() {
 | 
					_rm_server() {
 | 
				
			||||||
 | 
					  if [[ "$TEST_SERVER" == "default" ]]; then
 | 
				
			||||||
 | 
					      run rm -rf "$ABRA_DIR/servers/default"
 | 
				
			||||||
 | 
					  else
 | 
				
			||||||
      run $ABRA server remove --no-input "$TEST_SERVER"
 | 
					      run $ABRA server remove --no-input "$TEST_SERVER"
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
  assert_not_exists "$ABRA_DIR/servers/$TEST_SERVER"
 | 
					  assert_not_exists "$ABRA_DIR/servers/$TEST_SERVER"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -66,13 +66,13 @@ setup() {
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA recipe lint "$TEST_RECIPE"
 | 
					  run $ABRA recipe lint "$TEST_RECIPE"
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  refute_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  _reset_recipe
 | 
					  _reset_recipe
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@ -82,13 +82,13 @@ setup() {
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA recipe lint "$TEST_RECIPE" --offline
 | 
					  run $ABRA recipe lint "$TEST_RECIPE" --offline
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  _reset_recipe
 | 
					  _reset_recipe
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -23,14 +23,14 @@ teardown(){
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@test "create new recipe" {
 | 
					@test "create new recipe" {
 | 
				
			||||||
  run $ABRA recipe new foobar --git-name foo --git-email foo@example.com
 | 
					  run $ABRA recipe new foobar
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
  assert_output --partial 'Your new foobar recipe has been created'
 | 
					  assert_output --partial 'Your new foobar recipe has been created'
 | 
				
			||||||
  assert_exists "$ABRA_DIR/recipes/foobar"
 | 
					  assert_exists "$ABRA_DIR/recipes/foobar"
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@test "create new app from new recipe" {
 | 
					@test "create new app from new recipe" {
 | 
				
			||||||
  run $ABRA recipe new foobar --git-name foo --git-email foo@example.com
 | 
					  run $ABRA recipe new foobar
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA app new foobar \
 | 
					  run $ABRA app new foobar \
 | 
				
			||||||
 | 
				
			|||||||
@ -61,14 +61,14 @@ setup(){
 | 
				
			|||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  assert_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA recipe upgrade "$TEST_RECIPE" --no-input
 | 
					  run $ABRA recipe upgrade "$TEST_RECIPE" --no-input
 | 
				
			||||||
  assert_success
 | 
					  assert_success
 | 
				
			||||||
  assert_output --partial 'can upgrade service: app'
 | 
					  assert_output --partial 'can upgrade service: app'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
					  run git -C "$ABRA_DIR/recipes/$TEST_RECIPE" status
 | 
				
			||||||
  refute_output --partial 'behind 3'
 | 
					  assert_output --regexp 'behind .* 3 commits'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  _reset_recipe
 | 
					  _reset_recipe
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -12,6 +12,8 @@ setup() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@test "error if not present in catalogue" {
 | 
					@test "error if not present in catalogue" {
 | 
				
			||||||
 | 
					  skip "known issue, see https://git.coopcloud.tech/coop-cloud/recipes-catalogue-json/issues/6"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  run $ABRA recipe versions "$TEST_RECIPE"
 | 
					  run $ABRA recipe versions "$TEST_RECIPE"
 | 
				
			||||||
  assert_failure
 | 
					  assert_failure
 | 
				
			||||||
  assert_output --partial "is not published on the catalogue"
 | 
					  assert_output --partial "is not published on the catalogue"
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user