add build system for the images using mage
This commit is contained in:
parent
3b44569e2e
commit
65088f3c29
|
@ -0,0 +1 @@
|
|||
mage_output_file.go
|
|
@ -0,0 +1,109 @@
|
|||
// +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")
|
||||
}
|
Loading…
Reference in New Issue