-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add --dry-run and --verbose flags #23
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -33,13 +33,17 @@ func New() *cobra.Command { | |
|
||
cmd.Flags().BoolVar(options.Remove, "rm", false, "remove container upon exit") | ||
cmd.Flags().BoolVar(&options.Reset, "reset", false, "remove previous container before starting a fresh one") | ||
cmd.Flags().BoolVarP(&options.Verbose, "verbose", "v", false, "output detailed execution information to stderr") | ||
cmd.Flags().BoolVar(&options.DryRun, "dry-run", false, "output docker command to stdout instead of executing it") | ||
|
||
return cmd | ||
} | ||
|
||
type Options struct { | ||
Remove *bool | ||
Reset bool | ||
Remove *bool | ||
Reset bool | ||
Verbose bool | ||
DryRun bool | ||
} | ||
|
||
func run(ctx context.Context, names []string, options Options) error { | ||
|
@@ -70,26 +74,53 @@ func run(ctx context.Context, names []string, options Options) error { | |
logging.Log("using image: %s", yeyContext.Image) | ||
} | ||
|
||
if options.Verbose { | ||
fmt.Fprintf(os.Stderr, "context:\n--\n%v--\n", yeyContext) | ||
} | ||
|
||
// Container name | ||
containerName := yey.ContainerName(contexts.Path, yeyContext) | ||
if options.Verbose { | ||
fmt.Fprintf(os.Stderr, "container: %s\n", containerName) | ||
} | ||
|
||
// Reset | ||
if options.Reset { | ||
if options.Verbose { | ||
fmt.Fprintf(os.Stderr, "removing container first") | ||
} | ||
if err := docker.Remove(ctx, containerName); err != nil { | ||
return fmt.Errorf("failed to remove container %q: %w", containerName, err) | ||
} | ||
} | ||
|
||
var runOptions []docker.RunOption | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. we can probably do away with creating an options slice since all options accept their values. we can pass the empty string to WithWorkDir because even if we dont't pass the option it probably initialises the backing option to empty string anyways. |
||
|
||
// Working directory | ||
workDir, err := getContainerWorkDir(yeyContext) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
var runOptions []docker.RunOption | ||
if workDir != "" { | ||
runOptions = append(runOptions, docker.WithWorkDir(workDir)) | ||
} | ||
if options.Verbose { | ||
fmt.Fprintf(os.Stderr, "working directory: %s", workDir) | ||
} | ||
|
||
if err := ShowBanner(yeyContext.Name); err != nil { | ||
return err | ||
// Dry-run/verbose | ||
runOptions = append(runOptions, | ||
docker.WithDryRun(options.DryRun), | ||
docker.WithVerbose(options.Verbose)) | ||
|
||
// Banner | ||
if options.Verbose { | ||
fmt.Fprintln(os.Stderr) | ||
} | ||
if !options.DryRun { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Dry-run does not print the banner but still starts the docker process? Wouldn't the flag be There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. nvm |
||
if err := ShowBanner(yeyContext.Name); err != nil { | ||
return err | ||
} | ||
} | ||
|
||
return docker.Start(ctx, yeyContext, containerName, runOptions...) | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i just realized there is a bug here. What if we run with reset but the container doesn't exist? We don't want to fail. Not to do with the PR but just thought I would flag it. I probably wrote the bug.