package main import ( "context" "flag" "fmt" "os" "banger/internal/runtimebundle" ) func main() { if len(os.Args) < 2 { usage() os.Exit(2) } switch os.Args[1] { case "fetch": if err := fetch(os.Args[2:]); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } case "package": if err := pkg(os.Args[2:]); err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } default: usage() os.Exit(2) } } func fetch(args []string) error { fs := flag.NewFlagSet("fetch", flag.ContinueOnError) fs.SetOutput(os.Stderr) manifestPath := fs.String("manifest", "runtime-bundle.toml", "path to the runtime bundle manifest") outDir := fs.String("out", "runtime", "destination runtime directory") if err := fs.Parse(args); err != nil { return err } manifest, err := runtimebundle.LoadManifest(*manifestPath) if err != nil { return err } return runtimebundle.Bootstrap(context.Background(), manifest, *manifestPath, *outDir) } func pkg(args []string) error { fs := flag.NewFlagSet("package", flag.ContinueOnError) fs.SetOutput(os.Stderr) manifestPath := fs.String("manifest", "runtime-bundle.toml", "path to the runtime bundle manifest") runtimeDir := fs.String("runtime-dir", "runtime", "runtime directory to package") outArchive := fs.String("out", "dist/banger-runtime.tar.gz", "output archive path") if err := fs.Parse(args); err != nil { return err } manifest, err := runtimebundle.LoadManifest(*manifestPath) if err != nil { return err } sum, err := runtimebundle.Package(*runtimeDir, *outArchive, manifest) if err != nil { return err } fmt.Println(sum) return nil } func usage() { fmt.Fprintln(os.Stderr, "usage: runtimebundle [flags]") }