diff --git a/config.go b/config.go index 0282d84..e125d46 100644 --- a/config.go +++ b/config.go @@ -64,6 +64,12 @@ func settingsFlags(settings *plugin.Settings) []cli.Flag { EnvVars: []string{"PLUGIN_PRERELEASE", "GITHUB_RELEASE_PRERELEASE"}, Destination: &settings.Prerelease, }, + &cli.StringFlag{ + Name: "discussion-category", + Usage: "create a discussion in the given category", + EnvVars: []string{"PLUGIN_DISCUSSION_CATEGORY", "GITHUB_RELEASE_DISCUSSION_CATEGORY"}, + Destination: &settings.DiscussionCategory, + }, &cli.StringFlag{ Name: "base-url", Usage: "api url, needs to be changed for ghe", diff --git a/plugin/impl.go b/plugin/impl.go index c87e3ec..63a4fad 100644 --- a/plugin/impl.go +++ b/plugin/impl.go @@ -33,6 +33,7 @@ type Settings struct { Note string Overwrite bool GenerateReleaseNotes bool + DiscussionCategory string baseURL *url.URL uploadURL *url.URL @@ -137,6 +138,7 @@ func (p *Plugin) Execute() error { Note: p.settings.Note, Overwrite: p.settings.Overwrite, GenerateReleaseNotes: p.settings.GenerateReleaseNotes, + DiscussionCategory: p.settings.DiscussionCategory, } release, err := rc.buildRelease() diff --git a/plugin/release.go b/plugin/release.go index 76ada74..011357f 100644 --- a/plugin/release.go +++ b/plugin/release.go @@ -28,6 +28,7 @@ type releaseClient struct { Note string Overwrite bool GenerateReleaseNotes bool + DiscussionCategory string } func (rc *releaseClient) buildRelease() (*github.RepositoryRelease, error) { @@ -93,13 +94,19 @@ func (rc *releaseClient) editRelease(targetRelease github.RepositoryRelease) (*g // only potentially change the draft value, if it's a draft right now // i.e. a drafted release will be published, but a release won't be unpublished if targetRelease.GetDraft() { - fmt.Printf("DRAFT: %+v\n", rc.Draft) if !rc.Draft { fmt.Println("Publishing a release draft") } sourceRelease.Draft = &rc.Draft } + // do not overwrite the discussion category + if targetRelease.GetDiscussionCategoryName() == "" { + if rc.DiscussionCategory != "" { + sourceRelease.DiscussionCategoryName = &rc.DiscussionCategory + } + } + modifiedRelease, _, err := rc.Client.Repositories.EditRelease(rc.Context, rc.Owner, rc.Repo, targetRelease.GetID(), sourceRelease) if err != nil { return nil, fmt.Errorf("failed to update release: %w", err) @@ -111,12 +118,13 @@ func (rc *releaseClient) editRelease(targetRelease github.RepositoryRelease) (*g func (rc *releaseClient) newRelease() (*github.RepositoryRelease, error) { rr := &github.RepositoryRelease{ - TagName: github.String(rc.Tag), - Draft: &rc.Draft, - Prerelease: &rc.Prerelease, - Name: &rc.Title, - Body: &rc.Note, - GenerateReleaseNotes: &rc.GenerateReleaseNotes, + TagName: github.String(rc.Tag), + Draft: &rc.Draft, + Prerelease: &rc.Prerelease, + Name: &rc.Title, + Body: &rc.Note, + GenerateReleaseNotes: &rc.GenerateReleaseNotes, + DiscussionCategoryName: &rc.DiscussionCategory, } if *rr.Prerelease { @@ -131,6 +139,12 @@ func (rc *releaseClient) newRelease() (*github.RepositoryRelease, error) { fmt.Printf("Release %s will be created and published\n", rc.Tag) } + if *rr.DiscussionCategoryName != "" { + fmt.Printf("Release discussion in category %s\n", *rr.DiscussionCategoryName) + } else { + fmt.Println("Not creating a discussion") + } + if *rr.GenerateReleaseNotes { fmt.Printf("Release %s automatically will generate release notes\n", rc.Tag) } else {