diff --git a/internal/releaser/releaser.go b/internal/releaser/releaser.go new file mode 100644 index 0000000..6402c6e --- /dev/null +++ b/internal/releaser/releaser.go @@ -0,0 +1,36 @@ +package releaser + +import ( + "fmt" + "github.com/Nightapes/go-semantic-release/internal/cache" + "github.com/Nightapes/go-semantic-release/internal/releaser/releasers" + "github.com/Nightapes/go-semantic-release/pkg/config" +) + +// Releasers struct type +type Releasers struct { + config *config.ReleaseConfig +} + +// Releaser interface for providers +type Releaser interface { + CreateRelease(releaseName, releaseMessage string) error +} + +// New initialize a Relerser +func New(c *config.ReleaseConfig) *Releasers { + return &Releasers{ + config: c, + } +} + +//GetReleaser returns an initialized releaser +func (r *Releasers) GetReleaser(releaserType string) (Releaser, error) { + switch releaserType { + case releasers.GITHUB: + return releasers.NewGitHubReleaser(r.config), nil + } + return nil, fmt.Errorf("Could not initialize a releaser from this type: %s", releaserType) +} + +// tbd. http helper function diff --git a/internal/releaser/releasers/github.go b/internal/releaser/releasers/github.go new file mode 100644 index 0000000..3b65c53 --- /dev/null +++ b/internal/releaser/releasers/github.go @@ -0,0 +1,36 @@ +package releasers + +import ( + "github.com/Nightapes/go-semantic-release/pkg/config" +) + +// GITHUB identifer for github interface +const GITHUB = "github" + +// GitHubReleaser type struct +type GitHubReleaser struct { + RepositoryURL string + TagName string `json:"tag_name"` + TargetCommitish string `json:"target_commitish"` + ReleaseName string `json:"name"` + ReleaseMessage string `json:"body"` + Draft bool `json:"draft,omitempty"` + Prerelease bool `json:"prerelease,omitempty"` + // Assets +} + +// CreateRelease creates release on remote +func (g *GitHubReleaser) CreateRelease(releaseName, releaseMessage string) error { + g.ReleaseName = releaseName + g.ReleaseMessage = releaseMessage + return nil +} + +// NewGitHubReleaser initialize a new GitHubRelease +func NewGitHubReleaser(c *config.ReleaseConfig, branch, latestVersion string) *GitHubReleaser { + return &GitHubReleaser{ + RepositoryURL: c.Github["url"], + TargetCommitish: branch, + TagName: latestVersion, + } +}