tarpoon/main.go
2016-11-02 15:36:10 -07:00

79 lines
1.7 KiB
Go

package main
import (
"fmt"
"os"
"github.com/spf13/cobra"
)
var rootCmd = &cobra.Command{
Use: "tarpoon",
Short: "Build Docker images",
Long: "`docker build && docker push` without the `docker`. Push a tarball to a registry for distribution",
Run: rootRun,
}
var (
baseImage string
workDir string
exec []string
)
func init() {
rootCmd.PersistentFlags().StringVarP(&baseImage, "base-image", "b", "scratch", "Base image to append the tar to")
rootCmd.PersistentFlags().StringVarP(&workDir, "workdir", "w", "/", "Working directory of the new container")
rootCmd.PersistentFlags().StringSliceVarP(&exec, "exec", "e", []string{"/bin/sh", "-c"}, "What to exec in the newly built container")
}
func main() {
if err := rootCmd.Execute(); err != nil {
fmt.Println(err)
os.Exit(-1)
}
}
func rootRun(cmd *cobra.Command, args []string) {
if len(args) < 2 {
fmt.Println("tarpoon TARFILE DOCKER_PATH")
os.Exit(1)
}
fmt.Printf("** Creating build dir\n")
dir, err := NewBuildDir()
defer dir.Close()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Printf("** Build dir is %s\n", dir.dir)
fmt.Printf("** Loading base image %s\n", baseImage)
err = dir.LoadBase(baseImage)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Printf("** Applying tarball %s\n", args[0])
err = dir.AddTarLayer(args[0])
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Printf("** Preparing image\n")
err = dir.DumpImageConfig()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
err = dir.WriteManifest()
if err != nil {
fmt.Println(err)
os.Exit(1)
}
fmt.Printf("** Pushing image\n")
err = dir.Push(args[1])
if err != nil {
fmt.Println(err)
os.Exit(1)
}
}