Slice imported data by tag#.
[lightning.git] / cmd.go
1 // Copyright (C) The Lightning Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 package lightning
6
7 import (
8         "fmt"
9         "io"
10         "io/ioutil"
11         "os"
12         "os/exec"
13
14         "git.arvados.org/arvados.git/lib/cmd"
15         "github.com/mattn/go-isatty"
16         "github.com/sirupsen/logrus"
17 )
18
19 var (
20         handler = cmd.Multi(map[string]cmd.Handler{
21                 "version":   cmd.Version,
22                 "-version":  cmd.Version,
23                 "--version": cmd.Version,
24
25                 "ref2genome":         &ref2genome{},
26                 "vcf2fasta":          &vcf2fasta{},
27                 "import":             &importer{},
28                 "annotate":           &annotatecmd{},
29                 "export":             &exporter{},
30                 "export-numpy":       &exportNumpy{},
31                 "flake":              &flakecmd{},
32                 "slice":              &slicecmd{},
33                 "numpy-comvar":       &numpyComVar{},
34                 "filter":             &filtercmd{},
35                 "build-docker-image": &buildDockerImage{},
36                 "pca-go":             &goPCA{},
37                 "pca-py":             &pythonPCA{},
38                 "plot":               &pythonPlot{},
39                 "diff-fasta":         &diffFasta{},
40                 "stats":              &statscmd{},
41                 "merge":              &merger{},
42                 "dumpgob":            &dumpGob{},
43         })
44 )
45
46 func Main() {
47         if !isatty.IsTerminal(os.Stderr.Fd()) {
48                 logrus.StandardLogger().Formatter = &logrus.TextFormatter{DisableTimestamp: true}
49         }
50         os.Exit(handler.RunCommand(os.Args[0], os.Args[1:], os.Stdin, os.Stdout, os.Stderr))
51 }
52
53 type buildDockerImage struct{}
54
55 func (cmd *buildDockerImage) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
56         tmpdir, err := ioutil.TempDir("", "")
57         if err != nil {
58                 fmt.Fprint(stderr, err)
59                 return 1
60         }
61         defer os.RemoveAll(tmpdir)
62         err = ioutil.WriteFile(tmpdir+"/Dockerfile", []byte(`FROM debian:bullseye
63 RUN DEBIAN_FRONTEND=noninteractive \
64   apt-get update && \
65   apt-get dist-upgrade -y && \
66   apt-get install -y --no-install-recommends bcftools bedtools samtools python2 python3-sklearn python3-matplotlib ca-certificates && \
67   apt-get clean
68 `), 0644)
69         if err != nil {
70                 fmt.Fprint(stderr, err)
71                 return 1
72         }
73         docker := exec.Command("docker", "build", "--tag=lightning-runtime", tmpdir)
74         docker.Stdout = stdout
75         docker.Stderr = stderr
76         err = docker.Run()
77         if err != nil {
78                 return 1
79         }
80         fmt.Fprintf(stderr, "built and tagged new docker image, lightning-runtime\n")
81         return 0
82 }