diff --git a/changelog/unreleased/issue-4547 b/changelog/unreleased/issue-4547 new file mode 100644 index 000000000..edb1cf693 --- /dev/null +++ b/changelog/unreleased/issue-4547 @@ -0,0 +1,7 @@ +Enhancement: Add support for `--json` option to `version` command + +Restic now supports outputting restic version and used go version, OS and +architecture via JSON when using the version command. + +https://github.com/restic/restic/issues/4547 +https://github.com/restic/restic/pull/4553 diff --git a/cmd/restic/cmd_version.go b/cmd/restic/cmd_version.go index b17103706..73469750f 100644 --- a/cmd/restic/cmd_version.go +++ b/cmd/restic/cmd_version.go @@ -1,6 +1,7 @@ package main import ( + "encoding/json" "fmt" "runtime" @@ -21,8 +22,31 @@ Exit status is 0 if the command was successful, and non-zero if there was any er `, DisableAutoGenTag: true, Run: func(cmd *cobra.Command, args []string) { - fmt.Printf("restic %s compiled with %v on %v/%v\n", - version, runtime.Version(), runtime.GOOS, runtime.GOARCH) + if globalOptions.JSON { + type jsonVersion struct { + Version string `json:"version"` + GoVersion string `json:"go_version"` + GoOS string `json:"go_os"` + GoArch string `json:"go_arch"` + } + + jsonS := jsonVersion{ + Version: version, + GoVersion: runtime.Version(), + GoOS: runtime.GOOS, + GoArch: runtime.GOARCH, + } + + err := json.NewEncoder(globalOptions.stdout).Encode(jsonS) + if err != nil { + Warnf("JSON encode failed: %v\n", err) + return + } + } else { + fmt.Printf("restic %s compiled with %v on %v/%v\n", + version, runtime.Version(), runtime.GOOS, runtime.GOARCH) + } + }, } diff --git a/doc/075_scripting.rst b/doc/075_scripting.rst index 71ecd4c2b..f17e222cc 100644 --- a/doc/075_scripting.rst +++ b/doc/075_scripting.rst @@ -576,3 +576,19 @@ The snapshots command returns a single JSON object. +------------------------------+-----------------------------------------------------+ | ``compression_space_saving`` | Overall space saving due to compression | +------------------------------+-----------------------------------------------------+ + + +version +------- + +The version command returns a single JSON object. + ++----------------+--------------------+ +| ``version`` | restic version | ++----------------+--------------------+ +| ``go_version`` | Go compile version | ++----------------+--------------------+ +| ``go_os`` | Go OS | ++----------------+--------------------+ +| ``go_arch`` | Go architecture | ++----------------+--------------------+