Merge pull request #1010 from talentedmrjones/rename-workspace-flag
Rename workspace to project including flag, references, and tests
This commit is contained in:
commit
9c32c8a564
@ -13,37 +13,37 @@ import (
|
|||||||
"go.dagger.io/dagger/state"
|
"go.dagger.io/dagger/state"
|
||||||
)
|
)
|
||||||
|
|
||||||
func CurrentWorkspace(ctx context.Context) *state.Workspace {
|
func CurrentProject(ctx context.Context) *state.Project {
|
||||||
lg := log.Ctx(ctx)
|
lg := log.Ctx(ctx)
|
||||||
|
|
||||||
if workspacePath := viper.GetString("workspace"); workspacePath != "" {
|
if projectPath := viper.GetString("project"); projectPath != "" {
|
||||||
workspace, err := state.Open(ctx, workspacePath)
|
project, err := state.Open(ctx, projectPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
lg.
|
lg.
|
||||||
Fatal().
|
Fatal().
|
||||||
Err(err).
|
Err(err).
|
||||||
Str("path", workspacePath).
|
Str("path", projectPath).
|
||||||
Msg("failed to open workspace")
|
Msg("failed to open project")
|
||||||
}
|
}
|
||||||
return workspace
|
return project
|
||||||
}
|
}
|
||||||
|
|
||||||
workspace, err := state.Current(ctx)
|
project, err := state.Current(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
lg.
|
lg.
|
||||||
Fatal().
|
Fatal().
|
||||||
Err(err).
|
Err(err).
|
||||||
Msg("failed to determine current workspace")
|
Msg("failed to determine current project")
|
||||||
}
|
}
|
||||||
return workspace
|
return project
|
||||||
}
|
}
|
||||||
|
|
||||||
func CurrentEnvironmentState(ctx context.Context, workspace *state.Workspace) *state.State {
|
func CurrentEnvironmentState(ctx context.Context, project *state.Project) *state.State {
|
||||||
lg := log.Ctx(ctx)
|
lg := log.Ctx(ctx)
|
||||||
|
|
||||||
environmentName := viper.GetString("environment")
|
environmentName := viper.GetString("environment")
|
||||||
if environmentName != "" {
|
if environmentName != "" {
|
||||||
st, err := workspace.Get(ctx, environmentName)
|
st, err := project.Get(ctx, environmentName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
lg.
|
lg.
|
||||||
Fatal().
|
Fatal().
|
||||||
@ -53,7 +53,7 @@ func CurrentEnvironmentState(ctx context.Context, workspace *state.Workspace) *s
|
|||||||
return st
|
return st
|
||||||
}
|
}
|
||||||
|
|
||||||
environments, err := workspace.List(ctx)
|
environments, err := project.List(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
lg.
|
lg.
|
||||||
Fatal().
|
Fatal().
|
||||||
@ -76,7 +76,7 @@ func CurrentEnvironmentState(ctx context.Context, workspace *state.Workspace) *s
|
|||||||
Fatal().
|
Fatal().
|
||||||
Err(err).
|
Err(err).
|
||||||
Strs("environments", envNames).
|
Strs("environments", envNames).
|
||||||
Msg("multiple environments available in the workspace, select one with `--environment`")
|
Msg("multiple environments available in the project, select one with `--environment`")
|
||||||
}
|
}
|
||||||
|
|
||||||
return environments[0]
|
return environments[0]
|
||||||
|
@ -32,9 +32,9 @@ func commandName(cmd *cobra.Command) string {
|
|||||||
return strings.Join(parts, " ")
|
return strings.Join(parts, " ")
|
||||||
}
|
}
|
||||||
|
|
||||||
// TrackWorkspaceCommand is like TrackCommand but includes workspace and
|
// TrackProjectCommand is like TrackCommand but includes project and
|
||||||
// optionally environment metadata.
|
// optionally environment metadata.
|
||||||
func TrackWorkspaceCommand(ctx context.Context, cmd *cobra.Command, w *state.Workspace, env *state.State, props ...*telemetry.Property) chan struct{} {
|
func TrackProjectCommand(ctx context.Context, cmd *cobra.Command, w *state.Project, env *state.State, props ...*telemetry.Property) chan struct{} {
|
||||||
props = append([]*telemetry.Property{
|
props = append([]*telemetry.Property{
|
||||||
{
|
{
|
||||||
// Hash the repository URL for privacy
|
// Hash the repository URL for privacy
|
||||||
@ -42,8 +42,8 @@ func TrackWorkspaceCommand(ctx context.Context, cmd *cobra.Command, w *state.Wor
|
|||||||
Value: hash(gitRepoURL(w.Path)),
|
Value: hash(gitRepoURL(w.Path)),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
// The workspace path might contain the username (e.g. /home/user/workspace), so we hash itfor privacy.
|
// The project path might contain the username (e.g. /home/user/project), so we hash itfor privacy.
|
||||||
Name: "workspace_path_hash",
|
Name: "project_path_hash",
|
||||||
Value: hash(w.Path),
|
Value: hash(w.Path),
|
||||||
},
|
},
|
||||||
}, props...)
|
}, props...)
|
||||||
|
@ -34,14 +34,14 @@ var editCmd = &cobra.Command{
|
|||||||
lg := logger.New()
|
lg := logger.New()
|
||||||
ctx := lg.WithContext(cmd.Context())
|
ctx := lg.WithContext(cmd.Context())
|
||||||
|
|
||||||
workspace := common.CurrentWorkspace(ctx)
|
project := common.CurrentProject(ctx)
|
||||||
st := common.CurrentEnvironmentState(ctx, workspace)
|
st := common.CurrentEnvironmentState(ctx, project)
|
||||||
|
|
||||||
lg = lg.With().
|
lg = lg.With().
|
||||||
Str("environment", st.Name).
|
Str("environment", st.Name).
|
||||||
Logger()
|
Logger()
|
||||||
|
|
||||||
doneCh := common.TrackWorkspaceCommand(ctx, cmd, workspace, st)
|
doneCh := common.TrackProjectCommand(ctx, cmd, project, st)
|
||||||
|
|
||||||
data, err := yaml.Marshal(st)
|
data, err := yaml.Marshal(st)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -92,7 +92,7 @@ var editCmd = &cobra.Command{
|
|||||||
lg.Fatal().Err(err).Str("environment", st.Name).Msg("invalid input")
|
lg.Fatal().Err(err).Str("environment", st.Name).Msg("invalid input")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := workspace.Save(ctx, st); err != nil {
|
if err := project.Save(ctx, st); err != nil {
|
||||||
lg.Fatal().Err(err).Msg("failed to save state")
|
lg.Fatal().Err(err).Msg("failed to save state")
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
@ -12,7 +12,7 @@ import (
|
|||||||
|
|
||||||
var initCmd = &cobra.Command{
|
var initCmd = &cobra.Command{
|
||||||
Use: "init",
|
Use: "init",
|
||||||
Short: "Initialize a new empty workspace",
|
Short: "Initialize a new empty project",
|
||||||
Args: cobra.NoArgs,
|
Args: cobra.NoArgs,
|
||||||
PreRun: func(cmd *cobra.Command, args []string) {
|
PreRun: func(cmd *cobra.Command, args []string) {
|
||||||
// Fix Viper bug for duplicate flags:
|
// Fix Viper bug for duplicate flags:
|
||||||
@ -25,7 +25,7 @@ var initCmd = &cobra.Command{
|
|||||||
lg := logger.New()
|
lg := logger.New()
|
||||||
ctx := lg.WithContext(cmd.Context())
|
ctx := lg.WithContext(cmd.Context())
|
||||||
|
|
||||||
dir := viper.GetString("workspace")
|
dir := viper.GetString("project")
|
||||||
if dir == "" {
|
if dir == "" {
|
||||||
cwd, err := os.Getwd()
|
cwd, err := os.Getwd()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -37,12 +37,12 @@ var initCmd = &cobra.Command{
|
|||||||
dir = cwd
|
dir = cwd
|
||||||
}
|
}
|
||||||
|
|
||||||
workspace, err := state.Init(ctx, dir)
|
project, err := state.Init(ctx, dir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
lg.Fatal().Err(err).Msg("failed to initialize workspace")
|
lg.Fatal().Err(err).Msg("failed to initialize project")
|
||||||
}
|
}
|
||||||
|
|
||||||
<-common.TrackWorkspaceCommand(ctx, cmd, workspace, nil)
|
<-common.TrackProjectCommand(ctx, cmd, project, nil)
|
||||||
|
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@ -37,11 +37,11 @@ var dirCmd = &cobra.Command{
|
|||||||
lg.Fatal().Err(err).Str("path", args[1]).Msg("dir doesn't exists")
|
lg.Fatal().Err(err).Str("path", args[1]).Msg("dir doesn't exists")
|
||||||
}
|
}
|
||||||
|
|
||||||
workspace := common.CurrentWorkspace(ctx)
|
project := common.CurrentProject(ctx)
|
||||||
if !strings.HasPrefix(p, workspace.Path) {
|
if !strings.HasPrefix(p, project.Path) {
|
||||||
lg.Fatal().Err(err).Str("path", args[1]).Msg("dir is outside the workspace")
|
lg.Fatal().Err(err).Str("path", args[1]).Msg("dir is outside the project")
|
||||||
}
|
}
|
||||||
p, err = filepath.Rel(workspace.Path, p)
|
p, err = filepath.Rel(project.Path, p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
lg.Fatal().Err(err).Str("path", args[1]).Msg("unable to resolve path")
|
lg.Fatal().Err(err).Str("path", args[1]).Msg("unable to resolve path")
|
||||||
}
|
}
|
||||||
|
@ -32,14 +32,14 @@ var listCmd = &cobra.Command{
|
|||||||
lg := logger.New()
|
lg := logger.New()
|
||||||
ctx := lg.WithContext(cmd.Context())
|
ctx := lg.WithContext(cmd.Context())
|
||||||
|
|
||||||
workspace := common.CurrentWorkspace(ctx)
|
project := common.CurrentProject(ctx)
|
||||||
st := common.CurrentEnvironmentState(ctx, workspace)
|
st := common.CurrentEnvironmentState(ctx, project)
|
||||||
|
|
||||||
lg = lg.With().
|
lg = lg.With().
|
||||||
Str("environment", st.Name).
|
Str("environment", st.Name).
|
||||||
Logger()
|
Logger()
|
||||||
|
|
||||||
doneCh := common.TrackWorkspaceCommand(ctx, cmd, workspace, st)
|
doneCh := common.TrackProjectCommand(ctx, cmd, project, st)
|
||||||
|
|
||||||
c := common.NewClient(ctx)
|
c := common.NewClient(ctx)
|
||||||
err := c.Do(ctx, st, func(ctx context.Context, env *environment.Environment, s solver.Solver) error {
|
err := c.Do(ctx, st, func(ctx context.Context, env *environment.Environment, s solver.Solver) error {
|
||||||
|
@ -40,14 +40,14 @@ func init() {
|
|||||||
func updateEnvironmentInput(ctx context.Context, cmd *cobra.Command, target string, input state.Input) {
|
func updateEnvironmentInput(ctx context.Context, cmd *cobra.Command, target string, input state.Input) {
|
||||||
lg := *log.Ctx(ctx)
|
lg := *log.Ctx(ctx)
|
||||||
|
|
||||||
workspace := common.CurrentWorkspace(ctx)
|
project := common.CurrentProject(ctx)
|
||||||
st := common.CurrentEnvironmentState(ctx, workspace)
|
st := common.CurrentEnvironmentState(ctx, project)
|
||||||
|
|
||||||
lg = lg.With().
|
lg = lg.With().
|
||||||
Str("environment", st.Name).
|
Str("environment", st.Name).
|
||||||
Logger()
|
Logger()
|
||||||
|
|
||||||
doneCh := common.TrackWorkspaceCommand(ctx, cmd, workspace, st, &telemetry.Property{
|
doneCh := common.TrackProjectCommand(ctx, cmd, project, st, &telemetry.Property{
|
||||||
Name: "input_target",
|
Name: "input_target",
|
||||||
Value: target,
|
Value: target,
|
||||||
})
|
})
|
||||||
@ -71,7 +71,7 @@ func updateEnvironmentInput(ctx context.Context, cmd *cobra.Command, target stri
|
|||||||
lg.Fatal().Err(err).Msg("invalid input")
|
lg.Fatal().Err(err).Msg("invalid input")
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := workspace.Save(ctx, st); err != nil {
|
if err := project.Save(ctx, st); err != nil {
|
||||||
lg.Fatal().Err(err).Msg("cannot update environment")
|
lg.Fatal().Err(err).Msg("cannot update environment")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,11 +22,11 @@ var unsetCmd = &cobra.Command{
|
|||||||
lg := logger.New()
|
lg := logger.New()
|
||||||
ctx := lg.WithContext(cmd.Context())
|
ctx := lg.WithContext(cmd.Context())
|
||||||
|
|
||||||
workspace := common.CurrentWorkspace(ctx)
|
project := common.CurrentProject(ctx)
|
||||||
st := common.CurrentEnvironmentState(ctx, workspace)
|
st := common.CurrentEnvironmentState(ctx, project)
|
||||||
st.RemoveInputs(args[0])
|
st.RemoveInputs(args[0])
|
||||||
|
|
||||||
if err := workspace.Save(ctx, st); err != nil {
|
if err := project.Save(ctx, st); err != nil {
|
||||||
lg.Fatal().Err(err).Str("environment", st.Name).Msg("cannot update environment")
|
lg.Fatal().Err(err).Str("environment", st.Name).Msg("cannot update environment")
|
||||||
}
|
}
|
||||||
lg.Info().Str("environment", st.Name).Msg("updated environment")
|
lg.Info().Str("environment", st.Name).Msg("updated environment")
|
||||||
|
@ -29,10 +29,10 @@ var listCmd = &cobra.Command{
|
|||||||
lg := logger.New()
|
lg := logger.New()
|
||||||
ctx := lg.WithContext(cmd.Context())
|
ctx := lg.WithContext(cmd.Context())
|
||||||
|
|
||||||
workspace := common.CurrentWorkspace(ctx)
|
project := common.CurrentProject(ctx)
|
||||||
doneCh := common.TrackWorkspaceCommand(ctx, cmd, workspace, nil)
|
doneCh := common.TrackProjectCommand(ctx, cmd, project, nil)
|
||||||
|
|
||||||
environments, err := workspace.List(ctx)
|
environments, err := project.List(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
lg.
|
lg.
|
||||||
Fatal().
|
Fatal().
|
||||||
|
@ -24,11 +24,11 @@ const tmpBasePath = "./cue.mod/tmp"
|
|||||||
type file struct {
|
type file struct {
|
||||||
require []*require
|
require []*require
|
||||||
|
|
||||||
workspacePath string
|
projectPath string
|
||||||
}
|
}
|
||||||
|
|
||||||
func readPath(workspacePath string) (*file, error) {
|
func readPath(projectPath string) (*file, error) {
|
||||||
p := path.Join(workspacePath, filePath)
|
p := path.Join(projectPath, filePath)
|
||||||
|
|
||||||
f, err := os.Open(p)
|
f, err := os.Open(p)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -47,7 +47,7 @@ func readPath(workspacePath string) (*file, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
modFile.workspacePath = workspacePath
|
modFile.projectPath = projectPath
|
||||||
|
|
||||||
return modFile, nil
|
return modFile, nil
|
||||||
}
|
}
|
||||||
@ -102,7 +102,7 @@ func nonEmptyLines(b []byte) []string {
|
|||||||
func (f *file) processRequire(req *require, upgrade bool) (bool, error) {
|
func (f *file) processRequire(req *require, upgrade bool) (bool, error) {
|
||||||
var isNew bool
|
var isNew bool
|
||||||
|
|
||||||
tmpPath := path.Join(f.workspacePath, tmpBasePath, req.repo)
|
tmpPath := path.Join(f.projectPath, tmpBasePath, req.repo)
|
||||||
if err := os.MkdirAll(tmpPath, 0755); err != nil {
|
if err := os.MkdirAll(tmpPath, 0755); err != nil {
|
||||||
return false, fmt.Errorf("error creating tmp dir for cloning package")
|
return false, fmt.Errorf("error creating tmp dir for cloning package")
|
||||||
}
|
}
|
||||||
@ -117,7 +117,7 @@ func (f *file) processRequire(req *require, upgrade bool) (bool, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
existing := f.search(req)
|
existing := f.search(req)
|
||||||
destPath := path.Join(f.workspacePath, destBasePath)
|
destPath := path.Join(f.projectPath, destBasePath)
|
||||||
|
|
||||||
// requirement is new, so we should move the files and add it to the mod file
|
// requirement is new, so we should move the files and add it to the mod file
|
||||||
if existing == nil {
|
if existing == nil {
|
||||||
@ -167,7 +167,7 @@ func (f *file) processRequire(req *require, upgrade bool) (bool, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (f *file) write() error {
|
func (f *file) write() error {
|
||||||
return ioutil.WriteFile(path.Join(f.workspacePath, filePath), f.contents().Bytes(), 0600)
|
return ioutil.WriteFile(path.Join(f.projectPath, filePath), f.contents().Bytes(), 0600)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *file) contents() *bytes.Buffer {
|
func (f *file) contents() *bytes.Buffer {
|
||||||
|
@ -25,15 +25,15 @@ var getCmd = &cobra.Command{
|
|||||||
lg := logger.New()
|
lg := logger.New()
|
||||||
ctx := lg.WithContext(cmd.Context())
|
ctx := lg.WithContext(cmd.Context())
|
||||||
|
|
||||||
workspace := common.CurrentWorkspace(ctx)
|
project := common.CurrentProject(ctx)
|
||||||
st := common.CurrentEnvironmentState(ctx, workspace)
|
st := common.CurrentEnvironmentState(ctx, project)
|
||||||
doneCh := common.TrackWorkspaceCommand(ctx, cmd, workspace, st, &telemetry.Property{
|
doneCh := common.TrackProjectCommand(ctx, cmd, project, st, &telemetry.Property{
|
||||||
Name: "packages",
|
Name: "packages",
|
||||||
Value: args,
|
Value: args,
|
||||||
})
|
})
|
||||||
|
|
||||||
// read mod file in the current dir
|
// read mod file in the current dir
|
||||||
modFile, err := readPath(workspace.Path)
|
modFile, err := readPath(project.Path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
lg.Fatal().Err(err).Msg("error loading module file")
|
lg.Fatal().Err(err).Msg("error loading module file")
|
||||||
}
|
}
|
||||||
|
@ -23,7 +23,7 @@ var newCmd = &cobra.Command{
|
|||||||
lg := logger.New()
|
lg := logger.New()
|
||||||
ctx := lg.WithContext(cmd.Context())
|
ctx := lg.WithContext(cmd.Context())
|
||||||
|
|
||||||
workspace := common.CurrentWorkspace(ctx)
|
project := common.CurrentProject(ctx)
|
||||||
|
|
||||||
if viper.GetString("environment") != "" {
|
if viper.GetString("environment") != "" {
|
||||||
lg.
|
lg.
|
||||||
@ -32,7 +32,7 @@ var newCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
name := args[0]
|
name := args[0]
|
||||||
|
|
||||||
st, err := workspace.Create(ctx, name, state.Plan{
|
st, err := project.Create(ctx, name, state.Plan{
|
||||||
Package: viper.GetString("package"),
|
Package: viper.GetString("package"),
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -40,7 +40,7 @@ var newCmd = &cobra.Command{
|
|||||||
lg.Fatal().Err(err).Msg("failed to create environment")
|
lg.Fatal().Err(err).Msg("failed to create environment")
|
||||||
}
|
}
|
||||||
|
|
||||||
<-common.TrackWorkspaceCommand(ctx, cmd, workspace, st)
|
<-common.TrackProjectCommand(ctx, cmd, project, st)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,14 +31,14 @@ var listCmd = &cobra.Command{
|
|||||||
lg := logger.New()
|
lg := logger.New()
|
||||||
ctx := lg.WithContext(cmd.Context())
|
ctx := lg.WithContext(cmd.Context())
|
||||||
|
|
||||||
workspace := common.CurrentWorkspace(ctx)
|
project := common.CurrentProject(ctx)
|
||||||
st := common.CurrentEnvironmentState(ctx, workspace)
|
st := common.CurrentEnvironmentState(ctx, project)
|
||||||
|
|
||||||
lg = lg.With().
|
lg = lg.With().
|
||||||
Str("environment", st.Name).
|
Str("environment", st.Name).
|
||||||
Logger()
|
Logger()
|
||||||
|
|
||||||
doneCh := common.TrackWorkspaceCommand(ctx, cmd, workspace, st)
|
doneCh := common.TrackProjectCommand(ctx, cmd, project, st)
|
||||||
|
|
||||||
cl := common.NewClient(ctx)
|
cl := common.NewClient(ctx)
|
||||||
err := cl.Do(ctx, st, func(ctx context.Context, env *environment.Environment, s solver.Solver) error {
|
err := cl.Do(ctx, st, func(ctx context.Context, env *environment.Environment, s solver.Solver) error {
|
||||||
|
@ -27,8 +27,8 @@ var queryCmd = &cobra.Command{
|
|||||||
lg := logger.New()
|
lg := logger.New()
|
||||||
ctx := lg.WithContext(cmd.Context())
|
ctx := lg.WithContext(cmd.Context())
|
||||||
|
|
||||||
workspace := common.CurrentWorkspace(ctx)
|
project := common.CurrentProject(ctx)
|
||||||
state := common.CurrentEnvironmentState(ctx, workspace)
|
state := common.CurrentEnvironmentState(ctx, project)
|
||||||
|
|
||||||
lg = lg.With().
|
lg = lg.With().
|
||||||
Str("environment", state.Name).
|
Str("environment", state.Name).
|
||||||
@ -40,7 +40,7 @@ var queryCmd = &cobra.Command{
|
|||||||
cuePath = cue.ParsePath(args[0])
|
cuePath = cue.ParsePath(args[0])
|
||||||
}
|
}
|
||||||
|
|
||||||
doneCh := common.TrackWorkspaceCommand(ctx, cmd, workspace, state)
|
doneCh := common.TrackProjectCommand(ctx, cmd, project, state)
|
||||||
|
|
||||||
cueVal := compiler.NewValue()
|
cueVal := compiler.NewValue()
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ func init() {
|
|||||||
"External cache sources (eg. user/app:cache, type=local,src=path/to/dir)")
|
"External cache sources (eg. user/app:cache, type=local,src=path/to/dir)")
|
||||||
|
|
||||||
rootCmd.PersistentFlags().StringP("environment", "e", "", "Select an environment")
|
rootCmd.PersistentFlags().StringP("environment", "e", "", "Select an environment")
|
||||||
rootCmd.PersistentFlags().StringP("workspace", "w", "", "Specify a workspace (defaults to current git repository)")
|
rootCmd.PersistentFlags().String("project", "", "Specify a project directory (defaults to current)")
|
||||||
|
|
||||||
rootCmd.PersistentPreRun = func(cmd *cobra.Command, _ []string) {
|
rootCmd.PersistentPreRun = func(cmd *cobra.Command, _ []string) {
|
||||||
lg := logger.New()
|
lg := logger.New()
|
||||||
|
@ -34,14 +34,14 @@ var upCmd = &cobra.Command{
|
|||||||
lg := logger.New()
|
lg := logger.New()
|
||||||
ctx := lg.WithContext(cmd.Context())
|
ctx := lg.WithContext(cmd.Context())
|
||||||
|
|
||||||
workspace := common.CurrentWorkspace(ctx)
|
project := common.CurrentProject(ctx)
|
||||||
st := common.CurrentEnvironmentState(ctx, workspace)
|
st := common.CurrentEnvironmentState(ctx, project)
|
||||||
|
|
||||||
lg = lg.With().
|
lg = lg.With().
|
||||||
Str("environment", st.Name).
|
Str("environment", st.Name).
|
||||||
Logger()
|
Logger()
|
||||||
|
|
||||||
doneCh := common.TrackWorkspaceCommand(ctx, cmd, workspace, st)
|
doneCh := common.TrackProjectCommand(ctx, cmd, project, st)
|
||||||
|
|
||||||
cl := common.NewClient(ctx)
|
cl := common.NewClient(ctx)
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ var upCmd = &cobra.Command{
|
|||||||
}
|
}
|
||||||
|
|
||||||
st.Computed = env.Computed().JSON().PrettyString()
|
st.Computed = env.Computed().JSON().PrettyString()
|
||||||
if err := workspace.Save(ctx, st); err != nil {
|
if err := project.Save(ctx, st); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,13 +15,13 @@ setup() {
|
|||||||
"$DAGGER_SANDBOX"/import-tutorial-key.sh
|
"$DAGGER_SANDBOX"/import-tutorial-key.sh
|
||||||
|
|
||||||
# Collect url
|
# Collect url
|
||||||
dagger -w "$DAGGER_SANDBOX" up
|
dagger --project "$DAGGER_SANDBOX" up
|
||||||
url=$(dagger -w "$DAGGER_SANDBOX" query -f text url)
|
url=$(dagger --project "$DAGGER_SANDBOX" query -f text url)
|
||||||
|
|
||||||
# More commands
|
# More commands
|
||||||
dagger -w "$DAGGER_SANDBOX" list
|
dagger --project "$DAGGER_SANDBOX" list
|
||||||
ls -l "$DAGGER_SANDBOX"/s3
|
ls -l "$DAGGER_SANDBOX"/s3
|
||||||
dagger -w "$DAGGER_SANDBOX" input list
|
dagger --project "$DAGGER_SANDBOX" input list
|
||||||
|
|
||||||
# Check output
|
# Check output
|
||||||
run curl "$url"
|
run curl "$url"
|
||||||
@ -33,25 +33,25 @@ setup() {
|
|||||||
|
|
||||||
# Follow tutorial
|
# Follow tutorial
|
||||||
mkdir -p "$DAGGER_SANDBOX"/multibucket
|
mkdir -p "$DAGGER_SANDBOX"/multibucket
|
||||||
cp "$DAGGER_WORKSPACE"/multibucket/source.cue "$DAGGER_SANDBOX"/multibucket
|
cp "$DAGGER_PROJECT"/multibucket/source.cue "$DAGGER_SANDBOX"/multibucket
|
||||||
cp "$DAGGER_WORKSPACE"/multibucket/yarn.cue "$DAGGER_SANDBOX"/multibucket
|
cp "$DAGGER_PROJECT"/multibucket/yarn.cue "$DAGGER_SANDBOX"/multibucket
|
||||||
cp "$DAGGER_WORKSPACE"/multibucket/netlify.cue "$DAGGER_SANDBOX"/multibucket
|
cp "$DAGGER_PROJECT"/multibucket/netlify.cue "$DAGGER_SANDBOX"/multibucket
|
||||||
|
|
||||||
dagger -w "$DAGGER_SANDBOX" doc alpha.dagger.io/netlify
|
dagger --project "$DAGGER_SANDBOX" doc alpha.dagger.io/netlify
|
||||||
dagger -w "$DAGGER_SANDBOX" doc alpha.dagger.io/js/yarn
|
dagger --project "$DAGGER_SANDBOX" doc alpha.dagger.io/js/yarn
|
||||||
|
|
||||||
# Initialize new env
|
# Initialize new env
|
||||||
dagger -w "$DAGGER_SANDBOX" new 'multibucket' -p "$DAGGER_SANDBOX"/multibucket
|
dagger --project "$DAGGER_SANDBOX" new 'multibucket' -p "$DAGGER_SANDBOX"/multibucket
|
||||||
|
|
||||||
# Copy corresponding env
|
# Copy corresponding env
|
||||||
cp -r "$DAGGER_WORKSPACE"/.dagger/env/multibucket "$DAGGER_SANDBOX"/.dagger/env/
|
cp -r "$DAGGER_PROJECT"/.dagger/env/multibucket "$DAGGER_SANDBOX"/.dagger/env/
|
||||||
|
|
||||||
# Add missing src input
|
# Add missing src input
|
||||||
dagger -w "$DAGGER_SANDBOX" -e multibucket input dir src "$DAGGER_SANDBOX"
|
dagger --project "$DAGGER_SANDBOX" -e multibucket input dir src "$DAGGER_SANDBOX"
|
||||||
|
|
||||||
# Run test
|
# Run test
|
||||||
dagger -w "$DAGGER_SANDBOX" -e multibucket up
|
dagger --project "$DAGGER_SANDBOX" -e multibucket up
|
||||||
url=$(dagger -w "$DAGGER_SANDBOX" -e multibucket query -f text site.netlify.deployUrl)
|
url=$(dagger --project "$DAGGER_SANDBOX" -e multibucket query -f text site.netlify.deployUrl)
|
||||||
|
|
||||||
# Check output
|
# Check output
|
||||||
run curl "$url"
|
run curl "$url"
|
||||||
@ -63,19 +63,19 @@ setup() {
|
|||||||
|
|
||||||
# Follow tutorial
|
# Follow tutorial
|
||||||
mkdir -p "$DAGGER_SANDBOX"/gcpcloudrun
|
mkdir -p "$DAGGER_SANDBOX"/gcpcloudrun
|
||||||
cp "$DAGGER_WORKSPACE"/gcpcloudrun/source.cue "$DAGGER_SANDBOX"/gcpcloudrun
|
cp "$DAGGER_PROJECT"/gcpcloudrun/source.cue "$DAGGER_SANDBOX"/gcpcloudrun
|
||||||
|
|
||||||
# Initialize new env
|
# Initialize new env
|
||||||
dagger -w "$DAGGER_SANDBOX" new 'gcpcloudrun' -p "$DAGGER_SANDBOX"/gcpcloudrun
|
dagger --project "$DAGGER_SANDBOX" new 'gcpcloudrun' -p "$DAGGER_SANDBOX"/gcpcloudrun
|
||||||
|
|
||||||
# Copy corresponding env
|
# Copy corresponding env
|
||||||
cp -r "$DAGGER_WORKSPACE"/.dagger/env/gcpcloudrun "$DAGGER_SANDBOX"/.dagger/env/
|
cp -r "$DAGGER_PROJECT"/.dagger/env/gcpcloudrun "$DAGGER_SANDBOX"/.dagger/env/
|
||||||
|
|
||||||
# Add missing src input
|
# Add missing src input
|
||||||
dagger -w "$DAGGER_SANDBOX" -e gcpcloudrun input dir src "$DAGGER_SANDBOX"
|
dagger --project "$DAGGER_SANDBOX" -e gcpcloudrun input dir src "$DAGGER_SANDBOX"
|
||||||
|
|
||||||
# Run test
|
# Run test
|
||||||
run dagger -w "$DAGGER_SANDBOX" -e gcpcloudrun up
|
run dagger --project "$DAGGER_SANDBOX" -e gcpcloudrun up
|
||||||
assert_success
|
assert_success
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -88,10 +88,10 @@ setup() {
|
|||||||
# copy_to_sandbox kube-kind-basic kube-kind
|
# copy_to_sandbox kube-kind-basic kube-kind
|
||||||
|
|
||||||
# # Add kubeconfig
|
# # Add kubeconfig
|
||||||
# dagger -w "$DAGGER_SANDBOX" -e kube-kind-basic input text kubeconfig -f "$HOME"/.kube/config
|
# dagger --project "$DAGGER_SANDBOX" -e kube-kind-basic input text kubeconfig -f "$HOME"/.kube/config
|
||||||
|
|
||||||
# # Up deployment
|
# # Up deployment
|
||||||
# dagger -w "$DAGGER_SANDBOX" -e kube-kind-basic up
|
# dagger --project "$DAGGER_SANDBOX" -e kube-kind-basic up
|
||||||
|
|
||||||
# # Check deployment
|
# # Check deployment
|
||||||
# kubectl describe deployment todoapp | grep 'True'
|
# kubectl describe deployment todoapp | grep 'True'
|
||||||
@ -105,10 +105,10 @@ setup() {
|
|||||||
# copy_to_sandbox kube-kind-deployment kube-kind
|
# copy_to_sandbox kube-kind-deployment kube-kind
|
||||||
|
|
||||||
# # Add kubeconfig
|
# # Add kubeconfig
|
||||||
# dagger -w "$DAGGER_SANDBOX" -e kube-kind-deployment input text kubeconfig -f "$HOME"/.kube/config
|
# dagger --project "$DAGGER_SANDBOX" -e kube-kind-deployment input text kubeconfig -f "$HOME"/.kube/config
|
||||||
|
|
||||||
# # Up deployment
|
# # Up deployment
|
||||||
# dagger -w "$DAGGER_SANDBOX" -e kube-kind-deployment up
|
# dagger --project "$DAGGER_SANDBOX" -e kube-kind-deployment up
|
||||||
|
|
||||||
# # Check deployment
|
# # Check deployment
|
||||||
# kubectl describe deployment todoapp | grep 'True'
|
# kubectl describe deployment todoapp | grep 'True'
|
||||||
@ -122,10 +122,10 @@ setup() {
|
|||||||
# copy_to_sandbox kube-kind-cue-manifest kube-kind
|
# copy_to_sandbox kube-kind-cue-manifest kube-kind
|
||||||
|
|
||||||
# # Add kubeconfig
|
# # Add kubeconfig
|
||||||
# dagger -w "$DAGGER_SANDBOX" -e kube-kind-cue-manifest input text kubeconfig -f "$HOME"/.kube/config
|
# dagger --project "$DAGGER_SANDBOX" -e kube-kind-cue-manifest input text kubeconfig -f "$HOME"/.kube/config
|
||||||
|
|
||||||
# # Up deployment
|
# # Up deployment
|
||||||
# dagger -w "$DAGGER_SANDBOX" -e kube-kind-cue-manifest up
|
# dagger --project "$DAGGER_SANDBOX" -e kube-kind-cue-manifest up
|
||||||
|
|
||||||
# # Check deployment
|
# # Check deployment
|
||||||
# kubectl describe deployment todoapp | grep 'True'
|
# kubectl describe deployment todoapp | grep 'True'
|
||||||
@ -142,20 +142,20 @@ setup() {
|
|||||||
# copy_to_sandbox kube-aws-basic kube-aws
|
# copy_to_sandbox kube-aws-basic kube-aws
|
||||||
|
|
||||||
# # Up deployment
|
# # Up deployment
|
||||||
# dagger -w "$DAGGER_SANDBOX" -e kube-aws-basic up
|
# dagger --project "$DAGGER_SANDBOX" -e kube-aws-basic up
|
||||||
|
|
||||||
# #################### DEPLOYMENT ####################
|
# #################### DEPLOYMENT ####################
|
||||||
# # Copy deployment to sandbox
|
# # Copy deployment to sandbox
|
||||||
# copy_to_sandbox kube-aws-deployment kube-aws
|
# copy_to_sandbox kube-aws-deployment kube-aws
|
||||||
|
|
||||||
# # Up deployment
|
# # Up deployment
|
||||||
# dagger -w "$DAGGER_SANDBOX" -e kube-aws-deployment up
|
# dagger --project "$DAGGER_SANDBOX" -e kube-aws-deployment up
|
||||||
# #################### CUE MANIFEST ####################
|
# #################### CUE MANIFEST ####################
|
||||||
# # Copy deployment to sandbox
|
# # Copy deployment to sandbox
|
||||||
# copy_to_sandbox kube-aws-cue-manifest kube-aws
|
# copy_to_sandbox kube-aws-cue-manifest kube-aws
|
||||||
|
|
||||||
# # Up deployment
|
# # Up deployment
|
||||||
# dagger -w "$DAGGER_SANDBOX" -e kube-aws-cue-manifest up
|
# dagger --project "$DAGGER_SANDBOX" -e kube-aws-cue-manifest up
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "doc-1007-kube-gcp" {
|
@test "doc-1007-kube-gcp" {
|
||||||
@ -165,20 +165,20 @@ setup() {
|
|||||||
# copy_to_sandbox kube-gcp-basic kube-gcp
|
# copy_to_sandbox kube-gcp-basic kube-gcp
|
||||||
|
|
||||||
# # Up deployment
|
# # Up deployment
|
||||||
# dagger -w "$DAGGER_SANDBOX" -e kube-gcp-basic up
|
# dagger --project "$DAGGER_SANDBOX" -e kube-gcp-basic up
|
||||||
|
|
||||||
# #################### DEPLOYMENT ####################
|
# #################### DEPLOYMENT ####################
|
||||||
# # Copy deployment to sandbox
|
# # Copy deployment to sandbox
|
||||||
# copy_to_sandbox kube-gcp-deployment kube-gcp
|
# copy_to_sandbox kube-gcp-deployment kube-gcp
|
||||||
|
|
||||||
# # Up deployment
|
# # Up deployment
|
||||||
# dagger -w "$DAGGER_SANDBOX" -e kube-gcp-deployment up
|
# dagger --project "$DAGGER_SANDBOX" -e kube-gcp-deployment up
|
||||||
# #################### CUE MANIFEST ####################
|
# #################### CUE MANIFEST ####################
|
||||||
# # Copy deployment to sandbox
|
# # Copy deployment to sandbox
|
||||||
# copy_to_sandbox kube-gcp-cue-manifest kube-gcp
|
# copy_to_sandbox kube-gcp-cue-manifest kube-gcp
|
||||||
|
|
||||||
# # Up deployment
|
# # Up deployment
|
||||||
# dagger -w "$DAGGER_SANDBOX" -e kube-gcp-cue-manifest up
|
# dagger --project "$DAGGER_SANDBOX" -e kube-gcp-cue-manifest up
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "doc-1008-aws-cloudformation" {
|
@test "doc-1008-aws-cloudformation" {
|
||||||
@ -188,96 +188,96 @@ setup() {
|
|||||||
### Create a basic plan
|
### Create a basic plan
|
||||||
## Construct
|
## Construct
|
||||||
mkdir -p "$DAGGER_SANDBOX"/cloudformation
|
mkdir -p "$DAGGER_SANDBOX"/cloudformation
|
||||||
cp "$DAGGER_WORKSPACE"/cloudformation/template.cue "$DAGGER_SANDBOX"/cloudformation
|
cp "$DAGGER_PROJECT"/cloudformation/template.cue "$DAGGER_SANDBOX"/cloudformation
|
||||||
|
|
||||||
# Cloudformation relay
|
# Cloudformation relay
|
||||||
dagger -w "$DAGGER_SANDBOX" doc alpha.dagger.io/aws/cloudformation
|
dagger --project "$DAGGER_SANDBOX" doc alpha.dagger.io/aws/cloudformation
|
||||||
cp "$DAGGER_WORKSPACE"/cloudformation/source-begin.cue "$DAGGER_SANDBOX"/cloudformation/source.cue
|
cp "$DAGGER_PROJECT"/cloudformation/source-begin.cue "$DAGGER_SANDBOX"/cloudformation/source.cue
|
||||||
|
|
||||||
# Initialize new env
|
# Initialize new env
|
||||||
dagger -w "$DAGGER_SANDBOX" new 'cloudformation' -p "$DAGGER_SANDBOX"/cloudformation
|
dagger --project "$DAGGER_SANDBOX" new 'cloudformation' -p "$DAGGER_SANDBOX"/cloudformation
|
||||||
|
|
||||||
# Finish template setup
|
# Finish template setup
|
||||||
cp "$DAGGER_WORKSPACE"/cloudformation/source-end.cue "$DAGGER_SANDBOX"/cloudformation/source.cue
|
cp "$DAGGER_PROJECT"/cloudformation/source-end.cue "$DAGGER_SANDBOX"/cloudformation/source.cue
|
||||||
|
|
||||||
# Copy corresponding env
|
# Copy corresponding env
|
||||||
cp -r "$DAGGER_WORKSPACE"/.dagger/env/cloudformation "$DAGGER_SANDBOX"/.dagger/env/
|
cp -r "$DAGGER_PROJECT"/.dagger/env/cloudformation "$DAGGER_SANDBOX"/.dagger/env/
|
||||||
|
|
||||||
# Run test
|
# Run test
|
||||||
dagger -w "$DAGGER_SANDBOX" -e cloudformation up
|
dagger --project "$DAGGER_SANDBOX" -e cloudformation up
|
||||||
stackName=$(dagger -w "$DAGGER_SANDBOX" -e cloudformation query cfnStackName -f text)
|
stackName=$(dagger --project "$DAGGER_SANDBOX" -e cloudformation query cfnStackName -f text)
|
||||||
|
|
||||||
## Cleanup
|
## Cleanup
|
||||||
# Place back empty source
|
# Place back empty source
|
||||||
cp "$DAGGER_WORKSPACE"/cloudformation/source-begin.cue "$DAGGER_SANDBOX"/cloudformation/source.cue
|
cp "$DAGGER_PROJECT"/cloudformation/source-begin.cue "$DAGGER_SANDBOX"/cloudformation/source.cue
|
||||||
cp "$DAGGER_WORKSPACE"/cloudformation/deletion.cue "$DAGGER_SANDBOX"/cloudformation/deletion.cue
|
cp "$DAGGER_PROJECT"/cloudformation/deletion.cue "$DAGGER_SANDBOX"/cloudformation/deletion.cue
|
||||||
# Prepare and run cloudformation cleanup
|
# Prepare and run cloudformation cleanup
|
||||||
dagger -w "$DAGGER_SANDBOX" -e cloudformation input text stackRemoval.stackName "$stackName"
|
dagger --project "$DAGGER_SANDBOX" -e cloudformation input text stackRemoval.stackName "$stackName"
|
||||||
dagger -w "$DAGGER_SANDBOX" -e cloudformation up
|
dagger --project "$DAGGER_SANDBOX" -e cloudformation up
|
||||||
|
|
||||||
### Template part
|
### Template part
|
||||||
## Create convert.cue
|
## Create convert.cue
|
||||||
cp "$DAGGER_WORKSPACE"/cloudformation/template/convert.cue "$DAGGER_SANDBOX"/cloudformation/convert.cue
|
cp "$DAGGER_PROJECT"/cloudformation/template/convert.cue "$DAGGER_SANDBOX"/cloudformation/convert.cue
|
||||||
rm "$DAGGER_SANDBOX"/cloudformation/source.cue "$DAGGER_SANDBOX"/cloudformation/deletion.cue
|
rm "$DAGGER_SANDBOX"/cloudformation/source.cue "$DAGGER_SANDBOX"/cloudformation/deletion.cue
|
||||||
|
|
||||||
## Retrieve Unmarshalled JSON
|
## Retrieve Unmarshalled JSON
|
||||||
dagger -w "$DAGGER_SANDBOX" query -e cloudformation s3Template
|
dagger --project "$DAGGER_SANDBOX" query -e cloudformation s3Template
|
||||||
|
|
||||||
## Remove convert.cue
|
## Remove convert.cue
|
||||||
rm "$DAGGER_SANDBOX"/cloudformation/convert.cue
|
rm "$DAGGER_SANDBOX"/cloudformation/convert.cue
|
||||||
|
|
||||||
## Store the output
|
## Store the output
|
||||||
cp "$DAGGER_WORKSPACE"/cloudformation/template/template-begin.cue "$DAGGER_SANDBOX"/cloudformation/template.cue
|
cp "$DAGGER_PROJECT"/cloudformation/template/template-begin.cue "$DAGGER_SANDBOX"/cloudformation/template.cue
|
||||||
|
|
||||||
# Inspect conf
|
# Inspect conf
|
||||||
dagger -w "$DAGGER_SANDBOX" query -e cloudformation template -f text
|
dagger --project "$DAGGER_SANDBOX" query -e cloudformation template -f text
|
||||||
|
|
||||||
cp "$DAGGER_WORKSPACE"/cloudformation/template/deployment.cue "$DAGGER_SANDBOX"/cloudformation/deployment.cue
|
cp "$DAGGER_PROJECT"/cloudformation/template/deployment.cue "$DAGGER_SANDBOX"/cloudformation/deployment.cue
|
||||||
cp "$DAGGER_WORKSPACE"/cloudformation/template/template-end.cue "$DAGGER_SANDBOX"/cloudformation/template.cue
|
cp "$DAGGER_PROJECT"/cloudformation/template/template-end.cue "$DAGGER_SANDBOX"/cloudformation/template.cue
|
||||||
cp "$DAGGER_WORKSPACE"/cloudformation/source-end.cue "$DAGGER_SANDBOX"/cloudformation/source.cue
|
cp "$DAGGER_PROJECT"/cloudformation/source-end.cue "$DAGGER_SANDBOX"/cloudformation/source.cue
|
||||||
|
|
||||||
# Deploy again
|
# Deploy again
|
||||||
dagger -w "$DAGGER_SANDBOX" -e cloudformation query template -f text
|
dagger --project "$DAGGER_SANDBOX" -e cloudformation query template -f text
|
||||||
dagger -w "$DAGGER_SANDBOX" -e cloudformation up
|
dagger --project "$DAGGER_SANDBOX" -e cloudformation up
|
||||||
dagger -w "$DAGGER_SANDBOX" -e cloudformation output list
|
dagger --project "$DAGGER_SANDBOX" -e cloudformation output list
|
||||||
|
|
||||||
## Cleanup again
|
## Cleanup again
|
||||||
stackName=$(dagger -w "$DAGGER_SANDBOX" -e cloudformation query cfnStackName -f text)
|
stackName=$(dagger --project "$DAGGER_SANDBOX" -e cloudformation query cfnStackName -f text)
|
||||||
rm -rf "$DAGGER_SANDBOX"/cloudformation/*
|
rm -rf "$DAGGER_SANDBOX"/cloudformation/*
|
||||||
|
|
||||||
# Place back empty source
|
# Place back empty source
|
||||||
cp "$DAGGER_WORKSPACE"/cloudformation/source-begin.cue "$DAGGER_SANDBOX"/cloudformation/source.cue
|
cp "$DAGGER_PROJECT"/cloudformation/source-begin.cue "$DAGGER_SANDBOX"/cloudformation/source.cue
|
||||||
cp "$DAGGER_WORKSPACE"/cloudformation/deletion.cue "$DAGGER_SANDBOX"/cloudformation/deletion.cue
|
cp "$DAGGER_PROJECT"/cloudformation/deletion.cue "$DAGGER_SANDBOX"/cloudformation/deletion.cue
|
||||||
|
|
||||||
# Prepare and run cloudformation cleanup
|
# Prepare and run cloudformation cleanup
|
||||||
dagger -w "$DAGGER_SANDBOX" -e cloudformation input text stackRemoval.stackName "$stackName"
|
dagger --project "$DAGGER_SANDBOX" -e cloudformation input text stackRemoval.stackName "$stackName"
|
||||||
dagger -w "$DAGGER_SANDBOX" -e cloudformation up
|
dagger --project "$DAGGER_SANDBOX" -e cloudformation up
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "doc-1010-dev-cue-package" {
|
@test "doc-1010-dev-cue-package" {
|
||||||
# Initializing workspace
|
# Initializing project
|
||||||
mkdir -p "$DAGGER_SANDBOX"/workspace
|
mkdir -p "$DAGGER_SANDBOX"/project
|
||||||
|
|
||||||
# Writing package
|
# Writing package
|
||||||
# dagger init # The sandbox is already init
|
# dagger init # The sandbox is already init
|
||||||
mkdir -p "$DAGGER_SANDBOX"/cue.mod/pkg/github.com/tjovicic/gcpcloudrun
|
mkdir -p "$DAGGER_SANDBOX"/cue.mod/pkg/github.com/tjovicic/gcpcloudrun
|
||||||
cp "$DAGGER_WORKSPACE"/dev-cue-package/source.cue "$DAGGER_SANDBOX"/cue.mod/pkg/github.com/tjovicic/gcpcloudrun/source.cue
|
cp "$DAGGER_PROJECT"/dev-cue-package/source.cue "$DAGGER_SANDBOX"/cue.mod/pkg/github.com/tjovicic/gcpcloudrun/source.cue
|
||||||
cp "$DAGGER_WORKSPACE"/dev-cue-package/script.sh "$DAGGER_SANDBOX"/workspace/script.sh
|
cp "$DAGGER_PROJECT"/dev-cue-package/script.sh "$DAGGER_SANDBOX"/project/script.sh
|
||||||
|
|
||||||
# We remove the last line of the script, as bats cannot expand dagger
|
# We remove the last line of the script, as bats cannot expand dagger
|
||||||
# to dagger() bats helper func inside bash files
|
# to dagger() bats helper func inside bash files
|
||||||
sed '$d' <"$DAGGER_SANDBOX"/workspace/script.sh >"$DAGGER_SANDBOX"/tmpFile
|
sed '$d' <"$DAGGER_SANDBOX"/project/script.sh >"$DAGGER_SANDBOX"/tmpFile
|
||||||
mv "$DAGGER_SANDBOX"/tmpFile "$DAGGER_SANDBOX"/workspace/script.sh
|
mv "$DAGGER_SANDBOX"/tmpFile "$DAGGER_SANDBOX"/project/script.sh
|
||||||
|
|
||||||
chmod +x "$DAGGER_SANDBOX"/workspace/script.sh
|
chmod +x "$DAGGER_SANDBOX"/project/script.sh
|
||||||
"$DAGGER_SANDBOX"/workspace/script.sh
|
"$DAGGER_SANDBOX"/project/script.sh
|
||||||
|
|
||||||
# Sync file from documentation
|
# Sync file from documentation
|
||||||
rsync -a test "$DAGGER_SANDBOX"
|
rsync -a test "$DAGGER_SANDBOX"
|
||||||
|
|
||||||
# Command removed from script.sh above
|
# Command removed from script.sh above
|
||||||
dagger -w "$DAGGER_SANDBOX" new staging -p "$DAGGER_SANDBOX"/test
|
dagger --project "$DAGGER_SANDBOX" new staging -p "$DAGGER_SANDBOX"/test
|
||||||
run dagger up -w "$DAGGER_SANDBOX" -e staging
|
run dagger up --project "$DAGGER_SANDBOX" -e staging
|
||||||
assert_output --partial "input=run.gcpConfig.serviceKey"
|
assert_output --partial "input=run.gcpConfig.serviceKey"
|
||||||
|
|
||||||
# Clean script.sh output
|
# Clean script.sh output
|
||||||
|
@ -10,19 +10,19 @@ common_setup() {
|
|||||||
# otherwise infinite recursion when DAGGER_BINARY is not set.
|
# otherwise infinite recursion when DAGGER_BINARY is not set.
|
||||||
export DAGGER="${DAGGER_BINARY:-$(bash -c 'command -v dagger')}"
|
export DAGGER="${DAGGER_BINARY:-$(bash -c 'command -v dagger')}"
|
||||||
|
|
||||||
# Set the workspace to the universe directory (so tests can run from anywhere)
|
# Set the project to the universe directory (so tests can run from anywhere)
|
||||||
UNIVERSE="$( cd "$( dirname "$BATS_TEST_FILENAME" )" >/dev/null 2>&1 && pwd )"
|
UNIVERSE="$( cd "$( dirname "$BATS_TEST_FILENAME" )" >/dev/null 2>&1 && pwd )"
|
||||||
DAGGER_WORKSPACE="$UNIVERSE"
|
DAGGER_PROJECT="$UNIVERSE"
|
||||||
export DAGGER_WORKSPACE
|
export DAGGER_PROJECT
|
||||||
|
|
||||||
# Force pretty printing for error reporting
|
# Force pretty printing for error reporting
|
||||||
DAGGER_LOG_FORMAT="pretty"
|
DAGGER_LOG_FORMAT="pretty"
|
||||||
export DAGGER_LOG_FORMAT
|
export DAGGER_LOG_FORMAT
|
||||||
|
|
||||||
# Sandbox workspace.
|
# Sandbox project.
|
||||||
DAGGER_SANDBOX="$(mktemp -d -t dagger-workspace-XXXXXX)"
|
DAGGER_SANDBOX="$(mktemp -d -t dagger-project-XXXXXX)"
|
||||||
export DAGGER_SANDBOX
|
export DAGGER_SANDBOX
|
||||||
dagger init -w "$DAGGER_SANDBOX"
|
dagger init --project "$DAGGER_SANDBOX"
|
||||||
|
|
||||||
# allows the use of `sops`
|
# allows the use of `sops`
|
||||||
SOPS_AGE_KEY_FILE=~/.config/dagger/keys.txt
|
SOPS_AGE_KEY_FILE=~/.config/dagger/keys.txt
|
||||||
@ -43,28 +43,28 @@ setup_example_sandbox() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
# copy an environment from the current workspace to the sandbox.
|
# copy an environment from the current project to the sandbox.
|
||||||
#
|
#
|
||||||
# this is needed if the test requires altering inputs without dirtying the
|
# this is needed if the test requires altering inputs without dirtying the
|
||||||
# current environment.
|
# current environment.
|
||||||
# Usage:
|
# Usage:
|
||||||
# copy_to_sandbox myenv
|
# copy_to_sandbox myenv
|
||||||
# dagger input secret -w "$DAGGER_SANDBOX" -e myenv "temporary change"
|
# dagger input secret -w "$DAGGER_SANDBOX" -e myenv "temporary change"
|
||||||
# dagger up -w "$DAGGER_SANDBOX" -e myenv
|
# dagger up --project "$DAGGER_SANDBOX" -e myenv
|
||||||
#
|
#
|
||||||
# To use testdata directory in tests, add the package name as second flag
|
# To use testdata directory in tests, add the package name as second flag
|
||||||
# Usage:
|
# Usage:
|
||||||
# copy_to_sandbox myenv mypackage
|
# copy_to_sandbox myenv mypackage
|
||||||
copy_to_sandbox() {
|
copy_to_sandbox() {
|
||||||
local name="$1"
|
local name="$1"
|
||||||
local source="$DAGGER_WORKSPACE"/.dagger/env/"$name"
|
local source="$DAGGER_PROJECT"/.dagger/env/"$name"
|
||||||
local target="$DAGGER_SANDBOX"/.dagger/env/"$name"
|
local target="$DAGGER_SANDBOX"/.dagger/env/"$name"
|
||||||
|
|
||||||
cp -a "$source" "$target"
|
cp -a "$source" "$target"
|
||||||
|
|
||||||
if [ -d "$2" ]; then
|
if [ -d "$2" ]; then
|
||||||
local package="$2"
|
local package="$2"
|
||||||
local source_package="$DAGGER_WORKSPACE"/"$package"
|
local source_package="$DAGGER_PROJECT"/"$package"
|
||||||
local target_package="$DAGGER_SANDBOX"/
|
local target_package="$DAGGER_SANDBOX"/
|
||||||
|
|
||||||
cp -a "$source_package" "$target_package"
|
cp -a "$source_package" "$target_package"
|
||||||
|
@ -108,10 +108,10 @@ func (dir dirInput) Compile(_ string, state *State) (*compiler.Value, error) {
|
|||||||
|
|
||||||
p := dir.Path
|
p := dir.Path
|
||||||
if !filepath.IsAbs(p) {
|
if !filepath.IsAbs(p) {
|
||||||
p = filepath.Clean(path.Join(state.Workspace, dir.Path))
|
p = filepath.Clean(path.Join(state.Project, dir.Path))
|
||||||
}
|
}
|
||||||
if !strings.HasPrefix(p, state.Workspace) {
|
if !strings.HasPrefix(p, state.Project) {
|
||||||
return nil, fmt.Errorf("%q is outside the workspace", dir.Path)
|
return nil, fmt.Errorf("%q is outside the project", dir.Path)
|
||||||
}
|
}
|
||||||
|
|
||||||
llb := fmt.Sprintf(
|
llb := fmt.Sprintf(
|
||||||
|
@ -32,11 +32,11 @@ const (
|
|||||||
computedFile = "computed.json"
|
computedFile = "computed.json"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Workspace struct {
|
type Project struct {
|
||||||
Path string
|
Path string
|
||||||
}
|
}
|
||||||
|
|
||||||
func Init(ctx context.Context, dir string) (*Workspace, error) {
|
func Init(ctx context.Context, dir string) (*Project, error) {
|
||||||
root, err := filepath.Abs(dir)
|
root, err := filepath.Abs(dir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -57,12 +57,12 @@ func Init(ctx context.Context, dir string) (*Workspace, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return &Workspace{
|
return &Project{
|
||||||
Path: root,
|
Path: root,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func Open(ctx context.Context, dir string) (*Workspace, error) {
|
func Open(ctx context.Context, dir string) (*Project, error) {
|
||||||
_, err := os.Stat(path.Join(dir, daggerDir))
|
_, err := os.Stat(path.Join(dir, daggerDir))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if errors.Is(err, os.ErrNotExist) {
|
if errors.Is(err, os.ErrNotExist) {
|
||||||
@ -76,12 +76,12 @@ func Open(ctx context.Context, dir string) (*Workspace, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
return &Workspace{
|
return &Project{
|
||||||
Path: root,
|
Path: root,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func Current(ctx context.Context) (*Workspace, error) {
|
func Current(ctx context.Context) (*Project, error) {
|
||||||
current, err := os.Getwd()
|
current, err := os.Getwd()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -103,11 +103,11 @@ func Current(ctx context.Context) (*Workspace, error) {
|
|||||||
return nil, ErrNotInit
|
return nil, ErrNotInit
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *Workspace) envPath(name string) string {
|
func (w *Project) envPath(name string) string {
|
||||||
return path.Join(w.Path, daggerDir, envDir, name)
|
return path.Join(w.Path, daggerDir, envDir, name)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *Workspace) List(ctx context.Context) ([]*State, error) {
|
func (w *Project) List(ctx context.Context) ([]*State, error) {
|
||||||
var (
|
var (
|
||||||
environments = []*State{}
|
environments = []*State{}
|
||||||
err error
|
err error
|
||||||
@ -139,7 +139,7 @@ func (w *Workspace) List(ctx context.Context) ([]*State, error) {
|
|||||||
return environments, nil
|
return environments, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *Workspace) Get(ctx context.Context, name string) (*State, error) {
|
func (w *Project) Get(ctx context.Context, name string) (*State, error) {
|
||||||
envPath, err := filepath.Abs(w.envPath(name))
|
envPath, err := filepath.Abs(w.envPath(name))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -179,7 +179,7 @@ func (w *Workspace) Get(ctx context.Context, name string) (*State, error) {
|
|||||||
st.Plan.Module = planRelPath
|
st.Plan.Module = planRelPath
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
st.Workspace = w.Path
|
st.Project = w.Path
|
||||||
|
|
||||||
computed, err := os.ReadFile(path.Join(envPath, stateDir, computedFile))
|
computed, err := os.ReadFile(path.Join(envPath, stateDir, computedFile))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
@ -189,7 +189,7 @@ func (w *Workspace) Get(ctx context.Context, name string) (*State, error) {
|
|||||||
return &st, nil
|
return &st, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *Workspace) Save(ctx context.Context, st *State) error {
|
func (w *Project) Save(ctx context.Context, st *State) error {
|
||||||
data, err := yaml.Marshal(st)
|
data, err := yaml.Marshal(st)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -234,7 +234,7 @@ func (w *Workspace) Save(ctx context.Context, st *State) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *Workspace) Create(ctx context.Context, name string, plan Plan) (*State, error) {
|
func (w *Project) Create(ctx context.Context, name string, plan Plan) (*State, error) {
|
||||||
if _, err := w.Get(ctx, name); err == nil {
|
if _, err := w.Get(ctx, name); err == nil {
|
||||||
return nil, ErrExist
|
return nil, ErrExist
|
||||||
}
|
}
|
||||||
@ -258,7 +258,7 @@ func (w *Workspace) Create(ctx context.Context, name string, plan Plan) (*State,
|
|||||||
|
|
||||||
st := &State{
|
st := &State{
|
||||||
Path: envPath,
|
Path: envPath,
|
||||||
Workspace: w.Path,
|
Project: w.Path,
|
||||||
Plan: Plan{
|
Plan: Plan{
|
||||||
Package: pkg,
|
Package: pkg,
|
||||||
},
|
},
|
||||||
@ -293,7 +293,7 @@ func (w *Workspace) Create(ctx context.Context, name string, plan Plan) (*State,
|
|||||||
return st, nil
|
return st, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (w *Workspace) cleanPackageName(ctx context.Context, pkg string) (string, error) {
|
func (w *Project) cleanPackageName(ctx context.Context, pkg string) (string, error) {
|
||||||
lg := log.
|
lg := log.
|
||||||
Ctx(ctx).
|
Ctx(ctx).
|
||||||
With().
|
With().
|
||||||
@ -325,7 +325,7 @@ func (w *Workspace) cleanPackageName(ctx context.Context, pkg string) (string, e
|
|||||||
}
|
}
|
||||||
|
|
||||||
if !strings.HasPrefix(p, w.Path) {
|
if !strings.HasPrefix(p, w.Path) {
|
||||||
lg.Fatal().Err(err).Msg("package is outside the workspace")
|
lg.Fatal().Err(err).Msg("package is outside the project")
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
@ -12,7 +12,7 @@ import (
|
|||||||
"gopkg.in/yaml.v3"
|
"gopkg.in/yaml.v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestWorkspace(t *testing.T) {
|
func TestProject(t *testing.T) {
|
||||||
ctx := context.TODO()
|
ctx := context.TODO()
|
||||||
|
|
||||||
keychain.EnsureDefaultKey(ctx)
|
keychain.EnsureDefaultKey(ctx)
|
||||||
@ -25,39 +25,39 @@ func TestWorkspace(t *testing.T) {
|
|||||||
require.ErrorIs(t, ErrNotInit, err)
|
require.ErrorIs(t, ErrNotInit, err)
|
||||||
|
|
||||||
// Init
|
// Init
|
||||||
workspace, err := Init(ctx, root)
|
project, err := Init(ctx, root)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, root, workspace.Path)
|
require.Equal(t, root, project.Path)
|
||||||
|
|
||||||
// Create
|
// Create
|
||||||
st, err := workspace.Create(ctx, "test", Plan{
|
st, err := project.Create(ctx, "test", Plan{
|
||||||
Module: ".",
|
Module: ".",
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, "test", st.Name)
|
require.Equal(t, "test", st.Name)
|
||||||
|
|
||||||
// Open
|
// Open
|
||||||
workspace, err = Open(ctx, root)
|
project, err = Open(ctx, root)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, root, workspace.Path)
|
require.Equal(t, root, project.Path)
|
||||||
|
|
||||||
// List
|
// List
|
||||||
envs, err := workspace.List(ctx)
|
envs, err := project.List(ctx)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Len(t, envs, 1)
|
require.Len(t, envs, 1)
|
||||||
require.Equal(t, "test", envs[0].Name)
|
require.Equal(t, "test", envs[0].Name)
|
||||||
|
|
||||||
// Get
|
// Get
|
||||||
env, err := workspace.Get(ctx, "test")
|
env, err := project.Get(ctx, "test")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Equal(t, "test", env.Name)
|
require.Equal(t, "test", env.Name)
|
||||||
|
|
||||||
// Save
|
// Save
|
||||||
require.NoError(t, env.SetInput("foo", TextInput("bar")))
|
require.NoError(t, env.SetInput("foo", TextInput("bar")))
|
||||||
require.NoError(t, workspace.Save(ctx, env))
|
require.NoError(t, project.Save(ctx, env))
|
||||||
workspace, err = Open(ctx, root)
|
project, err = Open(ctx, root)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
env, err = workspace.Get(ctx, "test")
|
env, err = project.Get(ctx, "test")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.Contains(t, env.Inputs, "foo")
|
require.Contains(t, env.Inputs, "foo")
|
||||||
}
|
}
|
||||||
@ -77,28 +77,28 @@ func TestEncryption(t *testing.T) {
|
|||||||
|
|
||||||
root, err := os.MkdirTemp(os.TempDir(), "dagger-*")
|
root, err := os.MkdirTemp(os.TempDir(), "dagger-*")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
workspace, err := Init(ctx, root)
|
project, err := Init(ctx, root)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
_, err = workspace.Create(ctx, "test", Plan{
|
_, err = project.Create(ctx, "test", Plan{
|
||||||
Module: ".",
|
Module: ".",
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
// Set a plaintext input, make sure it is not encrypted
|
// Set a plaintext input, make sure it is not encrypted
|
||||||
st, err := workspace.Get(ctx, "test")
|
st, err := project.Get(ctx, "test")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NoError(t, st.SetInput("plain", TextInput("plain")))
|
require.NoError(t, st.SetInput("plain", TextInput("plain")))
|
||||||
require.NoError(t, workspace.Save(ctx, st))
|
require.NoError(t, project.Save(ctx, st))
|
||||||
o := readManifest(st)
|
o := readManifest(st)
|
||||||
require.Contains(t, o.Inputs, "plain")
|
require.Contains(t, o.Inputs, "plain")
|
||||||
require.Equal(t, "plain", string(*o.Inputs["plain"].Text))
|
require.Equal(t, "plain", string(*o.Inputs["plain"].Text))
|
||||||
|
|
||||||
// Set a secret input, make sure it's encrypted
|
// Set a secret input, make sure it's encrypted
|
||||||
st, err = workspace.Get(ctx, "test")
|
st, err = project.Get(ctx, "test")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NoError(t, st.SetInput("secret", SecretInput("secret")))
|
require.NoError(t, st.SetInput("secret", SecretInput("secret")))
|
||||||
require.NoError(t, workspace.Save(ctx, st))
|
require.NoError(t, project.Save(ctx, st))
|
||||||
o = readManifest(st)
|
o = readManifest(st)
|
||||||
require.Contains(t, o.Inputs, "secret")
|
require.Contains(t, o.Inputs, "secret")
|
||||||
secretValue := string(*o.Inputs["secret"].Secret)
|
secretValue := string(*o.Inputs["secret"].Secret)
|
||||||
@ -106,10 +106,10 @@ func TestEncryption(t *testing.T) {
|
|||||||
require.True(t, strings.HasPrefix(secretValue, "ENC["))
|
require.True(t, strings.HasPrefix(secretValue, "ENC["))
|
||||||
|
|
||||||
// Change another input, make sure our secret didn't change
|
// Change another input, make sure our secret didn't change
|
||||||
st, err = workspace.Get(ctx, "test")
|
st, err = project.Get(ctx, "test")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
require.NoError(t, st.SetInput("plain", TextInput("different")))
|
require.NoError(t, st.SetInput("plain", TextInput("different")))
|
||||||
require.NoError(t, workspace.Save(ctx, st))
|
require.NoError(t, project.Save(ctx, st))
|
||||||
o = readManifest(st)
|
o = readManifest(st)
|
||||||
require.Contains(t, o.Inputs, "plain")
|
require.Contains(t, o.Inputs, "plain")
|
||||||
require.Equal(t, "different", string(*o.Inputs["plain"].Text))
|
require.Equal(t, "different", string(*o.Inputs["plain"].Text))
|
@ -13,8 +13,8 @@ type State struct {
|
|||||||
// State path
|
// State path
|
||||||
Path string `yaml:"-"`
|
Path string `yaml:"-"`
|
||||||
|
|
||||||
// Workspace path
|
// Project path
|
||||||
Workspace string `yaml:"-"`
|
Project string `yaml:"-"`
|
||||||
|
|
||||||
// Plan
|
// Plan
|
||||||
Plan Plan `yaml:"plan,omitempty"`
|
Plan Plan `yaml:"plan,omitempty"`
|
||||||
@ -33,7 +33,7 @@ type State struct {
|
|||||||
|
|
||||||
// Cue module containing the environment plan
|
// Cue module containing the environment plan
|
||||||
func (s *State) CompilePlan(ctx context.Context) (*compiler.Value, error) {
|
func (s *State) CompilePlan(ctx context.Context) (*compiler.Value, error) {
|
||||||
w := s.Workspace
|
w := s.Project
|
||||||
// FIXME: backward compatibility
|
// FIXME: backward compatibility
|
||||||
if mod := s.Plan.Module; mod != "" {
|
if mod := s.Plan.Module; mod != "" {
|
||||||
w = path.Join(w, mod)
|
w = path.Join(w, mod)
|
||||||
@ -44,7 +44,7 @@ func (s *State) CompilePlan(ctx context.Context) (*compiler.Value, error) {
|
|||||||
// However:
|
// However:
|
||||||
// 1) As of right now, there's no way to update universe through the
|
// 1) As of right now, there's no way to update universe through the
|
||||||
// CLI, so we are lazily updating on `dagger up` using the embedded `universe`
|
// CLI, so we are lazily updating on `dagger up` using the embedded `universe`
|
||||||
// 2) For backward compatibility: if the workspace was `dagger
|
// 2) For backward compatibility: if the project was `dagger
|
||||||
// init`-ed before we added support for vendoring universe, it might not
|
// init`-ed before we added support for vendoring universe, it might not
|
||||||
// contain a `cue.mod`.
|
// contain a `cue.mod`.
|
||||||
if err := vendorUniverse(ctx, w); err != nil {
|
if err := vendorUniverse(ctx, w); err != nil {
|
||||||
@ -83,11 +83,11 @@ func (s *State) CompileInputs() (*compiler.Value, error) {
|
|||||||
|
|
||||||
// VendorUniverse vendors the latest (built-in) version of the universe into the
|
// VendorUniverse vendors the latest (built-in) version of the universe into the
|
||||||
// environment's `cue.mod`.
|
// environment's `cue.mod`.
|
||||||
// FIXME: This has nothing to do in `State` and should be tied to a `Workspace`.
|
// FIXME: This has nothing to do in `State` and should be tied to a `Project`.
|
||||||
// However, since environments could point to different modules before, we have
|
// However, since environments could point to different modules before, we have
|
||||||
// to handle vendoring on a per environment basis.
|
// to handle vendoring on a per environment basis.
|
||||||
func (s *State) VendorUniverse(ctx context.Context) error {
|
func (s *State) VendorUniverse(ctx context.Context) error {
|
||||||
w := s.Workspace
|
w := s.Project
|
||||||
// FIXME: backward compatibility
|
// FIXME: backward compatibility
|
||||||
if mod := s.Plan.Module; mod != "" {
|
if mod := s.Plan.Module; mod != "" {
|
||||||
w = path.Join(w, mod)
|
w = path.Join(w, mod)
|
||||||
|
@ -7,19 +7,19 @@ common_setup() {
|
|||||||
# otherwise infinite recursion when DAGGER_BINARY is not set.
|
# otherwise infinite recursion when DAGGER_BINARY is not set.
|
||||||
export DAGGER="${DAGGER_BINARY:-$(bash -c 'command -v dagger')}"
|
export DAGGER="${DAGGER_BINARY:-$(bash -c 'command -v dagger')}"
|
||||||
|
|
||||||
# Set the workspace to the universe directory (so tests can run from anywhere)
|
# Set the project to the universe directory (so tests can run from anywhere)
|
||||||
UNIVERSE="$( cd "$( dirname "$BATS_TEST_FILENAME" )" >/dev/null 2>&1 && pwd )"
|
UNIVERSE="$( cd "$( dirname "$BATS_TEST_FILENAME" )" >/dev/null 2>&1 && pwd )"
|
||||||
DAGGER_WORKSPACE="$UNIVERSE"
|
DAGGER_PROJECT="$UNIVERSE"
|
||||||
export DAGGER_WORKSPACE
|
export DAGGER_PROJECT
|
||||||
|
|
||||||
# Force pretty printing for error reporting
|
# Force pretty printing for error reporting
|
||||||
DAGGER_LOG_FORMAT="pretty"
|
DAGGER_LOG_FORMAT="pretty"
|
||||||
export DAGGER_LOG_FORMAT
|
export DAGGER_LOG_FORMAT
|
||||||
|
|
||||||
# Sandbox workspace.
|
# Sandbox project.
|
||||||
DAGGER_SANDBOX="$(mktemp -d -t dagger-workspace-XXXXXX)"
|
DAGGER_SANDBOX="$(mktemp -d -t dagger-project-XXXXXX)"
|
||||||
export DAGGER_SANDBOX
|
export DAGGER_SANDBOX
|
||||||
dagger init -w "$DAGGER_SANDBOX"
|
dagger init --project "$DAGGER_SANDBOX"
|
||||||
|
|
||||||
# allows the use of `sops`
|
# allows the use of `sops`
|
||||||
SOPS_AGE_KEY_FILE=~/.config/dagger/keys.txt
|
SOPS_AGE_KEY_FILE=~/.config/dagger/keys.txt
|
||||||
@ -31,28 +31,28 @@ dagger() {
|
|||||||
"${DAGGER}" "$@"
|
"${DAGGER}" "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
# copy an environment from the current workspace to the sandbox.
|
# copy an environment from the current project to the sandbox.
|
||||||
#
|
#
|
||||||
# this is needed if the test requires altering inputs without dirtying the
|
# this is needed if the test requires altering inputs without dirtying the
|
||||||
# current environment.
|
# current environment.
|
||||||
# Usage:
|
# Usage:
|
||||||
# copy_to_sandbox myenv
|
# copy_to_sandbox myenv
|
||||||
# dagger input secret -w "$DAGGER_SANDBOX" -e myenv "temporary change"
|
# dagger input secret -w "$DAGGER_SANDBOX" -e myenv "temporary change"
|
||||||
# dagger up -w "$DAGGER_SANDBOX" -e myenv
|
# dagger up --project "$DAGGER_SANDBOX" -e myenv
|
||||||
#
|
#
|
||||||
# To use testdata directory in tests, add the package name as second flag
|
# To use testdata directory in tests, add the package name as second flag
|
||||||
# Usage:
|
# Usage:
|
||||||
# copy_to_sandbox myenv mypackage
|
# copy_to_sandbox myenv mypackage
|
||||||
copy_to_sandbox() {
|
copy_to_sandbox() {
|
||||||
local name="$1"
|
local name="$1"
|
||||||
local source="$DAGGER_WORKSPACE"/.dagger/env/"$name"
|
local source="$DAGGER_PROJECT"/.dagger/env/"$name"
|
||||||
local target="$DAGGER_SANDBOX"/.dagger/env/"$name"
|
local target="$DAGGER_SANDBOX"/.dagger/env/"$name"
|
||||||
|
|
||||||
cp -a "$source" "$target"
|
cp -a "$source" "$target"
|
||||||
|
|
||||||
if [ -d "$2" ]; then
|
if [ -d "$2" ]; then
|
||||||
local package="$2"
|
local package="$2"
|
||||||
local source_package="$DAGGER_WORKSPACE"/"$package"
|
local source_package="$DAGGER_PROJECT"/"$package"
|
||||||
local target_package="$DAGGER_SANDBOX"/
|
local target_package="$DAGGER_SANDBOX"/
|
||||||
|
|
||||||
cp -a "$source_package" "$target_package"
|
cp -a "$source_package" "$target_package"
|
||||||
|
@ -132,12 +132,12 @@ setup() {
|
|||||||
copy_to_sandbox kubernetes-deployment kubernetes
|
copy_to_sandbox kubernetes-deployment kubernetes
|
||||||
|
|
||||||
# Set kubeconfig
|
# Set kubeconfig
|
||||||
dagger -w "$DAGGER_SANDBOX" -e kubernetes-deployment input text TestKubeconfig -f "$HOME"/.kube/config
|
dagger --project "$DAGGER_SANDBOX" -e kubernetes-deployment input text TestKubeconfig -f "$HOME"/.kube/config
|
||||||
|
|
||||||
dagger -w "$DAGGER_SANDBOX" -e kubernetes-deployment up
|
dagger --project "$DAGGER_SANDBOX" -e kubernetes-deployment up
|
||||||
|
|
||||||
# Unset kubeconfig
|
# Unset kubeconfig
|
||||||
dagger -w "$DAGGER_SANDBOX" -e kubernetes-deployment input unset TestKubeconfig
|
dagger --project "$DAGGER_SANDBOX" -e kubernetes-deployment input unset TestKubeconfig
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "kubernetes: kustomize" {
|
@test "kubernetes: kustomize" {
|
||||||
@ -151,12 +151,12 @@ setup() {
|
|||||||
copy_to_sandbox kubernetes-helm kubernetes
|
copy_to_sandbox kubernetes-helm kubernetes
|
||||||
|
|
||||||
# Set kubeconfig
|
# Set kubeconfig
|
||||||
dagger -w "$DAGGER_SANDBOX" -e kubernetes-helm input text TestKubeconfig -f "$HOME"/.kube/config
|
dagger --project "$DAGGER_SANDBOX" -e kubernetes-helm input text TestKubeconfig -f "$HOME"/.kube/config
|
||||||
|
|
||||||
dagger -w "$DAGGER_SANDBOX" -e kubernetes-helm up
|
dagger --project "$DAGGER_SANDBOX" -e kubernetes-helm up
|
||||||
|
|
||||||
# Unset kubeconfig
|
# Unset kubeconfig
|
||||||
dagger -w "$DAGGER_SANDBOX" -e kubernetes-helm input unset TestKubeconfig
|
dagger --project "$DAGGER_SANDBOX" -e kubernetes-helm input unset TestKubeconfig
|
||||||
}
|
}
|
||||||
|
|
||||||
@test "google cloud: gcr" {
|
@test "google cloud: gcr" {
|
||||||
@ -194,23 +194,23 @@ setup() {
|
|||||||
copy_to_sandbox terraform terraform
|
copy_to_sandbox terraform terraform
|
||||||
|
|
||||||
# Add the var and try again
|
# Add the var and try again
|
||||||
run dagger -w "$DAGGER_SANDBOX" -e terraform input text TestTerraform.apply.tfvars.input "42"
|
run dagger --project "$DAGGER_SANDBOX" -e terraform input text TestTerraform.apply.tfvars.input "42"
|
||||||
run dagger -w "$DAGGER_SANDBOX" -e terraform up
|
run dagger --project "$DAGGER_SANDBOX" -e terraform up
|
||||||
assert_success
|
assert_success
|
||||||
|
|
||||||
# ensure the tfvar was passed correctly
|
# ensure the tfvar was passed correctly
|
||||||
run dagger -w "$DAGGER_SANDBOX" query -e terraform TestTerraform.apply.output.input.value -f text
|
run dagger --project "$DAGGER_SANDBOX" query -e terraform TestTerraform.apply.output.input.value -f text
|
||||||
assert_success
|
assert_success
|
||||||
assert_output "42"
|
assert_output "42"
|
||||||
|
|
||||||
# ensure the random value is always the same
|
# ensure the random value is always the same
|
||||||
# this proves we're effectively using the s3 backend
|
# this proves we're effectively using the s3 backend
|
||||||
run dagger -w "$DAGGER_SANDBOX" query -e terraform TestTerraform.apply.output.random.value -f json
|
run dagger --project "$DAGGER_SANDBOX" query -e terraform TestTerraform.apply.output.random.value -f json
|
||||||
assert_success
|
assert_success
|
||||||
assert_output "36"
|
assert_output "36"
|
||||||
|
|
||||||
# Unset input
|
# Unset input
|
||||||
run dagger -w "$DAGGER_SANDBOX" -e terraform input unset TestTerraform.apply.tfvars.input
|
run dagger --project "$DAGGER_SANDBOX" -e terraform input unset TestTerraform.apply.tfvars.input
|
||||||
assert_success
|
assert_success
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ setup() {
|
|||||||
@test "dagger new: modules" {
|
@test "dagger new: modules" {
|
||||||
"$DAGGER" init
|
"$DAGGER" init
|
||||||
|
|
||||||
cp -a "$TESTDIR"/cli/input/simple/* "$DAGGER_WORKSPACE"
|
cp -a "$TESTDIR"/cli/input/simple/* "$DAGGER_PROJECT"
|
||||||
|
|
||||||
"$DAGGER" new "a"
|
"$DAGGER" new "a"
|
||||||
"$DAGGER" new "b"
|
"$DAGGER" new "b"
|
||||||
@ -61,7 +61,7 @@ setup() {
|
|||||||
assert_success
|
assert_success
|
||||||
assert_output "b"
|
assert_output "b"
|
||||||
|
|
||||||
# run ls -la "$DAGGER_WORKSPACE"
|
# run ls -la "$DAGGER_PROJECT"
|
||||||
# assert_failure
|
# assert_failure
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ setup() {
|
|||||||
@test "dagger new: packages" {
|
@test "dagger new: packages" {
|
||||||
"$DAGGER" init
|
"$DAGGER" init
|
||||||
|
|
||||||
cp -a "$TESTDIR"/cli/packages/* "$DAGGER_WORKSPACE"
|
cp -a "$TESTDIR"/cli/packages/* "$DAGGER_PROJECT"
|
||||||
|
|
||||||
"$DAGGER" new "a" --package alpha.dagger.io/test/a
|
"$DAGGER" new "a" --package alpha.dagger.io/test/a
|
||||||
"$DAGGER" new "b" --package alpha.dagger.io/test/b
|
"$DAGGER" new "b" --package alpha.dagger.io/test/b
|
||||||
@ -293,13 +293,13 @@ setup() {
|
|||||||
|
|
||||||
dagger_new_with_plan input "$TESTDIR"/cli/input/artifact
|
dagger_new_with_plan input "$TESTDIR"/cli/input/artifact
|
||||||
|
|
||||||
# input dir outside the workspace
|
# input dir outside the project
|
||||||
run "$DAGGER" input -e "input" dir "source" /tmp
|
run "$DAGGER" input -e "input" dir "source" /tmp
|
||||||
assert_failure
|
assert_failure
|
||||||
|
|
||||||
# input dir inside the workspace
|
# input dir inside the project
|
||||||
cp -R "$TESTDIR"/cli/input/artifact/testdata/ "$DAGGER_WORKSPACE"/testdata
|
cp -R "$TESTDIR"/cli/input/artifact/testdata/ "$DAGGER_PROJECT"/testdata
|
||||||
"$DAGGER" input -e "input" dir "source" "$DAGGER_WORKSPACE"/testdata
|
"$DAGGER" input -e "input" dir "source" "$DAGGER_PROJECT"/testdata
|
||||||
"$DAGGER" up -e "input"
|
"$DAGGER" up -e "input"
|
||||||
run "$DAGGER" -l error query -e "input"
|
run "$DAGGER" -l error query -e "input"
|
||||||
assert_success
|
assert_success
|
||||||
@ -331,8 +331,8 @@ setup() {
|
|||||||
run [ -d "$TESTDIR"/cli/input/ignore/testdata/.dagger ]
|
run [ -d "$TESTDIR"/cli/input/ignore/testdata/.dagger ]
|
||||||
assert_success
|
assert_success
|
||||||
|
|
||||||
cp -R "$TESTDIR"/cli/input/ignore/testdata/ "$DAGGER_WORKSPACE"/testdata
|
cp -R "$TESTDIR"/cli/input/ignore/testdata/ "$DAGGER_PROJECT"/testdata
|
||||||
"$DAGGER" input -e "input" dir "source" "$DAGGER_WORKSPACE"/testdata
|
"$DAGGER" input -e "input" dir "source" "$DAGGER_PROJECT"/testdata
|
||||||
"$DAGGER" up -e "input"
|
"$DAGGER" up -e "input"
|
||||||
assert_success
|
assert_success
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ setup() {
|
|||||||
# new-style tests: use 'dagger up'
|
# new-style tests: use 'dagger up'
|
||||||
#
|
#
|
||||||
# For new tests, please adopt new-style.
|
# For new tests, please adopt new-style.
|
||||||
# NOTE: you will need to 'unset DAGGER_WORKSPACE'
|
# NOTE: you will need to 'unset DAGGER_PROJECT'
|
||||||
# at the beginning of each new-style test.
|
# at the beginning of each new-style test.
|
||||||
|
|
||||||
@test "core: inputs & outputs" {
|
@test "core: inputs & outputs" {
|
||||||
@ -26,7 +26,7 @@ setup() {
|
|||||||
assert_output --partial 'dir'
|
assert_output --partial 'dir'
|
||||||
|
|
||||||
# Set dir input
|
# Set dir input
|
||||||
dagger -e test-core input dir dir "$DAGGER_WORKSPACE"
|
dagger -e test-core input dir dir "$DAGGER_PROJECT"
|
||||||
|
|
||||||
# Set text input
|
# Set text input
|
||||||
dagger -e test-core input text name Bob
|
dagger -e test-core input text name Bob
|
||||||
@ -160,5 +160,5 @@ setup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@test "compute: exclude" {
|
@test "compute: exclude" {
|
||||||
"$DAGGER" up -w "$TESTDIR"/compute/exclude
|
"$DAGGER" up --project "$TESTDIR"/compute/exclude
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,8 @@ common_setup() {
|
|||||||
DAGGER_LOG_FORMAT="pretty"
|
DAGGER_LOG_FORMAT="pretty"
|
||||||
export DAGGER_LOG_FORMAT
|
export DAGGER_LOG_FORMAT
|
||||||
|
|
||||||
DAGGER_WORKSPACE="$(mktemp -d -t dagger-workspace-XXXXXX)"
|
DAGGER_PROJECT="$(mktemp -d -t dagger-project-XXXXXX)"
|
||||||
export DAGGER_WORKSPACE
|
export DAGGER_PROJECT
|
||||||
|
|
||||||
SOPS_AGE_KEY_FILE=~/.config/dagger/keys.txt
|
SOPS_AGE_KEY_FILE=~/.config/dagger/keys.txt
|
||||||
export SOPS_AGE_KEY_FILE
|
export SOPS_AGE_KEY_FILE
|
||||||
@ -21,7 +21,7 @@ dagger_new_with_plan() {
|
|||||||
local name="$1"
|
local name="$1"
|
||||||
local sourcePlan="$2"
|
local sourcePlan="$2"
|
||||||
|
|
||||||
cp -a "$sourcePlan"/* "$DAGGER_WORKSPACE"
|
cp -a "$sourcePlan"/* "$DAGGER_PROJECT"
|
||||||
|
|
||||||
"$DAGGER" new "$name"
|
"$DAGGER" new "$name"
|
||||||
}
|
}
|
||||||
@ -29,8 +29,8 @@ dagger_new_with_plan() {
|
|||||||
dagger_new_with_env() {
|
dagger_new_with_env() {
|
||||||
local sourcePlan="$1"
|
local sourcePlan="$1"
|
||||||
|
|
||||||
"$DAGGER" init -w "$DAGGER_WORKSPACE"
|
"$DAGGER" init --project "$DAGGER_PROJECT"
|
||||||
rsync -av "$sourcePlan"/ "$DAGGER_WORKSPACE"
|
rsync -av "$sourcePlan"/ "$DAGGER_PROJECT"
|
||||||
}
|
}
|
||||||
|
|
||||||
# dagger helper to execute the right binary
|
# dagger helper to execute the right binary
|
||||||
|
Reference in New Issue
Block a user