X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/c106899198b67d1071ccf164ce743b651981f8cd..5239de634d8c3277024be6e1c1bf1dc049d2bdf0:/services/arv-git-httpd/main.go diff --git a/services/arv-git-httpd/main.go b/services/arv-git-httpd/main.go index 0e92393e29..b926ac2735 100644 --- a/services/arv-git-httpd/main.go +++ b/services/arv-git-httpd/main.go @@ -1,48 +1,76 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + package main import ( "flag" - "log" + "fmt" "os" + + "git.arvados.org/arvados.git/lib/cmd" + "git.arvados.org/arvados.git/lib/config" + "github.com/coreos/go-systemd/daemon" + "github.com/ghodss/yaml" + log "github.com/sirupsen/logrus" ) -type config struct { - Addr string - GitCommand string - Root string -} +var version = "dev" + +func main() { + logger := log.New() + log.SetFormatter(&log.JSONFormatter{ + TimestampFormat: "2006-01-02T15:04:05.000000000Z07:00", + }) + + flags := flag.NewFlagSet(os.Args[0], flag.ContinueOnError) + loader := config.NewLoader(os.Stdin, logger) + loader.SetupFlags(flags) + + dumpConfig := flags.Bool("dump-config", false, "write current configuration to stdout and exit (useful for migrating from command line flags to config file)") + getVersion := flags.Bool("version", false, "print version information and exit.") + + args := loader.MungeLegacyConfigArgs(logger, os.Args[1:], "-legacy-git-httpd-config") + if ok, code := cmd.ParseFlags(flags, os.Args[0], args, "", os.Stderr); !ok { + os.Exit(code) + } else if *getVersion { + fmt.Printf("arv-git-httpd %s\n", version) + return + } -var theConfig *config + cfg, err := loader.Load() + if err != nil { + log.Fatal(err) + } -func init() { - theConfig = &config{} - flag.StringVar(&theConfig.Addr, "address", "0.0.0.0:80", - "Address to listen on, \"host:port\".") - flag.StringVar(&theConfig.GitCommand, "git-command", "/usr/bin/git", - "Path to git executable. Each authenticated request will execute this program with a single argument, \"http-backend\".") - cwd, err := os.Getwd() + cluster, err := cfg.GetCluster("") if err != nil { - log.Fatalln("Getwd():", err) + log.Fatal(err) } - flag.StringVar(&theConfig.Root, "repo-root", cwd, - "Path to git repositories.") - - // MakeArvadosClient returns an error if token is unset (even - // though we don't need to do anything requiring - // authentication yet). We can't do this in newArvadosClient() - // just before calling MakeArvadosClient(), though, because - // that interferes with the env var needed by "run test - // servers". - os.Setenv("ARVADOS_API_TOKEN", "xxx") -} -func main() { - flag.Parse() - srv := &server{} + if *dumpConfig { + out, err := yaml.Marshal(cfg) + if err != nil { + log.Fatal(err) + } + _, err = os.Stdout.Write(out) + if err != nil { + log.Fatal(err) + } + return + } + + srv := &server{cluster: cluster} if err := srv.Start(); err != nil { log.Fatal(err) } + if _, err := daemon.SdNotify(false, "READY=1"); err != nil { + log.Printf("Error notifying init daemon: %v", err) + } + log.Printf("arv-git-httpd %s started", version) log.Println("Listening at", srv.Addr) + log.Println("Repository root", cluster.Git.Repositories) if err := srv.Wait(); err != nil { log.Fatal(err) }