Skip to content

feat: add --json flag - #261

Merged
caarlos0 merged 1 commit into
caarlos0:mainfrom
Nadim147c:feat/json
Nov 1, 2025
Merged

feat: add --json flag#261
caarlos0 merged 1 commit into
caarlos0:mainfrom
Nadim147c:feat/json

Conversation

@Nadim147c

Copy link
Copy Markdown

The --json flag allows to output version as json.

{
  "major": 3,
  "minor": 2,
  "patch": 4,
  "metadata": "",
  "prefix": "v",
  "prerelease": "",
  "version": "v3.2.4"
}

Why?

It gives more control of over version. My reason for adding this flag is adding prerelease automatically using shell script. Something like this:

#!/usr/bin/env bash

prerelease=$(svu current --json | jq .prerelease --raw-output)
prerelease=$(echo "$prerelease" |
    gum input --header "Pre release tag" --placeholder "alpha, beta or rc")

if [ -n "$prerelease" ]; then
    svu next --prerelease "$prerelease"
    exit
fi

# Also probably create the tag?
svu next

It can be done with grep but it much nicer and reliable. Thanks!

Comment thread internal/svu/svu.go Outdated
Comment on lines +254 to +265
m := make(map[string]any)
m["prefix"] = opts.Prefix
m["version"] = opts.Prefix + v.String()
m["major"] = v.Major()
m["minor"] = v.Minor()
m["patch"] = v.Patch()
m["metadata"] = v.Metadata()
m["prerelease"] = v.Prerelease()
if release := strings.SplitN(v.Prerelease(), ".", 2); len(release) == 2 {
m["prerelease"] = release[0]
m["build"] = release[1]
}

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think it is probably clearer to have a type here instead of a map

also adds the benefit that people that want to parse it can just copy the struct from here.

The `--json` flag allows to output version as json.
@Nadim147c

Copy link
Copy Markdown
Author

does this works?

type VersionInfo struct {
	Version    string `json:"version"`
	Major      uint64 `json:"major"`
	Minor      uint64 `json:"minor"`
	Patch      uint64 `json:"patch"`
	Prefix     string `json:"prefix,omitempty"`
	Metadata   string `json:"metadata,omitempty"`
	Prerelease string `json:"prerelease,omitempty"`
	Build      string `json:"build,omitempty"`
}

@caarlos0
caarlos0 merged commit 0d2aa97 into caarlos0:main Nov 1, 2025
@caarlos0

caarlos0 commented Nov 1, 2025

Copy link
Copy Markdown
Owner

that looks great, thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants