Add support for setting a custom docker config directory and some other README.md updates. Fixes #87
--- a/ChangeLog Wed Jul 05 22:27:13 2017 -0500
+++ b/ChangeLog Wed Jul 05 22:48:26 2017 -0500
@@ -2,6 +2,7 @@
* Allow labels for the Docker run and build tasks to use environment
* Use a custom network for each plan invocation. (fixed #113)
+ * Add support for using custom docker config directories. (fixed #87) * Added support for passing arguments to the Docker build task (--build-arg).
--- a/README.md Wed Jul 05 22:27:13 2017 -0500
+++ b/README.md Wed Jul 05 22:48:26 2017 -0500
@@ -35,14 +35,18 @@
-l, --config-loader=convey Select the configuration loader
-f, --config=CONFIG The config file name to use
-c, --cpu-shares=CPU-SHARES The amount of cpu shares to give to a run task
+ --docker-config=DOCKER-CONFIG + Location of docker client config files -e, --env=ENV ... Set environment variables
-S, --force-sequential Don't run anything concurrently
-g, --graphviz Output a graphviz diagram of the config file
- -P, --list-plans List the plans that are available
+ -L, --list-tasks List the supported tasks -M, --list-meta-plans List the meta plans that are available
- -L, --list-tasks List the supported tasks
+ -P, --list-plans List the plans that are available -m, --memory=MEMORY The ammount of memor to give the run task
--ssh-agent Enabled ssh-agent support for tasks
+ --ssh-identity=SSH-IDENTITY ... + Enable ssh-agent for the given identities --timeout=15m The maximum amount of time a task can run in seconds. 0 to disable
-v, --verbose Be more verbose
--- a/docker/build.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/build.go Wed Jul 05 22:48:26 2017 -0500
@@ -25,7 +25,6 @@
"github.com/aphistic/gomol"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/environment"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
@@ -39,7 +38,7 @@
Arguments []string `yaml:"arguments"`
-const buildTemplate = `docker build
+const buildTemplate = `build {{if .tag}} -t {{.tag}}{{end}}
{{range .Labels}} --label '{{.}}'{{end}}
@@ -64,7 +63,7 @@
src, dest := tasks.ParseFilePath(base, environment.Mapper(src, fullEnv))
cleanDest := filepath.Clean(filepath.Join(tmpDir, dest))
- if err = exportFile(name, st.Workspace.Name, src, cleanDest, st.TaskTimeout); err != nil {
+ if err = exportFile(name, st.Workspace.Name, src, cleanDest, st); err != nil { @@ -76,7 +75,7 @@
"workspace": st.Workspace.Name,
- err = command.Run(name, exportTemplate, params, st.TaskTimeout)
+ err = Docker(name, exportTemplate, params, st) @@ -90,7 +89,7 @@
"Arguments": b.Arguments,
- return command.Run(name, buildTemplate, params, st.TaskTimeout)
+ return Docker(name, buildTemplate, params, st) func (b *Build) New() tasks.Task {
--- a/docker/docker.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/docker.go Wed Jul 05 22:48:26 2017 -0500
@@ -18,6 +18,8 @@
+ "bitbucket.org/rw_grim/convey/command" + "bitbucket.org/rw_grim/convey/state" "bitbucket.org/rw_grim/convey/tasks"
@@ -34,4 +36,20 @@
+ dockerTemplate = `docker {{if .DockerConfig}}--config {{.DockerConfig}} {{end}}` +func Docker(name, template string, params map[string]interface{}, st *state.State) error { + fullTemplate := dockerTemplate + template + params["DockerConfig"] = st.DockerConfig + return command.Run(name, fullTemplate, params, st.TaskTimeout) +func DockerOutput(name, template string, params map[string]interface{}, st *state.State) (string, string, error) { + fullTemplate := dockerTemplate + template + params["DockerConfig"] = st.DockerConfig + return command.RunOutput(name, fullTemplate, params, st.TaskTimeout) --- a/docker/export.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/export.go Wed Jul 05 22:48:26 2017 -0500
@@ -21,13 +21,11 @@
"github.com/aphistic/gomol"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/environment"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
@@ -37,8 +35,8 @@
Files []string `yaml:"files"`
-const exportTemplate = `docker cp {{.workspace}}:/workspace/{{.source}} {{.destination}}`
-const zglobTemplate = `docker run --rm -v {{.workspace}}:/workspace convey/workspace-tools:latest zglob {{.file}}`
+const exportTemplate = `cp {{.workspace}}:/workspace/{{.source}} {{.destination}}` +const zglobTemplate = `run --rm -v {{.workspace}}:/workspace convey/workspace-tools:latest zglob {{.file}}` func checkFilePattern(file string) error {
if strings.ContainsRune(file, '*') && strings.ContainsRune(file, ':') {
@@ -48,7 +46,7 @@
-func exportFile(name, workSpace, src, dest string, timeout time.Duration) error {
+func exportFile(name, workSpace, src, dest string, st *state.State) error { params := map[string]interface{}{
@@ -60,16 +58,16 @@
- return command.Run(name, exportTemplate, params, timeout)
+ return Docker(name, exportTemplate, params, st) -func exportGlob(name, workSpace, mountPoint, pattern string, timeout time.Duration) error {
+func exportGlob(name, workSpace, mountPoint, pattern string, st *state.State) error { params := map[string]interface{}{
- out, _, err := command.RunOutput(fmt.Sprintf("%s-zglob", name), zglobTemplate, params, timeout)
+ out, _, err := DockerOutput(fmt.Sprintf("%s-zglob", name), zglobTemplate, params, st) @@ -79,7 +77,7 @@
- exportFile(name, workSpace, match, tasks.DestFromSrc(match), timeout)
+ exportFile(name, workSpace, match, tasks.DestFromSrc(match), st) @@ -98,13 +96,13 @@
if strings.ContainsRune(file, '*') {
mountPoint := environment.Mapper(st.Workspace.MountPoint, fullEnv)
- if err := exportGlob(name, st.Workspace.Name, mountPoint, file, st.TaskTimeout); err != nil {
+ if err := exportGlob(name, st.Workspace.Name, mountPoint, file, st); err != nil { src, dest := tasks.ParseFilePath("", file)
- if err := exportFile(name, st.Workspace.Name, src, dest, st.TaskTimeout); err != nil {
+ if err := exportFile(name, st.Workspace.Name, src, dest, st); err != nil { --- a/docker/import.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/import.go Wed Jul 05 22:48:26 2017 -0500
@@ -22,7 +22,6 @@
"github.com/aphistic/gomol"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/environment"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
@@ -32,7 +31,7 @@
Files []string `yaml:"files"`
-const importTemplate = `docker cp {{.source}} {{.workspaceID}}:/workspace/{{.destination}}`
+const importTemplate = `cp {{.source}} {{.workspaceID}}:/workspace/{{.destination}}` func (i *Import) Execute(name string, logger *gomol.LogAdapter, env []string, st *state.State) error {
fullEnv := environment.Merge(env, st.Environment)
@@ -46,7 +45,7 @@
"workspaceID": st.Workspace.Name,
- err := command.Run(name, importTemplate, params, st.TaskTimeout)
+ err := Docker(name, importTemplate, params, st) --- a/docker/login.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/login.go Wed Jul 05 22:48:26 2017 -0500
@@ -22,7 +22,6 @@
"github.com/aphistic/gomol"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
@@ -33,7 +32,7 @@
Server string `yaml:"server"`
-const loginTemplate = `docker login -u {{.username}} -p {{.password}}{{if .server}} {{.server}}{{end}}`
+const loginTemplate = `login -u {{.username}} -p {{.password}}{{if .server}} {{.server}}{{end}}` func (l *Login) Execute(name string, logger *gomol.LogAdapter, env []string, st *state.State) error {
params := map[string]interface{}{
@@ -42,7 +41,7 @@
- return command.Run(name, loginTemplate, params, st.TaskTimeout)
+ return Docker(name, loginTemplate, params, st) func (l *Login) New() tasks.Task {
--- a/docker/logout.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/logout.go Wed Jul 05 22:48:26 2017 -0500
@@ -22,7 +22,6 @@
"github.com/aphistic/gomol"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
@@ -31,14 +30,14 @@
Server string `yaml:"server"`
-const logoutTemplate = `docker logout{{if .server}} {{.server}}{{end}}`
+const logoutTemplate = `logout{{if .server}} {{.server}}{{end}}` func (l *Logout) Execute(name string, logger *gomol.LogAdapter, env []string, st *state.State) error {
params := map[string]interface{}{
- return command.Run(name, logoutTemplate, params, st.TaskTimeout)
+ return Docker(name, logoutTemplate, params, st) func (l *Logout) New() tasks.Task {
--- a/docker/pull.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/pull.go Wed Jul 05 22:48:26 2017 -0500
@@ -22,7 +22,6 @@
"github.com/aphistic/gomol"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/environment"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
@@ -33,7 +32,7 @@
Images []string `yaml:"images"`
-const pullTemplate = `docker pull {{.image}}`
+const pullTemplate = `pull {{.image}}` func (p *Pull) Execute(name string, logger *gomol.LogAdapter, env []string, st *state.State) error {
fullEnv := environment.Merge(env, st.Environment)
@@ -43,7 +42,7 @@
"image": environment.Mapper(image, fullEnv),
- if err := command.Run(name, pullTemplate, params, st.TaskTimeout); err != nil {
+ if err := Docker(name, pullTemplate, params, st); err != nil { --- a/docker/push.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/push.go Wed Jul 05 22:48:26 2017 -0500
@@ -22,7 +22,6 @@
"github.com/aphistic/gomol"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/environment"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
@@ -33,7 +32,7 @@
Images []string `yaml:"images"`
-const pushTemplate = `docker push {{.image}}`
+const pushTemplate = `push {{.image}}` func (p *Push) Execute(name string, logger *gomol.LogAdapter, env []string, st *state.State) error {
fullEnv := environment.Merge(env, st.Environment)
@@ -43,7 +42,7 @@
"image": environment.Mapper(image, fullEnv),
- if err := command.Run(name, pushTemplate, params, st.TaskTimeout); err != nil {
+ if err := Docker(name, pushTemplate, params, st); err != nil { --- a/docker/remove.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/remove.go Wed Jul 05 22:48:26 2017 -0500
@@ -22,7 +22,6 @@
"github.com/aphistic/gomol"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/environment"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
@@ -33,7 +32,7 @@
Images []string `yaml:"images"`
-const removeTemplate = `docker rmi {{.image}}`
+const removeTemplate = `rmi {{.image}}` func (r *Remove) Execute(name string, logger *gomol.LogAdapter, env []string, st *state.State) error {
fullEnv := environment.Merge(env, st.Environment)
@@ -43,7 +42,7 @@
"image": environment.Mapper(image, fullEnv),
- if err := command.Run(name, removeTemplate, params, st.TaskTimeout); err != nil {
+ if err := Docker(name, removeTemplate, params, st); err != nil { --- a/docker/run.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/run.go Wed Jul 05 22:48:26 2017 -0500
@@ -27,7 +27,6 @@
"github.com/aphistic/gomol"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/environment"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
@@ -58,7 +57,7 @@
-const runTemplate = `docker run --rm
+const runTemplate = `run --rm {{if .UID}} -e UID={{.UID}}{{end}}
{{if .GID}} -e GID={{.GID}}{{end}}
-v {{.WorkspacePath}}:{{.WorkspaceMount}}
@@ -168,7 +167,7 @@
- return command.Run(name, runTemplate, params, st.TaskTimeout)
+ return Docker(name, runTemplate, params, st) func (r *Run) New() tasks.Task {
--- a/docker/tag.go Wed Jul 05 22:27:13 2017 -0500
+++ b/docker/tag.go Wed Jul 05 22:48:26 2017 -0500
@@ -22,7 +22,6 @@
"github.com/aphistic/gomol"
- "bitbucket.org/rw_grim/convey/command"
"bitbucket.org/rw_grim/convey/environment"
"bitbucket.org/rw_grim/convey/state"
"bitbucket.org/rw_grim/convey/tasks"
@@ -34,7 +33,7 @@
Destinations []string `yaml:"destinations"`
-const tagTemplate = `docker tag {{.source}} {{.destination}}`
+const tagTemplate = `tag {{.source}} {{.destination}}` func (t *Tag) Execute(name string, logger *gomol.LogAdapter, env []string, st *state.State) error {
fullEnv := environment.Merge(env, st.Environment)
@@ -45,7 +44,7 @@
"destination": environment.Mapper(destination, fullEnv),
- if err := command.Run(name, tagTemplate, params, st.TaskTimeout); err != nil {
+ if err := Docker(name, tagTemplate, params, st); err != nil { --- a/main.go Wed Jul 05 22:27:13 2017 -0500
+++ b/main.go Wed Jul 05 22:48:26 2017 -0500
@@ -45,6 +45,7 @@
configLoader = app.Flag("config-loader", "Select the configuration loader").Short('l').Default("convey").Enum("convey", "bitbucket")
configFile = app.Flag("config", "The config file name to use").Short('f').String()
cpuShares = app.Flag("cpu-shares", "The amount of cpu shares to give to a run task").Short('c').String()
+ dockerConfig = app.Flag("docker-config", "Location of docker client config files").String() env = app.Flag("env", "Set environment variables").Short('e').Strings()
forceSequential = app.Flag("force-sequential", "Don't run anything concurrently").Short('S').Default("False").Bool()
graphviz = app.Flag("graphviz", "Output a graphviz diagram of the config file").Short('g').Default("False").Bool()
@@ -136,8 +137,9 @@
TaskTimeout: *taskTimeout,
Environment: environment.Merge(defEnv, *env),
+ DockerConfig: *dockerConfig, if err := st.Valid(); err != nil {
--- a/state/state.go Wed Jul 05 22:27:13 2017 -0500
+++ b/state/state.go Wed Jul 05 22:48:26 2017 -0500
@@ -36,8 +36,9 @@
TaskTimeout time.Duration
func (st *State) Valid() error {