package main import ( "flag" "fmt" "os" "path/filepath" "git.hrafn.xyz/aether/vociferate/internal/vociferate" ) func main() { version := flag.String("version", "", "semantic version to release, with or without leading v") date := flag.String("date", "", "release date in YYYY-MM-DD format") recommend := flag.Bool("recommend", false, "print the recommended next release tag based on the changelog") printUnreleased := flag.Bool("print-unreleased", false, "print the current Unreleased changelog body") root := flag.String("root", ".", "repository root to update") versionFile := flag.String("version-file", "", "path to the version file, relative to --root") versionPattern := flag.String("version-pattern", "", "regexp with one capture group for the version value") changelog := flag.String("changelog", "", "path to changelog file, relative to --root") flag.Parse() absRoot, err := filepath.Abs(*root) if err != nil { fmt.Fprintf(os.Stderr, "resolve root: %v\n", err) os.Exit(1) } opts := vociferate.Options{ VersionFile: *versionFile, VersionPattern: *versionPattern, Changelog: *changelog, } if *recommend { tag, err := vociferate.RecommendedTag(absRoot, opts) if err != nil { fmt.Fprintf(os.Stderr, "recommend release: %v\n", err) os.Exit(1) } fmt.Println(tag) return } if *printUnreleased { body, err := vociferate.UnreleasedBody(absRoot, opts) if err != nil { fmt.Fprintf(os.Stderr, "print unreleased: %v\n", err) os.Exit(1) } fmt.Print(body) return } if *version == "" || *date == "" { fmt.Fprintln(os.Stderr, "usage: vociferate --version --date [--root ] [--version-file ] [--version-pattern ] [--changelog ] | --recommend [--root ] [--version-file ] [--version-pattern ] [--changelog ] | --print-unreleased [--root ] [--changelog ]") os.Exit(2) } if err := vociferate.Prepare(absRoot, *version, *date, opts); err != nil { fmt.Fprintf(os.Stderr, "prepare release: %v\n", err) os.Exit(1) } }