diff options
| author | Christine Dodrill <me@christine.website> | 2018-10-10 04:35:01 +0000 |
|---|---|---|
| committer | Christine Dodrill <me@christine.website> | 2018-10-10 04:35:01 +0000 |
| commit | 6f56286a19da821f8b5ebbe60086e935a171b7bb (patch) | |
| tree | c70fab96e3d3bb321bcb0aff0524b00c67246356 /internal/yeet | |
| parent | acf7336eed51728d5061e3bc6cda92cf8eae5998 (diff) | |
| download | x-6f56286a19da821f8b5ebbe60086e935a171b7bb.tar.xz x-6f56286a19da821f8b5ebbe60086e935a171b7bb.zip | |
internal: create package yeet
Diffstat (limited to 'internal/yeet')
| -rw-r--r-- | internal/yeet/doc.go | 2 | ||||
| -rw-r--r-- | internal/yeet/yeet.go | 91 |
2 files changed, 93 insertions, 0 deletions
diff --git a/internal/yeet/doc.go b/internal/yeet/doc.go new file mode 100644 index 0000000..04ceec6 --- /dev/null +++ b/internal/yeet/doc.go @@ -0,0 +1,2 @@ +// Package yeet is a set of small helper functions useful for yeeting out scripts. +package yeet diff --git a/internal/yeet/yeet.go b/internal/yeet/yeet.go new file mode 100644 index 0000000..9028aef --- /dev/null +++ b/internal/yeet/yeet.go @@ -0,0 +1,91 @@ +package yeet + +import ( + "context" + "fmt" + "log" + "os" + "os/exec" + "strings" + "time" + + "github.com/pkg/errors" +) + +// current working directory and date:time tag of app boot (useful for tagging slugs) +var ( + WD string + DateTag string +) + +func init() { + lwd, err := os.Getwd() + if err != nil { + log.Fatal(err) + } + + WD = lwd + DateTag = time.Now().Format("010220061504") +} + +// ShouldWork explodes if the given command with the given env, working dir and context fails. +func ShouldWork(ctx context.Context, env []string, dir string, cmdName string, args ...string) { + loc, err := exec.LookPath(cmdName) + if err != nil { + log.Fatal(err) + } + + cmd := exec.CommandContext(ctx, loc, args...) + cmd.Dir = dir + cmd.Env = env + + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + + log.Printf("starting process, env: %v, pwd: %s, cmd: %s, args: %v", env, dir, loc, args) + err = cmd.Run() + if err != nil { + log.Fatal(err) + } +} + +/// Output returns the output of a command or an error. +func output(ctx context.Context, cmd string, args ...string) (string, error) { + c := exec.CommandContext(ctx, cmd, args...) + c.Env = os.Environ() + c.Stderr = os.Stderr + b, err := c.Output() + if err != nil { + return "", errors.Wrapf(err, `failed to run %v %q`, cmd, args) + } + return string(b), nil +} + +// GitTag returns the curreng git tag. +func GitTag(ctx context.Context) (string, error) { + s, err := output(ctx, "git", "describe", "--tags") + if err != nil { + ee, ok := errors.Cause(err).(*exec.ExitError) + if ok && ee.Exited() { + // probably no git tag + return "dev", nil + } + return "", err + } + + return strings.TrimSuffix(s, "\n"), nil +} + +// DockerTag tags a docker image +func DockerTag(ctx context.Context, org, repo, image string) (string, error) { + tag, err := GitTag(ctx) + if err != nil { + return "", err + } + + repoTag := fmt.Sprintf("%s/%s:%s", org, repo, tag) + + ShouldWork(ctx, nil, WD, "docker", "tag", image, repoTag) + + return repoTag, nil +} |
