Merge branch '18696-rnaseq-training' refs #18696
[arvados.git] / services / arv-git-httpd / main.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 package main
6
7 import (
8         "flag"
9         "fmt"
10         "os"
11
12         "git.arvados.org/arvados.git/lib/cmd"
13         "git.arvados.org/arvados.git/lib/config"
14         "github.com/coreos/go-systemd/daemon"
15         "github.com/ghodss/yaml"
16         log "github.com/sirupsen/logrus"
17 )
18
19 var version = "dev"
20
21 func main() {
22         logger := log.New()
23         log.SetFormatter(&log.JSONFormatter{
24                 TimestampFormat: "2006-01-02T15:04:05.000000000Z07:00",
25         })
26
27         flags := flag.NewFlagSet(os.Args[0], flag.ContinueOnError)
28         loader := config.NewLoader(os.Stdin, logger)
29         loader.SetupFlags(flags)
30
31         dumpConfig := flags.Bool("dump-config", false, "write current configuration to stdout and exit (useful for migrating from command line flags to config file)")
32         getVersion := flags.Bool("version", false, "print version information and exit.")
33
34         args := loader.MungeLegacyConfigArgs(logger, os.Args[1:], "-legacy-git-httpd-config")
35         if ok, code := cmd.ParseFlags(flags, os.Args[0], args, "", os.Stderr); !ok {
36                 os.Exit(code)
37         } else if *getVersion {
38                 fmt.Printf("arv-git-httpd %s\n", version)
39                 return
40         }
41
42         cfg, err := loader.Load()
43         if err != nil {
44                 log.Fatal(err)
45         }
46
47         cluster, err := cfg.GetCluster("")
48         if err != nil {
49                 log.Fatal(err)
50         }
51
52         if *dumpConfig {
53                 out, err := yaml.Marshal(cfg)
54                 if err != nil {
55                         log.Fatal(err)
56                 }
57                 _, err = os.Stdout.Write(out)
58                 if err != nil {
59                         log.Fatal(err)
60                 }
61                 return
62         }
63
64         srv := &server{cluster: cluster}
65         if err := srv.Start(); err != nil {
66                 log.Fatal(err)
67         }
68         if _, err := daemon.SdNotify(false, "READY=1"); err != nil {
69                 log.Printf("Error notifying init daemon: %v", err)
70         }
71         log.Printf("arv-git-httpd %s started", version)
72         log.Println("Listening at", srv.Addr)
73         log.Println("Repository root", cluster.Git.Repositories)
74         if err := srv.Wait(); err != nil {
75                 log.Fatal(err)
76         }
77 }