github.com/konsorten/ktn-build-info@v1.0.11/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 "strings" 7 8 log "github.com/sirupsen/logrus" 9 "github.com/codegangsta/cli" 10 "github.com/konsorten/ktn-build-info/ver" 11 ) 12 13 func main() { 14 exit := func(err error) { 15 if err != nil { 16 log.Fatal(err) 17 } 18 } 19 20 app := cli.NewApp() 21 app.Author = "marvin + konsorten GmbH" 22 app.Version = versionString 23 app.HideHelp = true 24 app.Usage = fmt.Sprintf( 25 `Build Information Tool 26 27 This tool creates build version information files 28 based on the available information and writes 29 them to different file formats. 30 31 If available, it will read from existing files: 32 * %v 33 * %v (NPM) 34 35 It looks for the %v file in the specified 36 and parent directories.`, 37 ver.VersionInfoYamlFilename, 38 ver.PackageJsonFilename, 39 ver.VersionInfoYamlFilename, 40 ) 41 42 // generate app help templates 43 if true { 44 var b strings.Builder 45 46 b.WriteString(cli.AppHelpTemplate) 47 48 // add inputs 49 b.WriteString("\nINPUTS:\n") 50 51 for _, i := range ver.AllInputs { 52 b.WriteString(" ") 53 b.WriteString(i.Name) 54 b.WriteString("\t") 55 b.WriteString(i.Description) 56 b.WriteString("\n") 57 58 if i.Parameters != nil { 59 for _, p := range i.Parameters { 60 b.WriteString(" ") 61 b.WriteString(p) 62 b.WriteString("\n") 63 } 64 } 65 } 66 67 // add outputs 68 b.WriteString("\nOUTPUTS:\n") 69 70 for _, o := range ver.AllOutputs { 71 b.WriteString(" ") 72 b.WriteString(o.Name) 73 b.WriteString("\t") 74 b.WriteString(o.Description) 75 b.WriteString("\n") 76 77 if o.Parameters != nil { 78 for _, p := range o.Parameters { 79 b.WriteString(" ") 80 b.WriteString(p) 81 b.WriteString("\n") 82 } 83 } 84 } 85 86 // add template file fields 87 b.WriteString("\nTEMPLATE FILE FIELDS:\n") 88 89 for _, d := range ver.GetTemplateFileFields() { 90 b.WriteString(" {{\"") 91 b.WriteString(fmt.Sprintf("%v.%v%v", ver.TemplateFileFieldPrefix, d.Name, ver.TemplateFileFieldSuffix)) 92 b.WriteString("\"}}\t") 93 b.WriteString(d.Description) 94 b.WriteString("\n") 95 } 96 97 b.WriteString("\nTEMPLATE FUNCTIONS:\n") 98 99 for _, d := range ver.GetTemplateFileFunctions() { 100 b.WriteString(" ") 101 b.WriteString(d.Name) 102 b.WriteString("\t") 103 b.WriteString(d.Description) 104 b.WriteString("\n") 105 } 106 107 b.WriteString("\n See for more details: https://golang.org/pkg/text/template/\n\n") 108 109 cli.AppHelpTemplate = b.String() 110 } 111 112 app.Flags = []cli.Flag{ 113 cli.StringFlag{ 114 Name: "directory, C", 115 Value: ".", 116 Usage: "The directory in which to run. Using the current as default.", 117 }, 118 cli.BoolFlag{ 119 Name: "debug, d", 120 Usage: "Enable debug output.", 121 }, 122 } 123 124 app.Action = func(c *cli.Context) { 125 exit(run(c)) 126 } 127 128 exit(app.Run(os.Args)) 129 } 130 131 func run(c *cli.Context) error { 132 // enable debug output 133 if c.Bool("debug") { 134 log.SetLevel(log.DebugLevel) 135 } 136 137 // change working directory 138 dir := c.String("directory") 139 140 if err := os.Chdir(dir); err != nil { 141 return fmt.Errorf("Failed to change to directory %s: %v", dir, err) 142 } 143 144 log.Debugf("Working directory: %v", dir) 145 146 // start scanning for version information 147 return ver.RunCurrentDirectory() 148 }