Report the embedded release version

This commit is contained in:
2026-08-29 23:13:01 +00:00
parent 51edd384c0
commit ee2b8e63e6
6 changed files with 84 additions and 1 deletions

View File

@@ -7,7 +7,7 @@ import (
"strings"
)
var supportedCommands = []string{"run", "regenerate-artifacts", "run-stage", "analyze", "publish", "clean", "session"}
var supportedCommands = []string{"version", "run", "regenerate-artifacts", "run-stage", "analyze", "publish", "clean", "session"}
var runCommandFn = Run
@@ -24,6 +24,8 @@ func Execute(args []string, stdout, stderr io.Writer) int {
var err error
switch cmd {
case "version":
err = Version(cmdArgs, stdout)
case "run":
err = runCommandFn(ctx, cmdArgs, stdout)
case "regenerate-artifacts":

17
internal/app/version.go Normal file
View File

@@ -0,0 +1,17 @@
package app
import (
"fmt"
"io"
"gitea.maximumdirect.net/eric/narratio/internal/buildinfo"
)
// Version prints the version embedded in the current Narratio binary.
func Version(args []string, out io.Writer) error {
if len(args) != 0 {
return fmt.Errorf("version: unexpected arguments")
}
_, err := fmt.Fprintf(out, "narratio %s\n", buildinfo.Version)
return err
}

View File

@@ -0,0 +1,38 @@
package app
import (
"bytes"
"io"
"strings"
"testing"
"gitea.maximumdirect.net/eric/narratio/internal/buildinfo"
)
func TestExecuteVersionReportsEmbeddedBuildVersion(t *testing.T) {
original := buildinfo.Version
buildinfo.Version = "v1.5.0-test"
t.Cleanup(func() { buildinfo.Version = original })
var stdout bytes.Buffer
var stderr bytes.Buffer
if code := Execute([]string{"version"}, &stdout, &stderr); code != 0 {
t.Fatalf("Execute() code = %d, stderr = %q", code, stderr.String())
}
if got, want := stdout.String(), "narratio v1.5.0-test\n"; got != want {
t.Fatalf("stdout = %q, want %q", got, want)
}
if stderr.Len() != 0 {
t.Fatalf("stderr = %q, want empty", stderr.String())
}
}
func TestExecuteVersionRejectsArguments(t *testing.T) {
var stderr bytes.Buffer
if code := Execute([]string{"version", "extra"}, io.Discard, &stderr); code == 0 {
t.Fatal("Execute() code = 0, want failure")
}
if !strings.Contains(stderr.String(), "version: unexpected arguments") {
t.Fatalf("stderr = %q, want argument error", stderr.String())
}
}