110 lines
2.3 KiB
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")
|
||
|
}
|