adding helm release
Signed-off-by: James Strong <james.strong@chainguard.dev>
This commit is contained in:
parent
5b1c422208
commit
7ecd1bf3c1
3 changed files with 65 additions and 65 deletions
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in a new issue