aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristine Dodrill <me@christine.website>2018-10-10 04:35:01 +0000
committerChristine Dodrill <me@christine.website>2018-10-10 04:35:01 +0000
commit6f56286a19da821f8b5ebbe60086e935a171b7bb (patch)
treec70fab96e3d3bb321bcb0aff0524b00c67246356
parentacf7336eed51728d5061e3bc6cda92cf8eae5998 (diff)
downloadx-6f56286a19da821f8b5ebbe60086e935a171b7bb.tar.xz
x-6f56286a19da821f8b5ebbe60086e935a171b7bb.zip
internal: create package yeet
-rw-r--r--docker.go15
-rw-r--r--internal/internal.go40
-rw-r--r--internal/yeet/doc.go2
-rw-r--r--internal/yeet/yeet.go91
-rw-r--r--mastodon/sona-pi-toki-pona/build.go8
5 files changed, 107 insertions, 49 deletions
diff --git a/docker.go b/docker.go
index 420177a..472a401 100644
--- a/docker.go
+++ b/docker.go
@@ -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)