dockerfiles/mage.go

110 lines
2.3 KiB
Go

// +build mage
// for use with https://github.com/magefile/mage
package main
import (
"context"
"log"
"os"
"os/exec"
"path/filepath"
"github.com/jtolds/qod"
"github.com/magefile/mage/mg"
)
var wd string
func init() {
lwd, err := os.Getwd()
qod.ANE(err)
wd = lwd
}
func shouldWork(ctx context.Context, dir string, cmdName string, args ...string) {
loc, err := exec.LookPath(cmdName)
qod.ANE(err)
cmd := exec.CommandContext(ctx, loc, args...)
cmd.Dir = dir
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
log.Printf("starting process, pwd: %s, cmd: %s, args: %v", dir, loc, args)
err = cmd.Run()
qod.ANE(err)
}
// All builds every image in order.
func All() {
// Base image
mg.Deps(Base)
// Programming language specific images
mg.Deps(Go, GoMini, Nim)
qod.Printlnf("all images built :)")
}
// Base builds the base image xena/alpine.
func Base() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
dir := filepath.Join(wd, "./base/alpine")
// pull base alpine edge image for rebuilds
shouldWork(ctx, dir, "docker", "pull", "alpine:edge")
// build and push
shouldWork(ctx, dir, "box", "box.rb")
shouldWork(ctx, dir, "docker", "push", "xena/alpine:latest")
}
// Go builds the 'thick' go image xena/go.
// https://golang.org
func Go() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
dir := filepath.Join(wd, "./lang/go")
// build and push
shouldWork(ctx, dir, "box", "box.rb")
shouldWork(ctx, dir, "docker", "push", "xena/go:1.9")
// XXX when go 1.9.1, etc comes out
//shouldWork(ctx, dir, "docker", "push", "xena/go:1.9.1")
}
// GoMini builds the 'mini' version of the compiler using golang.org/x/build/version.
// https://golang.org
func GoMini() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
dir := filepath.Join(wd, "./lang/go-mini")
// build and push
shouldWork(ctx, dir, "box", "box.rb")
shouldWork(ctx, dir, "docker", "push", "xena/go-mini:1.9")
// XXX when go 1.9.1, etc comes out
//shouldWork(ctx, dir, "docker", "push", "xena/go:1.9.1")
}
// Nim builds the image for xena/nim
// https://nim-lang.org
func Nim() {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
dir := filepath.Join(wd, "./lang/nim")
// build and push
shouldWork(ctx, dir, "box", "box.rb")
shouldWork(ctx, dir, "docker", "push", "xena/nim:0.17.2")
}