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"
|
||||
"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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue