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