Skip to content

Commit

Permalink
Make Go generation optional, add Go Report Card
Browse files Browse the repository at this point in the history
  • Loading branch information
josephspurrier committed Jul 3, 2020
1 parent 2277116 commit 0f6aa24
Show file tree
Hide file tree
Showing 12 changed files with 130 additions and 43 deletions.
7 changes: 5 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
GoVersionInfo
==========
[![Build Status](https://travis-ci.org/josephspurrier/goversioninfo.svg)](https://travis-ci.org/josephspurrier/goversioninfo) [![Coverage Status](https://coveralls.io/repos/josephspurrier/goversioninfo/badge.svg)](https://coveralls.io/r/josephspurrier/goversioninfo) [![GoDoc](https://godoc.org/github.com/josephspurrier/goversioninfo?status.svg)](https://godoc.org/github.com/josephspurrier/goversioninfo)

[![Go Report Card](https://goreportcard.com/badge/github.com/josephspurrier/goversioninfo)](https://goreportcard.com/report/github.com/josephspurrier/goversioninfo) [![Build Status](https://travis-ci.org/josephspurrier/goversioninfo.svg)](https://travis-ci.org/josephspurrier/goversioninfo) [![Coverage Status](https://coveralls.io/repos/josephspurrier/goversioninfo/badge.svg)](https://coveralls.io/r/josephspurrier/goversioninfo) [![GoDoc](https://godoc.org/github.com/josephspurrier/goversioninfo?status.svg)](https://godoc.org/github.com/josephspurrier/goversioninfo)

Microsoft Windows File Properties/Version Info and Icon Resource Generator for the Go Language

Expand Down Expand Up @@ -40,12 +41,14 @@ Complete list of the flags for goversioninfo:
-company="": StringFileInfo.CompanyName
-copyright="": StringFileInfo.LegalCopyright
-description="": StringFileInfo.FileDescription
-example=false: just dump out an example versioninfo.json to stdout
-example=false: dump out an example versioninfo.json to stdout
-file-version="": StringFileInfo.FileVersion
-icon="": icon file name
-internal-name="": StringFileInfo.InternalName
-manifest="": manifest file name
-o="resource.syso": output file name
-gofile="": Go output file name (optional) - generates a Go file to access version information internally
-gofilepackage="main": Go output package name (optional, requires parameter: 'gofile')
-platform-specific=false: output i386 and amd64 named resource.syso, ignores -o
-original-name="": StringFileInfo.OriginalFilename
-private-build="": StringFileInfo.PrivateBuild
Expand Down
7 changes: 4 additions & 3 deletions cmd/goversioninfo/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ import (
)

func main() {
flagExample := flag.Bool("example", false, "just dump out an example versioninfo.json to stdout")
flagExample := flag.Bool("example", false, "dump out an example versioninfo.json to stdout")
flagOut := flag.String("o", "resource.syso", "output file name")
flagGo := flag.String("go", "versioninfo.go", "go output file name")
flagPackage := flag.String("package", "main", "go output package")
flagGo := flag.String("gofile", "", "Go output file name (optional)")
flagPackage := flag.String("gofilepackage", "main", "Go output package name (optional, requires parameter: 'gofile')")
flagPlatformSpecific := flag.Bool("platform-specific", false, "output i386 and amd64 named resource.syso, ignores -o")
flagIcon := flag.String("icon", "", "icon file name")
flagManifest := flag.String("manifest", "", "manifest file name")
Expand Down Expand Up @@ -175,6 +175,7 @@ func main() {
// Write the data to a buffer.
vi.Walk()

// If the flag is set, then generate the optional Go file.
if *flagGo != "" {
vi.WriteGo(*flagGo, *flagPackage)
}
Expand Down
35 changes: 20 additions & 15 deletions goversioninfo.go
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ func (t Translation) getTranslation() string {
// IO Methods
// *****************************************************************************

// Walk writes the data buffer with hexidecimal data from the structs
// Walk writes the data buffer with hexadecimal data from the structs
func (vi *VersionInfo) Walk() {
// Create a buffer
var b bytes.Buffer
Expand Down Expand Up @@ -193,7 +193,7 @@ func (vi *VersionInfo) WriteSyso(filename string, arch string) error {
// Create a new RSRC section
rsrc := coff.NewRSRC()

// Set the architechture
// Set the architecture
err := rsrc.Arch(arch)
if err != nil {
return err
Expand Down Expand Up @@ -233,6 +233,8 @@ func (vi *VersionInfo) WriteHex(filename string) error {
return ioutil.WriteFile(filename, vi.Buffer.Bytes(), 0655)
}

// WriteGo creates a Go file that contains the version info so you can access
// it in the application
func (vi *VersionInfo) WriteGo(filename, packageName string) error {
if len(packageName) == 0 {
packageName = "main"
Expand All @@ -243,38 +245,41 @@ func (vi *VersionInfo) WriteGo(filename, packageName string) error {
return err
}

ffib, err2 := json.MarshalIndent(vi.FixedFileInfo, "\t", "\t")
if err2 != nil {
return err2
ffib, err := json.MarshalIndent(vi.FixedFileInfo, "\t", "\t")
if err != nil {
return err
}

sfib, err3 := json.MarshalIndent(vi.StringFileInfo, "\t", "\t")
if err3 != nil {
return err3
sfib, err := json.MarshalIndent(vi.StringFileInfo, "\t", "\t")
if err != nil {
return err
}

vfib, err4 := json.MarshalIndent(vi.VarFileInfo, "\t", "\t")
if err4 != nil {
return err4
vfib, err := json.MarshalIndent(vi.VarFileInfo, "\t", "\t")
if err != nil {
return err
}

replace := "`\" + \"`\" + \"`"
str := "`{\n\t"
str += `"FixedFileInfo":`
str += strings.Replace(string(ffib), "`", replace, -1)
str += ",\n\t"
str += `"StringFileInfo":`
str += `"StringFileInfo":`
str += strings.Replace(string(sfib), "`", replace, -1)
str += ",\n\t"
str += `"VarFileInfo":`
str += strings.Replace(string(vfib), "`", replace, -1)
str += "\n"
str += "}`"
fmt.Fprintf(out, `//auto-generated file. Do not edit.
fmt.Fprintf(out, `// Auto-generated file by goversioninfo. Do not edit.
package %v
import "encoding/json"
import "github.com/josephspurrier/goversioninfo"
import (
"encoding/json"
"github.com/josephspurrier/goversioninfo"
)
func unmarshalGoVersionInfo(b []byte) goversioninfo.VersionInfo {
vi := goversioninfo.VersionInfo{}
Expand Down
23 changes: 14 additions & 9 deletions goversioninfo_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,22 +59,27 @@ func testFile(t *testing.T, filename string) {
t.Error("Data does not match " + filename + ".hex")
}

// Test the Go file generation.
tmpdir, err := ioutil.TempDir("", "generate_go")
if err != nil {
t.Error("Could not create temp dir", err)
}
defer os.RemoveAll(tmpdir)
path4 := filepath.Join(tmpdir, filename + ".go")
vi.WriteGo(path4, "")
gen, err4 := ioutil.ReadFile(path4)
if err4 != nil {
t.Error("Could not load " + path4, err4)
path4 := filepath.Join(tmpdir, filename+".go")
err = vi.WriteGo(path4, "")
if err != nil {
t.Error("Could not write "+path4, err)
}

path5, _ := filepath.Abs("./testdata/go/" + filename + ".go")
expected5, err5 := ioutil.ReadFile(path5)
if err5 != nil {
t.Error("Could not load " + path5, err5)
gen, err := ioutil.ReadFile(path4)
if err != nil {
t.Error("Could not load "+path4, err)
}

path5, _ := filepath.Abs("./testdata/gofile/" + filename + ".go")
expected5, err := ioutil.ReadFile(path5)
if err != nil {
t.Error("Could not load "+path5, err)
}

if !bytes.Equal(gen, expected5) {
Expand Down
9 changes: 9 additions & 0 deletions testdata/bash/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,13 @@ GOOS=windows GOARCH=amd64 go generate
GOOS=windows GOARCH=amd64 go build
rm example64.exe
rm resource.syso
cd ../../

# Test Windows 64 with Go output file.
cd testdata/example64-gofile
GOOS=windows GOARCH=amd64 go generate
GOOS=windows GOARCH=amd64 go build
rm example64-gofile.exe
rm resource.syso
rm versioninfo.go
cd ../../
9 changes: 9 additions & 0 deletions testdata/example64-gofile/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
//go:generate goversioninfo -icon=../resource/icon.ico -manifest=../resource/goversioninfo.exe.manifest -gofile=versioninfo.go

package main

import "fmt"

func main() {
fmt.Printf("Hello world %v %v %v\n%v", versionInfo.StringFileInfo.ProductName, versionInfo.StringFileInfo.ProductVersion, versionInfo.FixedFileInfo.FileVersion, versionInfo.StringFileInfo.LegalCopyright)
}
43 changes: 43 additions & 0 deletions testdata/example64-gofile/versioninfo.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
{
"FixedFileInfo": {
"FileVersion": {
"Major": 1,
"Minor": 0,
"Patch": 0,
"Build": 0
},
"ProductVersion": {
"Major": 1,
"Minor": 0,
"Patch": 0,
"Build": 0
},
"FileFlagsMask": "3f",
"FileFlags ": "00",
"FileOS": "040004",
"FileType": "01",
"FileSubType": "00"
},
"StringFileInfo": {
"Comments": "Test file.",
"CompanyName": "josephspurrier",
"FileDescription": "This is a hello world file.",
"FileVersion": "v1.0.0.0",
"InternalName": "goversioninfo.exe",
"LegalCopyright": "Copyright (c) 2019 Joseph Spurrier",
"LegalTrademarks": "",
"OriginalFilename": "main.go",
"PrivateBuild": "",
"ProductName": "goversioninfo",
"ProductVersion": "v1.0.0.0",
"SpecialBuild": ""
},
"VarFileInfo": {
"Translation": {
"LangID": "0409",
"CharsetID": "04B0"
}
},
"IconPath": "",
"ManifestPath": ""
}
4 changes: 2 additions & 2 deletions testdata/example64/main.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
//go:generate goversioninfo -icon=../resource/icon.ico -manifest=../resource/goversioninfo.exe.manifest -go=versioninfo.go
//go:generate goversioninfo -icon=../resource/icon.ico -manifest=../resource/goversioninfo.exe.manifest

package main

import "fmt"

func main() {
fmt.Printf("Hello world %v %v %v\n%v", versionInfo.StringFileInfo.ProductName, versionInfo.StringFileInfo.ProductVersion, versionInfo.FixedFileInfo.FileVersion, versionInfo.StringFileInfo.LegalCopyright)
fmt.Println("Hello world")
}
9 changes: 6 additions & 3 deletions testdata/go/cmd.go → testdata/gofile/cmd.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
//auto-generated file. Do not edit.
// Auto-generated file by goversioninfo. Do not edit.
package main

import "encoding/json"
import "github.com/josephspurrier/goversioninfo"
import (
"encoding/json"

"github.com/josephspurrier/goversioninfo"
)

func unmarshalGoVersionInfo(b []byte) goversioninfo.VersionInfo {
vi := goversioninfo.VersionInfo{}
Expand Down
9 changes: 6 additions & 3 deletions testdata/go/control.go → testdata/gofile/control.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
//auto-generated file. Do not edit.
// Auto-generated file by goversioninfo. Do not edit.
package main

import "encoding/json"
import "github.com/josephspurrier/goversioninfo"
import (
"encoding/json"

"github.com/josephspurrier/goversioninfo"
)

func unmarshalGoVersionInfo(b []byte) goversioninfo.VersionInfo {
vi := goversioninfo.VersionInfo{}
Expand Down
9 changes: 6 additions & 3 deletions testdata/go/explorer.go → testdata/gofile/explorer.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
//auto-generated file. Do not edit.
// Auto-generated file by goversioninfo. Do not edit.
package main

import "encoding/json"
import "github.com/josephspurrier/goversioninfo"
import (
"encoding/json"

"github.com/josephspurrier/goversioninfo"
)

func unmarshalGoVersionInfo(b []byte) goversioninfo.VersionInfo {
vi := goversioninfo.VersionInfo{}
Expand Down
9 changes: 6 additions & 3 deletions testdata/go/simple.go → testdata/gofile/simple.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
//auto-generated file. Do not edit.
// Auto-generated file by goversioninfo. Do not edit.
package main

import "encoding/json"
import "github.com/josephspurrier/goversioninfo"
import (
"encoding/json"

"github.com/josephspurrier/goversioninfo"
)

func unmarshalGoVersionInfo(b []byte) goversioninfo.VersionInfo {
vi := goversioninfo.VersionInfo{}
Expand Down

0 comments on commit 0f6aa24

Please sign in to comment.