84 lines
1.9 KiB
Go
84 lines
1.9 KiB
Go
package cliutil
|
|
|
|
import (
|
|
"crypto/sha256"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"runtime"
|
|
|
|
"github.com/rs/zerolog"
|
|
)
|
|
|
|
type BuildInfo struct {
|
|
GoOS string `json:"go_os"`
|
|
GoVersion string `json:"go_version"`
|
|
GoArch string `json:"go_arch"`
|
|
BuildType string `json:"build_type"`
|
|
CloudflaredVersion string `json:"cloudflared_version"`
|
|
Checksum string `json:"checksum"`
|
|
}
|
|
|
|
func GetBuildInfo(buildType, version string) *BuildInfo {
|
|
return &BuildInfo{
|
|
GoOS: runtime.GOOS,
|
|
GoVersion: runtime.Version(),
|
|
GoArch: runtime.GOARCH,
|
|
BuildType: buildType,
|
|
CloudflaredVersion: version,
|
|
Checksum: currentBinaryChecksum(),
|
|
}
|
|
}
|
|
|
|
func (bi *BuildInfo) Log(log *zerolog.Logger) {
|
|
log.Info().Msgf("Version %s (Checksum %s)", bi.CloudflaredVersion, bi.Checksum)
|
|
if bi.BuildType != "" {
|
|
log.Info().Msgf("Built%s", bi.GetBuildTypeMsg())
|
|
}
|
|
log.Info().Msgf("GOOS: %s, GOVersion: %s, GoArch: %s", bi.GoOS, bi.GoVersion, bi.GoArch)
|
|
}
|
|
|
|
func (bi *BuildInfo) OSArch() string {
|
|
return fmt.Sprintf("%s_%s", bi.GoOS, bi.GoArch)
|
|
}
|
|
|
|
func (bi *BuildInfo) Version() string {
|
|
return bi.CloudflaredVersion
|
|
}
|
|
|
|
func (bi *BuildInfo) GetBuildTypeMsg() string {
|
|
if bi.BuildType == "" {
|
|
return ""
|
|
}
|
|
return fmt.Sprintf(" with %s", bi.BuildType)
|
|
}
|
|
|
|
func (bi *BuildInfo) UserAgent() string {
|
|
return fmt.Sprintf("cloudflared/%s", bi.CloudflaredVersion)
|
|
}
|
|
|
|
// FileChecksum opens a file and returns the SHA256 checksum.
|
|
func FileChecksum(filePath string) (string, error) {
|
|
f, err := os.Open(filePath)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
defer f.Close()
|
|
|
|
h := sha256.New()
|
|
if _, err := io.Copy(h, f); err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return fmt.Sprintf("%x", h.Sum(nil)), nil
|
|
}
|
|
|
|
func currentBinaryChecksum() string {
|
|
currentPath, err := os.Executable()
|
|
if err != nil {
|
|
return ""
|
|
}
|
|
sum, _ := FileChecksum(currentPath)
|
|
return sum
|
|
}
|