dockerimg: use a default image from a public registry
If the LLM chooses our default alpine Go image, we save some
work by instead starting from a sketch docker image pushed
to ghcr.io.
diff --git a/dockerimg/pushdockerimg.go b/dockerimg/pushdockerimg.go
new file mode 100644
index 0000000..2647626
--- /dev/null
+++ b/dockerimg/pushdockerimg.go
@@ -0,0 +1,62 @@
+//go:build ignore
+// +build ignore
+
+package main
+
+import (
+ "fmt"
+ "os"
+ "os/exec"
+ "path/filepath"
+
+ "sketch.dev/dockerimg"
+)
+
+func main() {
+ dir, err := os.MkdirTemp("", "sketch-pushdockerimg-*")
+ if err != nil {
+ panic(err)
+ }
+ defer os.RemoveAll(dir)
+
+ name, dockerfile, hash := dockerimg.DefaultImage()
+ if err := os.WriteFile(filepath.Join(dir, "Dockerfile"), []byte(dockerfile), 0o666); err != nil {
+ panic(err)
+ }
+
+ fmt.Print(`NOTE: this requires:
+ brew install colima docker docker-buildx qemu
+ gh auth token | docker login ghcr.io -u $(gh api user --jq .login) --password-stdin
+`)
+
+ run := func(args ...string) {
+ cmd := exec.Command(args[0], args[1:]...)
+ cmd.Dir = dir
+ cmd.Stdout = os.Stdout
+ cmd.Stderr = os.Stderr
+ fmt.Printf("running %v\n", cmd.Args)
+ if err := cmd.Run(); err != nil {
+ panic(err)
+ }
+ }
+
+ run("colima", "start")
+ run("docker", "buildx", "create", "--name", "arm", "--use", "--driver", "docker-container", "--bootstrap")
+ run("docker", "buildx", "use", "arm")
+ run("docker", "buildx", "build", "--platform", "linux/arm64", "-t", name+"arm64", "--push", ".")
+ run("docker", "buildx", "rm", "arm")
+ run("colima", "start", "--profile=intel", "--arch=x86_64", "--vm-type=vz", "--vz-rosetta", "--memory=4", "--disk=15")
+ run("docker", "context", "use", "colima-intel")
+ run("docker", "buildx", "create", "--name", "intel", "--use", "--driver", "docker-container", "--bootstrap")
+ run("docker", "buildx", "use", "intel")
+ run("docker", "buildx", "build", "--platform", "linux/amd64", "-t", name+"amd64", "--push", ".")
+ run("docker", "buildx", "rm", "intel")
+ run("docker", "context", "use", "colima")
+ run("colima", "stop", "--profile=intel")
+ run(
+ "docker", "buildx", "imagetools", "create",
+ "--annotation", "index:org.opencontainers.image.revision="+hash,
+ "-t", name, name+"arm64", name+"amd64",
+ )
+ run("docker", "buildx", "imagetools", "inspect", name)
+}