16427: Merge branch 'master'
[arvados.git] / lib / config / generate.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 // +build ignore
6
7 package main
8
9 import (
10         "bytes"
11         "fmt"
12         "io/ioutil"
13         "log"
14         "os"
15         "os/exec"
16 )
17
18 func main() {
19         err := generate()
20         if err != nil {
21                 log.Fatal(err)
22         }
23 }
24
25 func generate() error {
26         outfn := "generated_config.go"
27         tmpfile, err := ioutil.TempFile(".", "."+outfn+".")
28         if err != nil {
29                 return err
30         }
31         defer os.Remove(tmpfile.Name())
32
33         gofmt := exec.Command("gofmt", "-s")
34         gofmt.Stdout = tmpfile
35         gofmt.Stderr = os.Stderr
36         w, err := gofmt.StdinPipe()
37         if err != nil {
38                 return err
39         }
40         gofmt.Start()
41
42         // copyright header: same as this file
43         cmd := exec.Command("head", "-n", "4", "generate.go")
44         cmd.Stdout = w
45         cmd.Stderr = os.Stderr
46         err = cmd.Run()
47         if err != nil {
48                 return err
49         }
50
51         data, err := ioutil.ReadFile("config.default.yml")
52         if err != nil {
53                 return err
54         }
55         _, err = fmt.Fprintf(w, "package config\nvar DefaultYAML = []byte(`%s`)", bytes.Replace(data, []byte{'`'}, []byte("`+\"`\"+`"), -1))
56         if err != nil {
57                 return err
58         }
59         err = w.Close()
60         if err != nil {
61                 return err
62         }
63         err = gofmt.Wait()
64         if err != nil {
65                 return err
66         }
67         err = tmpfile.Close()
68         if err != nil {
69                 return err
70         }
71         return os.Rename(tmpfile.Name(), outfn)
72 }