aboutsummaryrefslogtreecommitdiff
path: root/cmd/info.go
blob: 96079eaa2e5b460dfef6690771f9aab7924d8118 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
/*
 * info.go - Global information about the program.
 *
 * Copyright 2017 Google Inc.
 * Author: Joe Richey (joerichey@google.com)
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

package cmd

import (
	"time"

	"github.com/blang/semver"
	"github.com/pkg/errors"
)

var (
	// VersionTag (if set) will be displayed in both the short and long
	// version output and can be accessed though Context.Info.Version.
	// VersionTag must be formatted using Semver (http://semver.org/).
	//
	// Often set in Makefile with "-X cmd.VersionTag=$(VERSION)"
	VersionTag string
	// BuildTimeTag (if set) will be displayed in the long version
	// output and can be accessed thought Context.Info.BuildTime. This
	// string must be formatted as the output of UNIX `date`.
	//
	// Often set in Makefile with "-X cmd.BuildTimeTag=$(shell date)"
	BuildTimeTag string
	// Authors (if non-empty) are displayed in the long version output and
	// can be accessed though Context.Info.Authors.
	Authors []Author
	// Copyright (if set) is displayed in the long version output and can
	// be accessed through Context.Info.Copyright.
	Copyright string
)

// fscrypt specific initialization
func init() {
	Authors = []Author{{
		Name:  "Joe Richey",
		Email: "joerichey@google.com",
	}}
	Copyright = `Copyright 2017 Google, Inc.

	Licensed under the Apache License, Version 2.0 (the "License");
	you may not use this file except in compliance with the License.
	You may obtain a copy of the License at

		http://www.apache.org/licenses/LICENSE-2.0

	Unless required by applicable law or agreed to in writing, software
	distributed under the License is distributed on an "AS IS" BASIS,
	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
	See the License for the specific language governing permissions and
	limitations under the License.`
}

// Creates the Info structure by parsing the above global variables. Panics if
// the variables to parse are in the incorrect format.
func parseInfo() *Info {
	var err error

	var t time.Time
	if BuildTimeTag != "" {
		if t, err = time.Parse(time.UnixDate, BuildTimeTag); err != nil {
			panic(err)
		}
	}

	var v semver.Version
	if VersionTag != "" {
		if v, err = semver.ParseTolerant(VersionTag); err != nil {
			panic(errors.Wrapf(err, "semver: parsing %q", VersionTag))
		}
	}

	return &Info{
		Version:   v,
		BuildTime: t,
		Authors:   Authors,
		Copyright: Copyright,
	}
}