-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
4a63fcb
commit 059398e
Showing
4 changed files
with
94 additions
and
46 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,7 @@ | ||
.PHONY: * | ||
|
||
MAIN := . | ||
TEST := . ./internal | ||
TEST := ./cmd ./internal | ||
|
||
run: | ||
go run $(MAIN) | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
package cmd | ||
|
||
import ( | ||
"flag" | ||
"fmt" | ||
"os" | ||
"runtime/debug" | ||
|
||
"github.com/choffmeister/git-describe-semver/internal" | ||
"github.com/go-git/go-git/v5" | ||
) | ||
|
||
func run(dir string, opts internal.GenerateVersionOptions) (*string, error) { | ||
repo, err := git.PlainOpen(dir) | ||
if err != nil { | ||
return nil, fmt.Errorf("unable to open git repository: %v", err) | ||
} | ||
tagName, counter, headHash, err := internal.GitDescribe(*repo) | ||
if err != nil { | ||
return nil, fmt.Errorf("unable to describe commit: %v", err) | ||
} | ||
result, err := internal.GenerateVersion(*tagName, *counter, *headHash, opts) | ||
if err != nil { | ||
return nil, fmt.Errorf("unable to generate version: %v", err) | ||
} | ||
return result, nil | ||
} | ||
|
||
func Execute(version FullVersion) error { | ||
fallbackFlag := flag.String("fallback", "", "The first version to fallback to should there be no tag") | ||
dropPrefixFlag := flag.Bool("drop-prefix", false, "Drop prefix from output") | ||
prereleaseSuffixFlag := flag.String("prerelease-suffix", "", "Suffix to add to prereleases") | ||
formatFlag := flag.String("format", "", "Format of output") | ||
flag.Parse() | ||
|
||
dir, err := os.Getwd() | ||
if err != nil { | ||
return err | ||
} | ||
opts := internal.GenerateVersionOptions{ | ||
FallbackTagName: *fallbackFlag, | ||
DropTagNamePrefix: *dropPrefixFlag, | ||
PrereleaseSuffix: *prereleaseSuffixFlag, | ||
Format: *formatFlag, | ||
} | ||
result, err := run(dir, opts) | ||
if err != nil { | ||
return err | ||
} | ||
fmt.Println(*result) | ||
|
||
return nil | ||
} | ||
|
||
type FullVersion struct { | ||
Version string | ||
Commit string | ||
Date string | ||
BuiltBy string | ||
} | ||
|
||
func (v FullVersion) ToString() string { | ||
result := v.Version | ||
if v.Commit != "" { | ||
result = fmt.Sprintf("%s\ncommit: %s", result, v.Commit) | ||
} | ||
if v.Date != "" { | ||
result = fmt.Sprintf("%s\nbuilt at: %s", result, v.Date) | ||
} | ||
if v.BuiltBy != "" { | ||
result = fmt.Sprintf("%s\nbuilt by: %s", result, v.BuiltBy) | ||
} | ||
if info, ok := debug.ReadBuildInfo(); ok && info.Main.Sum != "" { | ||
result = fmt.Sprintf("%s\nmodule version: %s, checksum: %s", result, info.Main.Version, info.Main.Sum) | ||
} | ||
return result | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
package main | ||
package cmd | ||
|
||
import ( | ||
"io/ioutil" | ||
|
@@ -14,24 +14,24 @@ func TestRun(t *testing.T) { | |
assert := assert.New(t) | ||
dir, _ := ioutil.TempDir("", "example") | ||
author := object.Signature{Name: "Test", Email: "[email protected]"} | ||
_, err := Run(dir, internal.GenerateVersionOptions{}) | ||
_, err := run(dir, internal.GenerateVersionOptions{}) | ||
assert.Error(err) | ||
|
||
repo, _ := git.PlainInit(dir, false) | ||
worktree, _ := repo.Worktree() | ||
_, err = Run(dir, internal.GenerateVersionOptions{}) | ||
_, err = run(dir, internal.GenerateVersionOptions{}) | ||
assert.Error(err) | ||
|
||
commit1, _ := worktree.Commit("first", &git.CommitOptions{Author: &author}) | ||
repo.CreateTag("invalid", commit1, nil) | ||
_, err = Run(dir, internal.GenerateVersionOptions{}) | ||
_, err = run(dir, internal.GenerateVersionOptions{}) | ||
assert.Error(err) | ||
|
||
commit2, _ := worktree.Commit("first", &git.CommitOptions{Author: &author}) | ||
repo.CreateTag("v1.0.0", commit2, nil) | ||
|
||
commit3, _ := worktree.Commit("second", &git.CommitOptions{Author: &author}) | ||
result, err := Run(dir, internal.GenerateVersionOptions{}) | ||
result, err := run(dir, internal.GenerateVersionOptions{}) | ||
assert.NoError(err) | ||
assert.Equal("v1.0.1-dev.1.g"+commit3.String()[0:7], *result) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,52 +1,23 @@ | ||
package main | ||
|
||
import ( | ||
"flag" | ||
"fmt" | ||
"log" | ||
"os" | ||
|
||
"github.com/choffmeister/git-describe-semver/internal" | ||
"github.com/go-git/go-git/v5" | ||
"github.com/choffmeister/git-describe-semver/cmd" | ||
) | ||
|
||
// Run ... | ||
func Run(dir string, opts internal.GenerateVersionOptions) (*string, error) { | ||
repo, err := git.PlainOpen(dir) | ||
if err != nil { | ||
return nil, fmt.Errorf("unable to open git repository: %v", err) | ||
} | ||
tagName, counter, headHash, err := internal.GitDescribe(*repo) | ||
if err != nil { | ||
return nil, fmt.Errorf("unable to describe commit: %v", err) | ||
} | ||
result, err := internal.GenerateVersion(*tagName, *counter, *headHash, opts) | ||
if err != nil { | ||
return nil, fmt.Errorf("unable to generate version: %v", err) | ||
} | ||
return result, nil | ||
} | ||
// nolint: gochecknoglobals | ||
var ( | ||
version = "dev" | ||
commit = "" | ||
date = "" | ||
builtBy = "" | ||
) | ||
|
||
func main() { | ||
fallbackFlag := flag.String("fallback", "", "The first version to fallback to should there be no tag") | ||
dropPrefixFlag := flag.Bool("drop-prefix", false, "Drop prefix from output") | ||
prereleaseSuffixFlag := flag.String("prerelease-suffix", "", "Suffix to add to prereleases") | ||
formatFlag := flag.String("format", "", "Format of output") | ||
flag.Parse() | ||
|
||
dir, err := os.Getwd() | ||
if err != nil { | ||
log.Fatalf("unable to determine current directory: %v\n", err) | ||
} | ||
opts := internal.GenerateVersionOptions{ | ||
FallbackTagName: *fallbackFlag, | ||
DropTagNamePrefix: *dropPrefixFlag, | ||
PrereleaseSuffix: *prereleaseSuffixFlag, | ||
Format: *formatFlag, | ||
} | ||
result, err := Run(dir, opts) | ||
if err != nil { | ||
log.Fatalf("unable to generate version: %v\n", err) | ||
if err := cmd.Execute(cmd.FullVersion{Version: version, Commit: commit, Date: date, BuiltBy: builtBy}); err != nil { | ||
fmt.Printf("%v\n", err) | ||
os.Exit(1) | ||
} | ||
fmt.Println(*result) | ||
} |