Skip to content

Commit

Permalink
feat: github prerelease support
Browse files Browse the repository at this point in the history
  • Loading branch information
james-d-elliott committed Apr 19, 2024
1 parent 583d922 commit 924cab4
Show file tree
Hide file tree
Showing 7 changed files with 50 additions and 2 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ Flags:
-p, --package-path string Path to directory with chart packages (default ".cr-release-packages")
--release-name-template string Go template for computing release names, using chart metadata (default "{{ .Name }}-{{ .Version }}")
--release-notes-file string Markdown file with chart release notes. If it is set to empty string, or the file is not found, the chart description will be used instead. The file is read from the chart package
--auto-release Whether to mark release as pre-release and latest automatically based on the chart version
--pre-release Whether to mark release as pre-release
--skip-existing Skip upload if release exists
-t, --token string GitHub Auth Token
--make-release-latest bool Mark the created GitHub release as 'latest' (default "true")
Expand Down
2 changes: 2 additions & 0 deletions cr/cmd/upload.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,8 @@ func init() {
uploadCmd.Flags().StringP("git-base-url", "b", "https://api.github.com/", "GitHub Base URL (only needed for private GitHub)")
uploadCmd.Flags().StringP("git-upload-url", "u", "https://uploads.github.com/", "GitHub Upload URL (only needed for private GitHub)")
uploadCmd.Flags().StringP("commit", "c", "", "Target commit for release")
uploadCmd.Flags().Bool("auto-release", false, "Whether to mark release as pre-release and latest automatically based on the chart version")
uploadCmd.Flags().Bool("pre-release", false, "Whether to mark release as pre-release")
uploadCmd.Flags().Bool("skip-existing", false, "Skip upload if release exists")
uploadCmd.Flags().String("release-name-template", "{{ .Name }}-{{ .Version }}", "Go template for computing release names, using chart metadata")
uploadCmd.Flags().String("release-notes-file", "", "Markdown file with chart release notes. "+
Expand Down
4 changes: 3 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
module github.com/helm/chart-releaser

go 1.20
go 1.21

toolchain go1.22.2

require (
github.com/MakeNowJust/heredoc v1.0.0
Expand Down
2 changes: 2 additions & 0 deletions pkg/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ type Options struct {
PR bool `mapstructure:"pr"`
Remote string `mapstructure:"remote"`
ReleaseNameTemplate string `mapstructure:"release-name-template"`
AutoRelease bool `mapstructure:"auto-release"`
PreRelease bool `mapstructure:"pre-release"`
SkipExisting bool `mapstructure:"skip-existing"`
ReleaseNotesFile string `mapstructure:"release-notes-file"`
GenerateReleaseNotes bool `mapstructure:"generate-release-notes"`
Expand Down
2 changes: 2 additions & 0 deletions pkg/github/github.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ type Release struct {
Description string
Assets []*Asset
Commit string
PreRelease bool
GenerateReleaseNotes bool
MakeLatest string
}
Expand Down Expand Up @@ -111,6 +112,7 @@ func (c *Client) CreateRelease(_ context.Context, input *Release) error {
TargetCommitish: &input.Commit,
GenerateReleaseNotes: &input.GenerateReleaseNotes,
MakeLatest: &input.MakeLatest,
Prerelease: &input.PreRelease,
}

release, _, err := c.Repositories.CreateRelease(context.TODO(), c.owner, c.repo, req)
Expand Down
21 changes: 20 additions & 1 deletion pkg/releaser/releaser.go
Original file line number Diff line number Diff line change
Expand Up @@ -320,15 +320,34 @@ func (r *Releaser) CreateReleases() error {
return err
}

var (
latest string
pre bool
)

if r.config.AutoRelease && ch != nil && ch.Metadata != nil {
if strings.Contains(ch.Metadata.Version, "-") {
pre = true
latest = strconv.FormatBool(false)
} else {
pre = false
latest = strconv.FormatBool(true)
}
} else {
pre = r.config.PreRelease
latest = strconv.FormatBool(r.config.MakeReleaseLatest)
}

release := &github.Release{
Name: releaseName,
Description: r.getReleaseNotes(ch),
Assets: []*github.Asset{
{Path: p},
},
Commit: r.config.Commit,
PreRelease: pre,
GenerateReleaseNotes: r.config.GenerateReleaseNotes,
MakeLatest: strconv.FormatBool(r.config.MakeReleaseLatest),
MakeLatest: latest,
}
provFile := fmt.Sprintf("%s.prov", p)
if _, err := os.Stat(provFile); err == nil {
Expand Down
19 changes: 19 additions & 0 deletions pkg/releaser/releaser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,24 @@ func TestReleaser_CreateReleases(t *testing.T) {
},
error: false,
},
{
name: "valid-package-pre-release",
packagePath: "testdata/release-packages",
chart: "test-chart",
version: "0.1.0",
commit: "",
latest: "true",
Releaser: &Releaser{
config: &config.Options{
PackagePath: "testdata/release-packages",
Commit: "",
PreRelease: true,
PackagesWithIndex: false,
MakeReleaseLatest: true,
},
},
error: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
Expand Down Expand Up @@ -467,6 +485,7 @@ func TestReleaser_CreateReleases(t *testing.T) {
assert.Equal(t, tt.commit, fakeGitHub.release.Commit)
assert.Equal(t, tt.latest, fakeGitHub.release.MakeLatest)
assert.Equal(t, tt.Releaser.config.Commit, fakeGitHub.release.Commit)
assert.Equal(t, tt.Releaser.config.PreRelease, fakeGitHub.release.PreRelease)
fakeGitHub.AssertNumberOfCalls(t, "CreateRelease", 1)
}
})
Expand Down

0 comments on commit 924cab4

Please sign in to comment.