From cdf3d15105f41eb0f15827bc9b9c05414fdd78f2 Mon Sep 17 00:00:00 2001 From: Felix Wiedmann Date: Thu, 13 Jun 2019 23:33:42 +0200 Subject: [PATCH] ref(pkg/semantic-release): add wrapper method for writing changelog, add method for make a new release --- cmd/go-semantic-release/main.go | 11 +++++- pkg/semanticrelease/semantic-release.go | 51 +++++++++++++++++++++---- 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/cmd/go-semantic-release/main.go b/cmd/go-semantic-release/main.go index d7cfd3a..5f5ef94 100644 --- a/cmd/go-semantic-release/main.go +++ b/cmd/go-semantic-release/main.go @@ -43,6 +43,9 @@ func main() { log.Fatal(err) } fmt.Println(version) + if err = s.Release(*nextRepository); err != nil { + log.Fatal(err) + } case setCommand.FullCommand(): setLoglevel(*loglevel) @@ -52,13 +55,19 @@ func main() { if err != nil { log.Fatal(err) } + if err = s.Release(*setRepository); err != nil { + log.Fatal(err) + } case getChangelog.FullCommand(): setLoglevel(*loglevel) s := semanticrelease.New(readConfig(getChangelogConfigPath)) - err := s.GetChangelog(*getChangelogRepository, *getChangelogFile) + changelog, err := s.GetChangelog(*getChangelogRepository) if err != nil { log.Fatal(err) } + if err = s.WriteChangeLog(changelog, *getChangelogFile); err != nil { + log.Fatal(err) + } } } diff --git a/pkg/semanticrelease/semantic-release.go b/pkg/semanticrelease/semantic-release.go index 8cc0852..2cb7c95 100644 --- a/pkg/semanticrelease/semantic-release.go +++ b/pkg/semanticrelease/semantic-release.go @@ -2,6 +2,7 @@ package semanticrelease import ( + "fmt" "io/ioutil" "strconv" "strings" @@ -11,6 +12,7 @@ import ( "github.com/Nightapes/go-semantic-release/internal/cache" "github.com/Nightapes/go-semantic-release/internal/changelog" "github.com/Nightapes/go-semantic-release/internal/gitutil" + "github.com/Nightapes/go-semantic-release/internal/releaser" "github.com/Nightapes/go-semantic-release/pkg/config" log "github.com/sirupsen/logrus" ) @@ -182,41 +184,74 @@ func incPrerelease(preReleaseType string, version semver.Version) semver.Version } // GetChangelog from last version till now -func (s *SemanticRelease) GetChangelog(repro, file string) error { +func (s *SemanticRelease) GetChangelog(repro string) (string, error) { nextVersion, err := s.GetNextVersion(repro, false) if err != nil { log.Debugf("Could not get next version") - return err + return "", err } util, err := gitutil.New(repro) if err != nil { - return err + return "", err } _, lastVersionHash, err := util.GetLastVersion() if err != nil { - return err + return "", err } commits, err := util.GetCommits(lastVersionHash) if err != nil { - return err + return "", err } log.Debugf("Found %d commits till last release", len(commits)) a, err := analyzer.New(s.config.CommitFormat, s.config.Changelog) if err != nil { - return err + return "", err } result := a.Analyze(commits) c := changelog.New(s.config, a.GetRules()) - _, content, err := c.GenerateChanglog(nextVersion, s.config.GitProvider.URL+"{{hash}}", result) + _, content, err := c.GenerateChanglog(nextVersion, s.config.GetRepositoryURL()+"{{hash}}", result) + if err != nil { + return "", err + } + return content, nil + +} + +// WriteChangeLog wirtes changelog content to the given file +func (s *SemanticRelease) WriteChangeLog(changelogContent, file string) error { + return ioutil.WriteFile(file, []byte(changelogContent), 0644) +} + +// Release pusblish release to provider +func (s *SemanticRelease) Release(repo string) error { + nextVersion, err := s.GetNextVersion(repo, false) + if err != nil { + log.Debugf("Could not get next version") + return err + } + + changelog, err := s.GetChangelog(repo) + if err != nil { + log.Debugf("Could not get changelog") + return err + } + + releaseTitle := fmt.Sprintf("%s v%s", s.config.ReleaseTitle, nextVersion) + + releaser, err := releaser.New(s.config).GetReleaser() if err != nil { return err } - return ioutil.WriteFile(file, []byte(content), 0644) + if err = releaser.CreateRelease(nextVersion, releaseTitle, changelog, "master"); err != nil { + return err + } + + return nil }