func Stamp(sous *core.Sous, args []string) { target := "app" if len(args) == 0 { cli.Fatalf("sous stamp requires at least one argument (a docker label)") } _, context := sous.AssembleTargetContext(target) if context.BuildNumber() == 0 { cli.Fatalf("no builds yet; sous stamp operates on your last successful build of the app target") } tag := context.DockerTag() run := docker.NewRun(tag) run.AddLabels(parseLabels(args)) run.StdoutFile = "/dev/null" run.StderrFile = "/dev/null" container, err := run.Background().Start() if err != nil { cli.Fatalf("Failed to start container for labeling: %s", err) } if err := container.KillIfRunning(); err != nil { cli.Fatalf("Failed to kill labelling container %s: %s", container, err) } cid := container.CID() if err := docker.Commit(cid, tag); err != nil { cli.Fatalf("Failed to commit labelled container %s: %s", container, err) } cli.Successf("Successfully added labels to %s; remember to push.", tag) }
func Build(sous *core.Sous, args []string) { targetName := "app" if len(args) != 0 { targetName = args[0] } core.RequireGit() core.RequireDocker() if err := git.AssertCleanWorkingTree(); err != nil { cli.Warn("Dirty working tree: %s", err) } target, context := sous.AssembleTargetContext(targetName) built, _ := sous.RunTarget(target, context) if !built { cli.Successf("Already built: %s", context.DockerTag()) } name := context.CanonicalPackageName() cli.Successf("Successfully built %s v%s as %s", name, context.BuildVersion, context.DockerTag()) }
func Push(sous *core.Sous, args []string) { target := "app" if len(args) != 0 { target = args[0] } core.RequireGit() core.RequireDocker() if err := git.AssertCleanWorkingTree(); err != nil { cli.Warn("Dirty working tree: %s", err) } _, context := sous.AssembleTargetContext(target) tag := context.DockerTag() if !docker.ImageExists(tag) { cli.Fatalf("No built image available; try building first") } docker.Push(tag) name := context.CanonicalPackageName() cli.Successf("Successfully pushed %s v%s as %s", name, context.BuildVersion, context.DockerTag()) }