diff --git a/ingressctl/cmd/helm.go b/ingressctl/cmd/helm.go index 4b7d58f06..30bec4dc6 100644 --- a/ingressctl/cmd/helm.go +++ b/ingressctl/cmd/helm.go @@ -22,7 +22,6 @@ import ( "os" "strings" - semver "github.com/blang/semver/v4" "github.com/codeskyblue/go-sh" "github.com/helm/helm/pkg/chartutil" yamlpath "github.com/vmware-labs/yaml-jsonpath/pkg/yamlpath" @@ -35,10 +34,6 @@ var HELM_DOCS_VERSION = "github.com/norwoodj/helm-docs/cmd/helm-docs@v1.11.0" // UpdateAppVersion Updates the Helm App Version of Ingress Nginx Controller func UpdateAppVersion() { - updateAppVersion() -} - -func updateAppVersion() { } @@ -54,8 +49,8 @@ func currentChartAppVersion() string { return chart.AppVersion } -// UpdateVersion Update Helm Version of the Chart -func UpdateVersion(appVersion string) { +// UpdateVersion Update Helm AppVersion Version of the Chart +func UpdateVersion(version, appVersion string) { Info("HELM Reading File %v", HelmChartPath) chart, err := chartutil.LoadChartfile(HelmChartPath) @@ -69,14 +64,7 @@ func UpdateVersion(appVersion string) { //Update the helm chart chart.AppVersion = appVersion - cTag, err := semver.Make(chart.Version) - CheckIfError(err, "HELM Creating Chart Version: %v", err) - - if err = cTag.IncrementPatch(); err != nil { - ErrorF("HELM Incrementing Chart Version: %v", err) - os.Exit(1) - } - chart.Version = cTag.String() + chart.Version = version Info("HELM Updated Chart Version: %v", chart.Version) err = chartutil.SaveChartfile(HelmChartPath, chart) diff --git a/ingressctl/cmd/release.go b/ingressctl/cmd/release.go index 4dd88ce6a..3351bd026 100644 --- a/ingressctl/cmd/release.go +++ b/ingressctl/cmd/release.go @@ -50,6 +50,8 @@ var ctx = context.Background() // Context used for GitHub Client // version - the version of the ingress-nginx controller to release var version string +var helmChartVersion string + var path = "../" // Documents that get updated for a controller release @@ -78,7 +80,10 @@ var helmReleaseCmd = &cobra.Command{ Short: "Start a new helm chart release", Long: "Start a new helm chart release", Run: func(cmd *cobra.Command, args []string) { - + var newReleaseNotes = ReleaseNote{} + newReleaseNotes.Version = version + newReleaseNotes.NewHelmChartVersion = helmChartVersion + ReleaseHelmChart(&newReleaseNotes) }, } @@ -88,7 +93,10 @@ var controllerReleaseCmd = &cobra.Command{ Short: "Release Ingress-nginx Controller", Long: "Release a new version of ingress-nginx controller", Run: func(cmd *cobra.Command, args []string) { - ControllerNewRelease(version) + var newReleaseNotes = ReleaseNote{} + newReleaseNotes.Version = version + newReleaseNotes.NewHelmChartVersion = helmChartVersion + ControllerNewRelease(&newReleaseNotes) }, } @@ -96,10 +104,11 @@ func init() { GITHUB_TOKEN = os.Getenv("GITHUB_TOKEN") rootCmd.AddCommand(releaseCmd) - releaseCmd.Flags().StringVar(&path, "path", "../", "path to root ingress-nginx repo") + releaseCmd.PersistentFlags().StringVar(&path, "path", "../", "path to root ingress-nginx repo") + releaseCmd.PersistentFlags().StringVar(&version, "version", "v1.0.0-dev", "version of the controller to update") + releaseCmd.PersistentFlags().StringVar(&helmChartVersion, "helm-chart-version", "v1.0.0-dev", "version of the Helm Version to update") releaseCmd.AddCommand(helmReleaseCmd) releaseCmd.AddCommand(controllerReleaseCmd) - controllerReleaseCmd.Flags().StringVar(&version, "version", "v1.0.0-dev", "version of the controller to update") } // ControllerImage - struct with info about controllers @@ -135,7 +144,7 @@ func PromoteImage(version, sha string) { } // Release Create a new release of ingress nginx controller -func ControllerNewRelease(version string) { +func ControllerNewRelease(releaseNotes *ReleaseNote) { //update ingress-nginx version //This is the step that kicks all the release process @@ -147,22 +156,39 @@ func ControllerNewRelease(version string) { Info("RELEASE Checking Current Version %s to New Version %s", tag[1:], version) //if the version were upgrading does not match the TAG file, lets update the TAG file - if tag[1:] != version { - Warning("RELEASE Ingress Nginx TAG %s and new version %s do not match", tag, version) - BumpNginx(fmt.Sprintf("v%s", version)) + if tag[1:] != releaseNotes.Version { + Warning("RELEASE Ingress Nginx TAG %s and new version %s do not match", tag, releaseNotes.Version) + BumpNginx(fmt.Sprintf("v%s", releaseNotes.Version)) } //update git controller tag controller-v$version - NewControllerTag(version) + NewControllerTag(releaseNotes.Version) //make release notes - releaseNotes, err := ControllerReleaseNotes(version) - CheckIfError(err, "RELEASE Creating Release Notes for version %s", version) + ControllerReleaseNotes(releaseNotes) + CheckIfError(err, "RELEASE Creating Release Notes for version %s", releaseNotes.Version) Info("RELEASE Release Notes %s completed", releaseNotes.Version) Debug("releaseNotes.ControllerImages[0].Name %s", releaseNotes.ControllerImages[0].Name) Debug("releaseNotes.ControllerImages[1].Name %s", releaseNotes.ControllerImages[1].Name) + //update static manifest + CheckIfError(updateStaticManifest(), "RELEASE Error Updating Static manifests") + + //update e2e docs + updateE2EDocs() + + //update documentation with ingress-nginx version + CheckIfError(updateIndexMD(releaseNotes.PreviousControllerVersion, releaseNotes.NewControllerVersion), "Error Updating %s", INDEX_DOCS) + + ReleaseHelmChart(releaseNotes) +} + +func ReleaseHelmChart(releaseNotes *ReleaseNote) { + Info("RELEASE - releasing Helm Chart Version %s AppVersion: %s", releaseNotes.HelmChartVersion, releaseNotes.Version) + _, _, helmUpdates := getCommitUpdates(releaseNotes.Version) + releaseNotes.HelmUpdates = helmUpdates + //Record the ingress-nginx controller digests if releaseNotes.ControllerImages[0].Name == "ingress-nginx/controller" { Debug("RELEASE Updating Chart Value %s with %s", "controller.image.digest", releaseNotes.ControllerImages[0].Digest) @@ -182,7 +208,7 @@ func ControllerNewRelease(version string) { releaseNotes.PreviousHelmChartVersion = currentChartVersion() //update helm chart app version - UpdateVersion(version) + UpdateVersion(releaseNotes.Version, releaseNotes.HelmChartVersion) releaseNotes.NewHelmChartVersion = currentChartVersion() @@ -194,18 +220,6 @@ func ControllerNewRelease(version string) { releaseNotes.helmTemplate() - //update static manifest - CheckIfError(updateStaticManifest(), "RELEASE Error Updating Static manifests") - - //update e2e docs - updateE2EDocs() - - //update documentation with ingress-nginx version - CheckIfError(updateIndexMD(releaseNotes.PreviousControllerVersion, releaseNotes.NewControllerVersion), "Error Updating %s", INDEX_DOCS) - - //keeping these manual for now - //git commit TODO - //Create Pull Request TODO } // the index.md doc needs the controller version updated diff --git a/ingressctl/cmd/releaseNotes.go b/ingressctl/cmd/releaseNotes.go index b05247b81..449c80ae3 100644 --- a/ingressctl/cmd/releaseNotes.go +++ b/ingressctl/cmd/releaseNotes.go @@ -12,6 +12,7 @@ import ( // ReleaseNote - All the pieces of information/documents that get updated during a release type ReleaseNote struct { Version string //released version + HelmChartVersion string //version to update helm chart NewControllerVersion string //the new controller version being release PreviousControllerVersion string //the previous controller tag/release ControllerImages []ControllerImage //the full image digests @@ -23,36 +24,33 @@ type ReleaseNote struct { } // Generate Release Notes -func ControllerReleaseNotes(newVersion string) (*ReleaseNote, error) { - var newReleaseNotes = ReleaseNote{} +func ControllerReleaseNotes(releaseNotes *ReleaseNote) error { - newReleaseNotes.Version = newVersion allControllerTags := getAllControllerTags() //new version - newReleaseNotes.NewControllerVersion = allControllerTags[0] - newControllerVersion := fmt.Sprintf("controller-v%s", newVersion) + releaseNotes.NewControllerVersion = allControllerTags[0] + newControllerVersion := fmt.Sprintf("controller-v%s", releaseNotes.Version) //the newControllerVersion should match the latest tag if newControllerVersion != allControllerTags[0] { - return nil, errors.New(fmt.Sprintf("Generating release new version %s didnt match the current latest tag %s", newControllerVersion, allControllerTags[0])) + return errors.New(fmt.Sprintf("Generating release new version %s didnt match the current latest tag %s", newControllerVersion, allControllerTags[0])) } //previous version - newReleaseNotes.PreviousControllerVersion = allControllerTags[1] + releaseNotes.PreviousControllerVersion = allControllerTags[1] - Info("New Version: %s Old Version: %s", newReleaseNotes.NewControllerVersion, newReleaseNotes.PreviousControllerVersion) + Info("New Version: %s Old Version: %s", releaseNotes.NewControllerVersion, releaseNotes.PreviousControllerVersion) - allUpdates, depUpdates, helmUpdates := getCommitUpdates(newVersion) + allUpdates, depUpdates, _ := getCommitUpdates(releaseNotes.Version) - newReleaseNotes.Updates = allUpdates - newReleaseNotes.DepUpdates = depUpdates - newReleaseNotes.HelmUpdates = helmUpdates + releaseNotes.Updates = allUpdates + releaseNotes.DepUpdates = depUpdates // Get the latest controller image digests from k8s.io promoter imagesYaml, err := downloadFile(IMAGES_YAML) if err != nil { ErrorF("Could not download file %s : %s", IMAGES_YAML, err) - return nil, err + return err } Debug("%s", imagesYaml) @@ -61,20 +59,20 @@ func ControllerReleaseNotes(newVersion string) (*ReleaseNote, error) { err = yaml.Unmarshal([]byte(imagesYaml), &data) if err != nil { ErrorF("Could not unmarshal images yaml %s", err) - return nil, err + return err } //controller - controllerDigest := findImageDigest(data, "controller", newVersion) + controllerDigest := findImageDigest(data, "controller", releaseNotes.Version) if len(controllerDigest) == 0 { ErrorF("Controller Digest could not be found") - return nil, errors.New("Controller digest could not be found") + return errors.New("Controller digest could not be found") } - controllerChrootDigest := findImageDigest(data, "controller-chroot", newVersion) + controllerChrootDigest := findImageDigest(data, "controller-chroot", releaseNotes.Version) if len(controllerChrootDigest) == 0 { ErrorF("Controller Chroot Digest could not be found") - return nil, errors.New("Controller Chroot digest could not be found") + return errors.New("Controller Chroot digest could not be found") } Debug("Latest Controller Digest %v", controllerDigest) @@ -83,28 +81,28 @@ func ControllerReleaseNotes(newVersion string) (*ReleaseNote, error) { Digest: controllerDigest, Registry: INGRESS_REGISTRY, Name: "ingress-nginx/controller", - Tag: fmt.Sprintf("v%s", newReleaseNotes.Version), + Tag: fmt.Sprintf("v%s", releaseNotes.Version), } c2 := ControllerImage{ Digest: controllerChrootDigest, Registry: INGRESS_REGISTRY, Name: "ingress-nginx/controller-chroot", - Tag: fmt.Sprintf("v%s", newReleaseNotes.Version), + Tag: fmt.Sprintf("v%s", releaseNotes.Version), } - newReleaseNotes.ControllerImages = append(newReleaseNotes.ControllerImages, c1) - newReleaseNotes.ControllerImages = append(newReleaseNotes.ControllerImages, c2) - Debug("New Release Controller Images %s %s", newReleaseNotes.ControllerImages[0].Digest, newReleaseNotes.ControllerImages[1].Digest) + releaseNotes.ControllerImages = append(releaseNotes.ControllerImages, c1) + releaseNotes.ControllerImages = append(releaseNotes.ControllerImages, c2) + Debug("New Release Controller Images %s %s", releaseNotes.ControllerImages[0].Digest, releaseNotes.ControllerImages[1].Digest) if DEBUG { - newReleaseNotes.printRelease() + releaseNotes.printRelease() } //write it all out to the changelog file - newReleaseNotes.template() + releaseNotes.template() - return &newReleaseNotes, nil + return nil } func getCommitUpdates(newVersion string) ([]string, []string, []string) {