diff --git a/assets.go b/assets.go index 052fb21..23f67b4 100644 --- a/assets.go +++ b/assets.go @@ -69,7 +69,7 @@ func (fi bindataFileInfo) Sys() interface{} { return nil } -var _assetsGit_changereleaseYaml = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xd2\xd5\xd5\xe5\xca\x4d\x2c\x49\xce\x88\x2f\x00\x91\x56\x5c\x0a\x0a\xba\x0a\x4a\x71\xd1\x69\x6e\xb1\x99\x15\x4a\x5c\x50\xb9\xdc\xc4\xac\xfc\x22\xb8\x9c\x53\x52\x6c\x51\x6a\x62\x76\x66\x5e\xba\x12\x17\x20\x00\x00\xff\xff\x2b\x53\xa7\xa0\x40\x00\x00\x00") +var _assetsGit_changereleaseYaml = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xd2\xd5\xd5\xe5\xca\x4d\x2c\x49\xce\x88\x2f\x00\x91\x56\x5c\x0a\x0a\xba\x0a\x4a\x71\xd1\x69\x6e\xb1\x99\x15\x4a\x5c\x50\xb9\xdc\xc4\xac\xfc\x22\xb8\x9c\x53\x52\x6c\x51\x6a\x62\x76\x66\x5e\x3a\x50\x41\x51\x6a\x4e\x6a\x62\x71\x6a\x7c\x72\x7e\x6e\x6e\x66\x49\x7c\x6e\x6a\x71\x71\x62\x7a\xaa\x95\x82\x52\x41\x51\x6a\x41\x62\x51\xaa\x02\x54\x81\x42\x75\xb5\x5e\x58\x6a\x51\x71\x66\x7e\x5e\x6d\xad\x12\x17\x20\x00\x00\xff\xff\x00\xa0\x8b\xae\x78\x00\x00\x00") func assetsGit_changereleaseYamlBytes() ([]byte, error) { return bindataRead( @@ -84,7 +84,7 @@ func assetsGit_changereleaseYaml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "assets/git_changerelease.yaml", size: 64, mode: os.FileMode(436), modTime: time.Unix(1468492027, 0)} + info := bindataFileInfo{name: "assets/git_changerelease.yaml", size: 120, mode: os.FileMode(436), modTime: time.Unix(1468498243, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -104,7 +104,7 @@ func assetsLog_templateMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "assets/log_template.md", size: 135, mode: os.FileMode(436), modTime: time.Unix(1468493297, 0)} + info := bindataFileInfo{name: "assets/log_template.md", size: 135, mode: os.FileMode(436), modTime: time.Unix(1468497058, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/assets/git_changerelease.yaml b/assets/git_changerelease.yaml index 33a6b46..f14ece1 100644 --- a/assets/git_changerelease.yaml +++ b/assets/git_changerelease.yaml @@ -4,3 +4,5 @@ match_patch: match_major: - "^[Bb]reaking" + +release_commit_message: "prepare release {{.Version}}" diff --git a/main.go b/main.go index 22ed935..2831614 100644 --- a/main.go +++ b/main.go @@ -21,8 +21,9 @@ import ( ) type configFile struct { - MatchPatch []string `yaml:"match_patch"` - MatchMajor []string `yaml:"match_major"` + MatchPatch []string `yaml:"match_patch"` + MatchMajor []string `yaml:"match_major"` + ReleaseCommitMessage string `yaml:"release_commit_message"` } var ( @@ -79,6 +80,9 @@ func loadConfig() error { return errors.New("Config file does not exist, use --create-config to create one") } + defaultConfigData, _ := Asset("assets/git_changerelease.yaml") + yaml.Unmarshal(defaultConfigData, &config) + data, err := ioutil.ReadFile(cfg.ConfigFile) if err != nil { return err @@ -101,6 +105,17 @@ func readChangelog() string { return changelog } +func quickTemplate(name string, tplSrc []byte, values map[string]interface{}) ([]byte, error) { + tpl, err := template.New(name).Parse(string(tplSrc)) + if err != nil { + return nil, errors.New("Unable to parse log template: " + err.Error()) + } + buf := bytes.NewBuffer([]byte{}) + tpl.Execute(buf, values) + + return buf.Bytes(), nil +} + func main() { // Get last tag lastTag, err := gitSilent("describe", "--tags", "--abbrev=0") @@ -155,19 +170,17 @@ func main() { // Render log rawTpl, _ := Asset("assets/log_template.md") - tpl, err := template.New("log_template").Parse(string(rawTpl)) - if err != nil { - log.Fatalf("Unable to parse log template: %s", err) - } - buf := bytes.NewBuffer([]byte{}) - tpl.Execute(buf, map[string]interface{}{ + c, err := quickTemplate("log_template", rawTpl, map[string]interface{}{ "NextVersion": newVersion, "Now": time.Now(), "LogLines": logs, "OldLog": readChangelog(), }) + if err != nil { + log.Fatalf("Unable to compile log: %s", err) + } - if err := ioutil.WriteFile(cfg.ChangelogFile, bytes.TrimSpace(buf.Bytes()), 0644); err != nil { + if err := ioutil.WriteFile(cfg.ChangelogFile, bytes.TrimSpace(c), 0644); err != nil { log.Fatalf("Unable to write new changelog: %s", err) } @@ -192,14 +205,24 @@ func main() { log.Fatalf("Unable to parse new version from log: %s", err) } + stringVersion := "v" + newVersion.String() + // Write the tag if _, err := gitErr("add", cfg.ChangelogFile); err != nil { log.Fatalf("Unable to add changelog file: %s", err) } - if _, err := gitErr("commit", "-m", "prepare release v"+newVersion.String()); err != nil { + + commitMessage, err := quickTemplate("commitMessage", []byte(config.ReleaseCommitMessage), map[string]interface{}{ + "Version": stringVersion, + }) + if err != nil { + log.Fatalf("Unable to compile commit message: %s", err) + } + if _, err := gitErr("commit", "-m", string(commitMessage)); err != nil { log.Fatalf("Unable to commit changelog: %s", err) } - if _, err := gitErr("tag", "-s", "-m", "v"+newVersion.String(), "v"+newVersion.String()); err != nil { + + if _, err := gitErr("tag", "-s", "-m", stringVersion, stringVersion); err != nil { log.Fatalf("Unable to tag release: %s", err) } }