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  }