Merge branch '18078-reacquire-fuse-lock' into main refs #18078
[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/config"
13         "github.com/coreos/go-systemd/daemon"
14         "github.com/ghodss/yaml"
15         log "github.com/sirupsen/logrus"
16 )
17
18 var version = "dev"
19
20 func main() {
21         logger := log.New()
22         log.SetFormatter(&log.JSONFormatter{
23                 TimestampFormat: "2006-01-02T15:04:05.000000000Z07:00",
24         })
25
26         flags := flag.NewFlagSet(os.Args[0], flag.ExitOnError)
27         loader := config.NewLoader(os.Stdin, logger)
28         loader.SetupFlags(flags)
29
30         dumpConfig := flags.Bool("dump-config", false, "write current configuration to stdout and exit (useful for migrating from command line flags to config file)")
31         getVersion := flags.Bool("version", false, "print version information and exit.")
32
33         args := loader.MungeLegacyConfigArgs(logger, os.Args[1:], "-legacy-git-httpd-config")
34         flags.Parse(args)
35
36         if *getVersion {
37                 fmt.Printf("arv-git-httpd %s\n", version)
38                 return
39         }
40
41         cfg, err := loader.Load()
42         if err != nil {
43                 log.Fatal(err)
44         }
45
46         cluster, err := cfg.GetCluster("")
47         if err != nil {
48                 log.Fatal(err)
49         }
50
51         if *dumpConfig {
52                 out, err := yaml.Marshal(cfg)
53                 if err != nil {
54                         log.Fatal(err)
55                 }
56                 _, err = os.Stdout.Write(out)
57                 if err != nil {
58                         log.Fatal(err)
59                 }
60                 return
61         }
62
63         srv := &server{cluster: cluster}
64         if err := srv.Start(); err != nil {
65                 log.Fatal(err)
66         }
67         if _, err := daemon.SdNotify(false, "READY=1"); err != nil {
68                 log.Printf("Error notifying init daemon: %v", err)
69         }
70         log.Printf("arv-git-httpd %s started", version)
71         log.Println("Listening at", srv.Addr)
72         log.Println("Repository root", cluster.Git.Repositories)
73         if err := srv.Wait(); err != nil {
74                 log.Fatal(err)
75         }
76 }