Auto-increment chart versions

Enable auto-versioning of helm charts to ensure the FluxCD helm
controller recognizes chart changes.

To guarantee the helm chart version is incremented when a helm chart
change is submitted, the following is implemented:
 - Provide a top level hierarchy for helm charts to differentiate
   between upstream and custom charts: helm-charts/{custom,upstream}
 - Arrange exiting helm chart in appropriate helm-charts location.
   Custom for helm charts built and maintained in this repository.
   Upstream for directly used and/or directly used plus patched.
 - stx-APP-helm now contains only manifests and final application
   packaging rules. No custom helm charts should be delivered here.
 - Establish a new package(s) for the custom or upstream helm chart(s).
 - Enforce a baseline version for all helm charts; eg 'APP-helm'.
    Maintain current rev counts for all new packages, where applicable.
- Update 'stx-APP-helm' to:
   - Update the build dependencies to include the new helm chart package
     and remove dependency on helm
   - Update the rules to remove building the dependency APP helm
     chart(s) and automatically update the chart versions in the
     FluxCD helmrelease.yaml files.

Test Plan:
PASS - Build all packages generating an application tarball verifying
       all versions on the charts and application make sense.
PASS - Introduce temporary chart changes and ensure that the versions
       increment as expected.
PASS - Validate basic application lifecycle operations:
       upload/apply/remove/delete.

Story: 2010929
Task: 49614

Change-Id: Ied7ff31b03b0b22d099649c91f712e6f9aafcd63
Signed-off-by: Joshua Reed <joshua.reed@windriver.com>
This commit is contained in:
Joshua Reed 2024-02-22 13:41:16 -07:00
parent 4a001833e6
commit b29dfcc66a
25 changed files with 136 additions and 33 deletions

View File

@ -1,2 +1,3 @@
helm-charts/custom/ptp-notification-helm
python3-k8sapp-ptp-notification python3-k8sapp-ptp-notification
stx-ptp-notification-helm stx-ptp-notification-helm

View File

@ -0,0 +1,5 @@
ptp-notification-helm (2.0-0) unstable; urgency=medium
* Initial release of chart starting a version 2.0-0.
-- Joshua Reed <joshua.reed@windriver.com> Fri, 16 Feb 2024 20:07:42 +0000

View File

@ -0,0 +1,15 @@
Source: ptp-notification-helm
Section: libs
Priority: optional
Maintainer: StarlingX Developers <starlingx-discuss@lists.starlingx.io>
Build-Depends: debhelper-compat (= 13),
helm,
Standards-Version: 4.5.1
Homepage: https://www.starlingx.io
Package: ptp-notification-helm
Section: libs
Architecture: any
Depends: ${misc:Depends}
Description: StarlingX Platform PTP Notification Helm Chart
This package contains a helm chart for PTP Notification Helm

View File

@ -0,0 +1,41 @@
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: ptp-notification-helm
Source: https://opendev.org/starlingx/ptp-notification-armada-app/
Files: *
Copyright: (c) 2019-2024 Wind River Systems, Inc
License: Apache-2
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
.
https://www.apache.org/licenses/LICENSE-2.0
.
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
.
On Debian-based systems the full text of the Apache version 2.0 license
can be found in `/usr/share/common-licenses/Apache-2.0'.
# If you want to use GPL v2 or later for the /debian/* files use
# the following clauses, or change it to suit. Delete these two lines
Files: debian/*
Copyright: 2024 Wind River Systems, Inc
License: Apache-2
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
.
https://www.apache.org/licenses/LICENSE-2.0
.
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
.
On Debian-based systems the full text of the Apache version 2.0 license
can be found in `/usr/share/common-licenses/Apache-2.0'.

View File

@ -0,0 +1,27 @@
#!/usr/bin/make -f
# export DH_VERBOSE = 1
export ROOT = debian/tmp
export APP_FOLDER = $(ROOT)/usr/lib/helm
export DEB_VERSION = $(shell dpkg-parsechangelog | egrep '^Version:' | cut -f 2 -d ' ')
export RELEASE = $(shell echo $(DEB_VERSION) | cut -f 1 -d '-')
export REVISION = $(shell echo $(DEB_VERSION) | cut -f 4 -d '.')
export CHART_VERSION = $(RELEASE).$(REVISION)
%:
dh $@
override_dh_auto_build:
# Stage the chart for building
mkdir -p build
mv Makefile ptp-notification build
# Build the chart
cd build && make CHART_VERSION=$(CHART_VERSION) ptp-notification
override_dh_auto_install:
install -d -m 755 $(APP_FOLDER)
install -p -D -m 755 build/ptp-notification*.tgz $(APP_FOLDER)
override_dh_auto_test:

View File

@ -0,0 +1 @@
3.0 (quilt)

View File

@ -0,0 +1,10 @@
---
debname: ptp-notification-helm
debver: 2.0-0
src_path: ptp-notification-helm
revision:
dist: $STX_DIST
stx_patch: 44
GITREVCOUNT:
SRC_DIR: ${MY_REPO}/stx/ptp-notification-armada-app/helm-charts/custom/ptp-notification-helm/ptp-notification-helm/ptp-notification
BASE_SRCREV: 4a001833e66fa73475f2d268970a56022d3dca96

View File

@ -1,7 +1,7 @@
# #
# Copyright 2017 The Openstack-Helm Authors. # Copyright 2017 The Openstack-Helm Authors.
# #
# Copyright (c) 2021 Wind River Systems, Inc. # Copyright (c) 2021,2024 Wind River Systems, Inc.
# #
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
# #
@ -9,8 +9,8 @@
SHELL := /bin/bash SHELL := /bin/bash
TASK := build TASK := build
EXCLUDES := helm-toolkit doc tests tools logs tmp EXCLUDES := doc tests tools logs tmp
CHARTS := helm-toolkit $(filter-out $(EXCLUDES), $(patsubst %/.,%,$(wildcard */.))) CHARTS := $(filter-out $(EXCLUDES), $(patsubst %/.,%,$(wildcard */.)))
.PHONY: $(EXCLUDES) $(CHARTS) .PHONY: $(EXCLUDES) $(CHARTS)
@ -25,18 +25,16 @@ $(CHARTS):
init-%: init-%:
if [ -f $*/Makefile ]; then make -C $*; fi if [ -f $*/Makefile ]; then make -C $*; fi
if [ -f $*/requirements.yaml ]; then helm dep up $*; fi
lint-%: init-% lint-%: init-%
if [ -d $* ]; then helm lint $*; fi if [ -d $* ]; then helm lint $*; fi
build-%: build-%:
if [ -d $* ]; then helm package $*; fi if [ -d $* ]; then helm package --version $(CHART_VERSION) $*; fi
clean: clean:
@echo "Clean all build artifacts" @echo "Clean all build artifacts"
rm -f */templates/_partials.tpl */templates/_globals.tpl rm -f */templates/_partials.tpl */templates/_globals.tpl
rm -f *tgz */charts/*tgz */requirements.lock
rm -rf */charts */tmpcharts rm -rf */charts */tmpcharts
%: %:

View File

@ -1,3 +1,9 @@
stx-ptp-notification-helm (1.0-2) unstable; urgency=medium
* Break out helm chart into own packages and apply auto versioning.
-- Joshua Reed <joshua.reed@windriver.com> Fri, 16 Feb 2024 20:07:42 +0000
stx-ptp-notification-helm (1.0-1) unstable; urgency=medium stx-ptp-notification-helm (1.0-1) unstable; urgency=medium
* Initial release. * Initial release.

View File

@ -3,9 +3,8 @@ Section: libs
Priority: optional Priority: optional
Maintainer: StarlingX Developers <starlingx-discuss@lists.starlingx.io> Maintainer: StarlingX Developers <starlingx-discuss@lists.starlingx.io>
Build-Depends: debhelper-compat (= 13), Build-Depends: debhelper-compat (= 13),
chartmuseum,
helm, helm,
procps, ptp-notification-helm,
python3-k8sapp-ptp-notification, python3-k8sapp-ptp-notification,
python3-k8sapp-ptp-notification-wheels, python3-k8sapp-ptp-notification-wheels,
build-info build-info

View File

@ -10,7 +10,7 @@ export REVISION = $(shell echo $(DEB_VERSION) | cut -f 4 -d '.')
export APP_NAME = ptp-notification export APP_NAME = ptp-notification
export APP_VERSION = $(RELEASE)-$(REVISION) export APP_VERSION = $(RELEASE)-$(REVISION)
export APP_TARBALL_FLUXCD = $(APP_NAME)-$(APP_VERSION).tgz export APP_TARBALL = $(APP_NAME)-$(APP_VERSION).tgz
export HELM_FOLDER = /usr/lib/helm export HELM_FOLDER = /usr/lib/helm
export HELM_REPO = stx-platform export HELM_REPO = stx-platform
export STAGING = staging export STAGING = staging
@ -19,23 +19,24 @@ export STAGING = staging
dh $@ dh $@
override_dh_auto_build: override_dh_auto_build:
# Host a server for the helm charts.
chartmuseum --debug --port=8879 --context-path='/charts' --storage="local" \
--storage-local-rootdir="." &
sleep 2
helm repo add local http://localhost:8879/charts
# Create the TGZ file.
cd helm-charts && make ptp-notification
# Terminate the helm chart server.
pkill chartmuseum
# Setup the staging directory. # Setup the staging directory.
mkdir -p $(STAGING) mkdir -p $(STAGING)
cp files/metadata.yaml $(STAGING) cp files/metadata.yaml $(STAGING)
cp -Rv fluxcd-manifests $(STAGING)
mkdir -p $(STAGING)/charts mkdir -p $(STAGING)/charts
cp helm-charts/*.tgz $(STAGING)/charts cp /usr/lib/helm/*.tgz $(STAGING)/charts
# Adjust the helmrelease yamls based on the chart versions
for c in $(STAGING)/charts/*; do \
chart=$$(basename $$c .tgz); \
chart_name=$${chart%-*}; \
chart_version=$${chart##*-}; \
echo "Found $$chart; name: $$chart_name, version: $$chart_version"; \
chart_manifest=$$(find $(STAGING)/fluxcd-manifests -name helmrelease.yaml -exec grep -q "chart:.*$$chart_name" {} \; -print); \
echo "Updating manifest: $$chart_manifest"; \
sed -i "s/REPLACE_HELM_CHART_VERSION/$$chart_version/g" $$chart_manifest; \
grep version $$chart_manifest; \
done
# Populate metadata. # Populate metadata.
sed -i 's/APP_REPLACE_NAME/$(APP_NAME)/g' $(STAGING)/metadata.yaml sed -i 's/APP_REPLACE_NAME/$(APP_NAME)/g' $(STAGING)/metadata.yaml
@ -46,20 +47,18 @@ override_dh_auto_build:
mkdir -p $(STAGING)/plugins mkdir -p $(STAGING)/plugins
cp /plugins/*.whl $(STAGING)/plugins cp /plugins/*.whl $(STAGING)/plugins
# Prepare staging for fluxcd package # Create the app package.
cp -R fluxcd-manifests $(STAGING)/
# Calculate checksum of all files in staging for the fluxcd app
cd $(STAGING) && find . -type f ! -name '*.md5' -print0 | xargs -0 md5sum > checksum.md5 cd $(STAGING) && find . -type f ! -name '*.md5' -print0 | xargs -0 md5sum > checksum.md5
# package fluxcd app tar cfz $(APP_TARBALL) -C $(STAGING)/ .
tar -zcf $(APP_TARBALL_FLUXCD) -C $(STAGING)/ .
# Cleanup staging. # Cleanup staging
rm -rf $(STAGING) rm -rf $(STAGING)
override_dh_auto_install: override_dh_auto_install:
# Install the app tar file. # Install the app tar file.
install -d -m 755 $(APP_FOLDER) install -d -m 755 $(APP_FOLDER)
install -p -D -m 755 $(APP_TARBALL_FLUXCD) $(APP_FOLDER) install -p -D -m 755 $(APP_TARBALL) $(APP_FOLDER)
override_dh_auto_test:
override_dh_usrlocal: override_dh_usrlocal:

View File

@ -1,6 +1,6 @@
--- ---
debname: stx-ptp-notification-helm debname: stx-ptp-notification-helm
debver: 1.0-1 debver: 1.0-2
src_path: stx-ptp-notification-helm src_path: stx-ptp-notification-helm
revision: revision:
dist: $STX_DIST dist: $STX_DIST

View File

@ -14,7 +14,7 @@ spec:
chart: chart:
spec: spec:
chart: ptp-notification chart: ptp-notification
version: 2.0.0 version: REPLACE_HELM_CHART_VERSION
sourceRef: sourceRef:
kind: HelmRepository kind: HelmRepository
name: stx-platform name: stx-platform