X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f4ca9ad94a6bb006d1f3c7ba207837f1736d1247..a4f57793d8757c451330e6d861eb3c5af2bff3b8:/services/arv-git-httpd/main.go diff --git a/services/arv-git-httpd/main.go b/services/arv-git-httpd/main.go index 98695c9a9d..4e55964619 100644 --- a/services/arv-git-httpd/main.go +++ b/services/arv-git-httpd/main.go @@ -1,49 +1,75 @@ +// 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/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", + }) -var theConfig *config + flags := flag.NewFlagSet(os.Args[0], flag.ExitOnError) + loader := config.NewLoader(os.Stdin, logger) + loader.SetupFlags(flags) -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 or gitolite-shell executable. Each authenticated request will execute this program with a single argument, \"http-backend\".") - cwd, err := os.Getwd() + 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") + flags.Parse(args) + + if *getVersion { + fmt.Printf("arv-git-httpd %s\n", version) + return + } + + cfg, err := loader.Load() 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{} + cluster, err := cfg.GetCluster("") + if err != nil { + log.Fatal(err) + } + + 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", theConfig.Root) + log.Println("Repository root", cluster.Git.Repositories) if err := srv.Wait(); err != nil { log.Fatal(err) }