diff --git a/cr/cmd/upload.go b/cr/cmd/upload.go index 8699fd25..492a45be 100644 --- a/cr/cmd/upload.go +++ b/cr/cmd/upload.go @@ -51,5 +51,6 @@ 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("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") } diff --git a/pkg/config/config.go b/pkg/config/config.go index b9f7dfa1..79ae19a0 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -56,6 +56,7 @@ type Options struct { PR bool `mapstructure:"pr"` Remote string `mapstructure:"remote"` ReleaseNameTemplate string `mapstructure:"release-name-template"` + SkipExisting bool `mapstructure:"skip-existing"` } func LoadConfiguration(cfgFile string, cmd *cobra.Command, requiredFlags []string) (*Options, error) { diff --git a/pkg/releaser/releaser.go b/pkg/releaser/releaser.go index 23263b23..ccb12a6d 100644 --- a/pkg/releaser/releaser.go +++ b/pkg/releaser/releaser.go @@ -326,7 +326,12 @@ func (r *Releaser) CreateReleases() error { asset := &github.Asset{Path: provFile} release.Assets = append(release.Assets, asset) } - + if r.config.SkipExisting { + existingRelease, _ := r.github.GetRelease(context.TODO(), releaseName) + if existingRelease != nil { + continue + } + } if err := r.github.CreateRelease(context.TODO(), release); err != nil { return errors.Wrap(err, "error creating GitHub release") }