76 lines
2.4 KiB
Go
76 lines
2.4 KiB
Go
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")
|
|
printReleaseNotes := flag.Bool("print-release-notes", false, "print the release notes section for --version")
|
|
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 *printReleaseNotes {
|
|
body, err := vociferate.ReleaseNotes(absRoot, *version, opts)
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stderr, "print release notes: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
fmt.Print(body)
|
|
return
|
|
}
|
|
|
|
if *version == "" || *date == "" {
|
|
fmt.Fprintln(os.Stderr, "usage: vociferate --version <version> --date <YYYY-MM-DD> [--root <dir>] [--version-file <path>] [--version-pattern <regexp>] [--changelog <path>] | --recommend [--root <dir>] [--version-file <path>] [--version-pattern <regexp>] [--changelog <path>] | --print-unreleased [--root <dir>] [--changelog <path>] | --print-release-notes --version <version> [--root <dir>] [--changelog <path>]")
|
|
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)
|
|
}
|
|
}
|