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 | |
| parent | acf7336eed51728d5061e3bc6cda92cf8eae5998 (diff) | |
| download | x-6f56286a19da821f8b5ebbe60086e935a171b7bb.tar.xz x-6f56286a19da821f8b5ebbe60086e935a171b7bb.zip | |
internal: create package yeet
| -rw-r--r-- | docker.go | 15 | ||||
| -rw-r--r-- | internal/internal.go | 40 | ||||
| -rw-r--r-- | internal/yeet/doc.go | 2 | ||||
| -rw-r--r-- | internal/yeet/yeet.go | 91 | ||||
| -rw-r--r-- | mastodon/sona-pi-toki-pona/build.go | 8 |
5 files changed, 107 insertions, 49 deletions
@@ -7,17 +7,22 @@ import ( "context" "log" - "github.com/Xe/x/internal" + "github.com/Xe/x/internal/yeet" ) func main() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - tag := "xena/xperimental:" + internal.DateTag + tag := "xena/xperimental" + yeet.ShouldWork(ctx, nil, yeet.WD, "docker", "build", "-t", tag, ".") - internal.ShouldWork(ctx, nil, internal.WD, "docker", "build", "-t", tag, ".") - internal.ShouldWork(ctx, nil, internal.WD, "docker", "push", tag) + resTag, err := yeet.DockerTag(ctx, "xena", "xperimental", tag) + if err != nil { + log.Fatal(err) + } - log.Printf("use %s", tag) + yeet.ShouldWork(ctx, nil, yeet.WD, "docker", "push", resTag) + + log.Printf("use %s", resTag) } diff --git a/internal/internal.go b/internal/internal.go index 9c36aa3..f21624e 100644 --- a/internal/internal.go +++ b/internal/internal.go @@ -1,36 +1,17 @@ package internal import ( - "context" "encoding/json" "flag" "fmt" "log" "net/http" "os" - "os/exec" - "time" "github.com/Xe/x/tools/license/licenses" "go4.org/legal" ) -// 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") -} - var ( licenseShow = flag.Bool("license", false, "show software license?") ) @@ -57,24 +38,3 @@ func HandleLicense() { os.Exit(0) } } - -// 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) - } -} 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 +} diff --git a/mastodon/sona-pi-toki-pona/build.go b/mastodon/sona-pi-toki-pona/build.go index ba408df..13ce656 100644 --- a/mastodon/sona-pi-toki-pona/build.go +++ b/mastodon/sona-pi-toki-pona/build.go @@ -8,9 +8,9 @@ import ( "log" "os" - "github.com/Xe/x/internal" "github.com/Xe/x/internal/greedo" "github.com/Xe/x/internal/minipaas" + "github.com/Xe/x/internal/yeet" ) func main() { @@ -18,15 +18,15 @@ func main() { defer cancel() env := append(os.Environ(), []string{"CGO_ENABLED=0", "GOOS=linux"}...) - internal.ShouldWork(ctx, env, internal.WD, "vgo", "build", "-o=sona-pi-toki-pona") - internal.ShouldWork(ctx, env, internal.WD, "appsluggr", "-worker=sona-pi-toki-pona") + yeet.ShouldWork(ctx, env, yeet.WD, "vgo", "build", "-o=worker") + yeet.ShouldWork(ctx, env, yeet.WD, "appsluggr", "-worker=worker") fin, err := os.Open("slug.tar.gz") if err != nil { log.Fatal(err) } defer fin.Close() - fname := "sona-pi-toki-pona-" + internal.DateTag + ".tar.gz" + fname := "sona-pi-toki-pona-" + yeet.DateTag + ".tar.gz" pubURL, err := greedo.CopyFile(fname, fin) if err != nil { log.Fatal(err) |
