8fc3636d6c577b68ab8d439179f327dee2726f5e
[lightning.git] / cmd.go
1 package main
2
3 import (
4         "fmt"
5         "io"
6         "io/ioutil"
7         "os"
8         "os/exec"
9
10         "git.arvados.org/arvados.git/lib/cmd"
11 )
12
13 var (
14         handler = cmd.Multi(map[string]cmd.Handler{
15                 "version":   cmd.Version,
16                 "-version":  cmd.Version,
17                 "--version": cmd.Version,
18
19                 "ref2genome":         &ref2genome{},
20                 "vcf2fasta":          &vcf2fasta{},
21                 "import":             &importer{},
22                 "export-numpy":       &exportNumpy{},
23                 "filter":             &filterer{},
24                 "build-docker-image": &buildDockerImage{},
25                 "pca-go":             &goPCA{},
26                 "pca-py":             &pythonPCA{},
27                 "plot":               &pythonPlot{},
28                 "diff-fasta":         &diffFasta{},
29                 "stats":              &stats{},
30         })
31 )
32
33 func main() {
34         os.Exit(handler.RunCommand(os.Args[0], os.Args[1:], os.Stdin, os.Stdout, os.Stderr))
35 }
36
37 type buildDockerImage struct{}
38
39 func (cmd *buildDockerImage) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
40         tmpdir, err := ioutil.TempDir("", "")
41         if err != nil {
42                 fmt.Fprint(stderr, err)
43                 return 1
44         }
45         defer os.RemoveAll(tmpdir)
46         err = ioutil.WriteFile(tmpdir+"/Dockerfile", []byte(`FROM debian:10
47 RUN DEBIAN_FRONTEND=noninteractive \
48   apt-get update && \
49   apt-get dist-upgrade -y && \
50   apt-get install -y --no-install-recommends bcftools bedtools samtools python2 python3-sklearn python3-matplotlib && \
51   apt-get clean
52 `), 0644)
53         if err != nil {
54                 fmt.Fprint(stderr, err)
55                 return 1
56         }
57         docker := exec.Command("docker", "build", "--tag=lightning-runtime", tmpdir)
58         docker.Stdout = stdout
59         docker.Stderr = stderr
60         err = docker.Run()
61         if err != nil {
62                 return 1
63         }
64         fmt.Fprintf(stderr, "built and tagged new docker image, lightning-runtime\n")
65         return 0
66 }