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"
"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)

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
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

View file

@ -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) {