adding helm release

Signed-off-by: James Strong <james.strong@chainguard.dev>
This commit is contained in:
James Strong 2023-06-19 15:36:02 -04:00
parent 5b1c422208
commit 7ecd1bf3c1
3 changed files with 65 additions and 65 deletions

View file

@ -22,7 +22,6 @@ import (
"os" "os"
"strings" "strings"
semver "github.com/blang/semver/v4"
"github.com/codeskyblue/go-sh" "github.com/codeskyblue/go-sh"
"github.com/helm/helm/pkg/chartutil" "github.com/helm/helm/pkg/chartutil"
yamlpath "github.com/vmware-labs/yaml-jsonpath/pkg/yamlpath" 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 // UpdateAppVersion Updates the Helm App Version of Ingress Nginx Controller
func UpdateAppVersion() { func UpdateAppVersion() {
updateAppVersion()
}
func updateAppVersion() {
} }
@ -54,8 +49,8 @@ func currentChartAppVersion() string {
return chart.AppVersion return chart.AppVersion
} }
// UpdateVersion Update Helm Version of the Chart // UpdateVersion Update Helm AppVersion Version of the Chart
func UpdateVersion(appVersion string) { func UpdateVersion(version, appVersion string) {
Info("HELM Reading File %v", HelmChartPath) Info("HELM Reading File %v", HelmChartPath)
chart, err := chartutil.LoadChartfile(HelmChartPath) chart, err := chartutil.LoadChartfile(HelmChartPath)
@ -69,14 +64,7 @@ func UpdateVersion(appVersion string) {
//Update the helm chart //Update the helm chart
chart.AppVersion = appVersion chart.AppVersion = appVersion
cTag, err := semver.Make(chart.Version) chart.Version = 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()
Info("HELM Updated Chart Version: %v", chart.Version) Info("HELM Updated Chart Version: %v", chart.Version)
err = chartutil.SaveChartfile(HelmChartPath, chart) err = chartutil.SaveChartfile(HelmChartPath, chart)

View file

@ -50,6 +50,8 @@ var ctx = context.Background() // Context used for GitHub Client
// version - the version of the ingress-nginx controller to release // version - the version of the ingress-nginx controller to release
var version string var version string
var helmChartVersion string
var path = "../" var path = "../"
// Documents that get updated for a controller release // Documents that get updated for a controller release
@ -78,7 +80,10 @@ var helmReleaseCmd = &cobra.Command{
Short: "Start a new helm chart release", Short: "Start a new helm chart release",
Long: "Start a new helm chart release", Long: "Start a new helm chart release",
Run: func(cmd *cobra.Command, args []string) { 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", Short: "Release Ingress-nginx Controller",
Long: "Release a new version of ingress-nginx controller", Long: "Release a new version of ingress-nginx controller",
Run: func(cmd *cobra.Command, args []string) { 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") GITHUB_TOKEN = os.Getenv("GITHUB_TOKEN")
rootCmd.AddCommand(releaseCmd) 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(helmReleaseCmd)
releaseCmd.AddCommand(controllerReleaseCmd) releaseCmd.AddCommand(controllerReleaseCmd)
controllerReleaseCmd.Flags().StringVar(&version, "version", "v1.0.0-dev", "version of the controller to update")
} }
// ControllerImage - struct with info about controllers // ControllerImage - struct with info about controllers
@ -135,7 +144,7 @@ func PromoteImage(version, sha string) {
} }
// Release Create a new release of ingress nginx controller // Release Create a new release of ingress nginx controller
func ControllerNewRelease(version string) { func ControllerNewRelease(releaseNotes *ReleaseNote) {
//update ingress-nginx version //update ingress-nginx version
//This is the step that kicks all the release process //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) 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 the version were upgrading does not match the TAG file, lets update the TAG file
if tag[1:] != version { if tag[1:] != releaseNotes.Version {
Warning("RELEASE Ingress Nginx TAG %s and new version %s do not match", tag, version) Warning("RELEASE Ingress Nginx TAG %s and new version %s do not match", tag, releaseNotes.Version)
BumpNginx(fmt.Sprintf("v%s", version)) BumpNginx(fmt.Sprintf("v%s", releaseNotes.Version))
} }
//update git controller tag controller-v$version //update git controller tag controller-v$version
NewControllerTag(version) NewControllerTag(releaseNotes.Version)
//make release notes //make release notes
releaseNotes, err := ControllerReleaseNotes(version) ControllerReleaseNotes(releaseNotes)
CheckIfError(err, "RELEASE Creating Release Notes for version %s", version) CheckIfError(err, "RELEASE Creating Release Notes for version %s", releaseNotes.Version)
Info("RELEASE Release Notes %s completed", releaseNotes.Version) Info("RELEASE Release Notes %s completed", releaseNotes.Version)
Debug("releaseNotes.ControllerImages[0].Name %s", releaseNotes.ControllerImages[0].Name) Debug("releaseNotes.ControllerImages[0].Name %s", releaseNotes.ControllerImages[0].Name)
Debug("releaseNotes.ControllerImages[1].Name %s", releaseNotes.ControllerImages[1].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 //Record the ingress-nginx controller digests
if releaseNotes.ControllerImages[0].Name == "ingress-nginx/controller" { if releaseNotes.ControllerImages[0].Name == "ingress-nginx/controller" {
Debug("RELEASE Updating Chart Value %s with %s", "controller.image.digest", releaseNotes.ControllerImages[0].Digest) 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() releaseNotes.PreviousHelmChartVersion = currentChartVersion()
//update helm chart app version //update helm chart app version
UpdateVersion(version) UpdateVersion(releaseNotes.Version, releaseNotes.HelmChartVersion)
releaseNotes.NewHelmChartVersion = currentChartVersion() releaseNotes.NewHelmChartVersion = currentChartVersion()
@ -194,18 +220,6 @@ func ControllerNewRelease(version string) {
releaseNotes.helmTemplate() 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 // the index.md doc needs the controller version updated

View file

@ -12,6 +12,7 @@ import (
// ReleaseNote - All the pieces of information/documents that get updated during a release // ReleaseNote - All the pieces of information/documents that get updated during a release
type ReleaseNote struct { type ReleaseNote struct {
Version string //released version Version string //released version
HelmChartVersion string //version to update helm chart
NewControllerVersion string //the new controller version being release NewControllerVersion string //the new controller version being release
PreviousControllerVersion string //the previous controller tag/release PreviousControllerVersion string //the previous controller tag/release
ControllerImages []ControllerImage //the full image digests ControllerImages []ControllerImage //the full image digests
@ -23,36 +24,33 @@ type ReleaseNote struct {
} }
// Generate Release Notes // Generate Release Notes
func ControllerReleaseNotes(newVersion string) (*ReleaseNote, error) { func ControllerReleaseNotes(releaseNotes *ReleaseNote) error {
var newReleaseNotes = ReleaseNote{}
newReleaseNotes.Version = newVersion
allControllerTags := getAllControllerTags() allControllerTags := getAllControllerTags()
//new version //new version
newReleaseNotes.NewControllerVersion = allControllerTags[0] releaseNotes.NewControllerVersion = allControllerTags[0]
newControllerVersion := fmt.Sprintf("controller-v%s", newVersion) newControllerVersion := fmt.Sprintf("controller-v%s", releaseNotes.Version)
//the newControllerVersion should match the latest tag //the newControllerVersion should match the latest tag
if newControllerVersion != allControllerTags[0] { 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 //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 releaseNotes.Updates = allUpdates
newReleaseNotes.DepUpdates = depUpdates releaseNotes.DepUpdates = depUpdates
newReleaseNotes.HelmUpdates = helmUpdates
// Get the latest controller image digests from k8s.io promoter // Get the latest controller image digests from k8s.io promoter
imagesYaml, err := downloadFile(IMAGES_YAML) imagesYaml, err := downloadFile(IMAGES_YAML)
if err != nil { if err != nil {
ErrorF("Could not download file %s : %s", IMAGES_YAML, err) ErrorF("Could not download file %s : %s", IMAGES_YAML, err)
return nil, err return err
} }
Debug("%s", imagesYaml) Debug("%s", imagesYaml)
@ -61,20 +59,20 @@ func ControllerReleaseNotes(newVersion string) (*ReleaseNote, error) {
err = yaml.Unmarshal([]byte(imagesYaml), &data) err = yaml.Unmarshal([]byte(imagesYaml), &data)
if err != nil { if err != nil {
ErrorF("Could not unmarshal images yaml %s", err) ErrorF("Could not unmarshal images yaml %s", err)
return nil, err return err
} }
//controller //controller
controllerDigest := findImageDigest(data, "controller", newVersion) controllerDigest := findImageDigest(data, "controller", releaseNotes.Version)
if len(controllerDigest) == 0 { if len(controllerDigest) == 0 {
ErrorF("Controller Digest could not be found") 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 { if len(controllerChrootDigest) == 0 {
ErrorF("Controller Chroot Digest could not be found") 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) Debug("Latest Controller Digest %v", controllerDigest)
@ -83,28 +81,28 @@ func ControllerReleaseNotes(newVersion string) (*ReleaseNote, error) {
Digest: controllerDigest, Digest: controllerDigest,
Registry: INGRESS_REGISTRY, Registry: INGRESS_REGISTRY,
Name: "ingress-nginx/controller", Name: "ingress-nginx/controller",
Tag: fmt.Sprintf("v%s", newReleaseNotes.Version), Tag: fmt.Sprintf("v%s", releaseNotes.Version),
} }
c2 := ControllerImage{ c2 := ControllerImage{
Digest: controllerChrootDigest, Digest: controllerChrootDigest,
Registry: INGRESS_REGISTRY, Registry: INGRESS_REGISTRY,
Name: "ingress-nginx/controller-chroot", 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) releaseNotes.ControllerImages = append(releaseNotes.ControllerImages, c1)
newReleaseNotes.ControllerImages = append(newReleaseNotes.ControllerImages, c2) releaseNotes.ControllerImages = append(releaseNotes.ControllerImages, c2)
Debug("New Release Controller Images %s %s", newReleaseNotes.ControllerImages[0].Digest, newReleaseNotes.ControllerImages[1].Digest) Debug("New Release Controller Images %s %s", releaseNotes.ControllerImages[0].Digest, releaseNotes.ControllerImages[1].Digest)
if DEBUG { if DEBUG {
newReleaseNotes.printRelease() releaseNotes.printRelease()
} }
//write it all out to the changelog file //write it all out to the changelog file
newReleaseNotes.template() releaseNotes.template()
return &newReleaseNotes, nil return nil
} }
func getCommitUpdates(newVersion string) ([]string, []string, []string) { func getCommitUpdates(newVersion string) ([]string, []string, []string) {