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.
 - Use StarlingX debian git revcount packaging mechanisms to derive the
   semver PATCH version for custom helm charts. Chart
   version (MAJOR.MINOR.PATCH) is passed to 'helm package' command to
   force the version, where PATCH == 'git revcount'
 - Use StarlingX debian git revcount packaging mechanisms to derive the
   semver BUILD version for upstream helm charts which maintains the
   upstream chart version and adds a versioned BUILD extension.

     <version core> ::= <major> "." <minor> "." <patch>
     <valid semver> ::= <version core> "+" <build>

   Chart version (MAJOR.MINOR.PATCH+STX.REV) is passed to 'helm package'
   command to force the version, where REV == 'git revcount'
 - 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: 49587

Change-Id: I5da2d75e3da13e3419beccf591ff5b97e526ba4c
Signed-off-by: Joshua Reed <joshua.reed@windriver.com>
This commit is contained in:
Joshua Reed 2024-02-16 10:54:58 -07:00
parent a0292e8c7c
commit 588ed19fa9
24 changed files with 145 additions and 33 deletions

View File

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

View File

@ -0,0 +1,5 @@
snmp-helm (1.0-0) unstable; urgency=medium
* Initial release.
-- Joshua Reed <joshua.reed@windriver.com> Fri, 16 Feb 2024 20:07:42 +0000

View File

@ -0,0 +1,15 @@
Source: snmp-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: snmp-helm
Section: libs
Architecture: any
Depends: ${misc:Depends}
Description: StarlingX Platform Ceph pool auditor helm chart
This package contains a helm chart to audit the replication factor of Ceph pools.

View File

@ -0,0 +1,41 @@
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: snmp-helm
Source: https://opendev.org/starlingx/snmp-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 snmp build
# Build the chart
cd build && make CHART_VERSION=$(CHART_VERSION) snmp
override_dh_auto_install:
install -d -m 755 $(APP_FOLDER)
install -p -D -m 755 build/snmp*.tgz $(APP_FOLDER)
override_dh_auto_test:

View File

@ -0,0 +1 @@
usr/lib/helm/*

View File

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

View File

@ -0,0 +1,10 @@
---
debname: snmp-helm
debver: 1.0-0
src_path: snmp-helm
revision:
dist: $STX_DIST
GITREVCOUNT:
stx_patch: 1
SRC_DIR: ${MY_REPO}/stx/snmp-armada-app/helm-charts/custom/snmp-helm/snmp-helm/snmp
BASE_SRCREV: a0292e8c7c68ae9bc3f5cb19e611777b6126d944

View File

@ -1,3 +1,10 @@
stx-snmp-helm (1.0-2) unstable; urgency=medium
* Split helm chart into separate package and apply auto versioning.
-- Joshua Reed <joshua.reed@windriver.com> Fri, 16 Feb 2024 20:07:42 +0000
stx-snmp-helm (1.0-1) unstable; urgency=medium
* Initial release.

View File

@ -4,6 +4,7 @@ Priority: optional
Maintainer: StarlingX Developers <starlingx-discuss@lists.starlingx.io>
Build-Depends: debhelper-compat (= 13),
helm,
snmp-helm,
python3-k8sapp-snmp,
python3-k8sapp-snmp-wheels,
build-info

View File

@ -3,7 +3,7 @@ Upstream-Name: stx-snmp-helm
Source: https://opendev.org/starlingx/snmp-armada-app/
Files: *
Copyright: (c) 2013-2021 Wind River Systems, Inc
Copyright: (c) 2013-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.
@ -23,7 +23,7 @@ License: Apache-2
# 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: 2021 Wind River Systems, Inc
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.

View File

@ -10,52 +10,55 @@ export REVISION = $(shell echo $(DEB_VERSION) | cut -f 4 -d '.')
export APP_NAME = snmp
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_REPO = stx-platform
export STAGING_FLUXCD = staging-fluxcd
export STAGING = staging
%:
dh $@
override_dh_auto_build:
# Setup the staging directory.
mkdir -p $(STAGING)
cp files/metadata.yaml $(STAGING)
cp -Rv fluxcd-manifests $(STAGING)
mkdir -p $(STAGING)/charts
cp /usr/lib/helm/*.tgz $(STAGING)/charts
############
# COMMON #
############
# Create the TGZ file.
cd helm-charts && make
############
# FLUXCD #
############
# Setup the staging directory for fluxcd package.
mkdir -p $(STAGING_FLUXCD)
cp files/metadata.yaml $(STAGING_FLUXCD)
cp -R fluxcd-manifests $(STAGING_FLUXCD)
mkdir -p $(STAGING_FLUXCD)/charts
cp helm-charts/*.tgz $(STAGING_FLUXCD)/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.
cd $(STAGING_FLUXCD)
sed -i 's/APP_REPLACE_NAME/$(APP_NAME)/g' $(STAGING_FLUXCD)/metadata.yaml
sed -i 's/APP_REPLACE_VERSION/$(APP_VERSION)/g' $(STAGING_FLUXCD)/metadata.yaml
sed -i 's/HELM_REPLACE_REPO/$(HELM_REPO)/g' $(STAGING_FLUXCD)/metadata.yaml
sed -i 's/APP_REPLACE_NAME/$(APP_NAME)/g' $(STAGING)/metadata.yaml
sed -i 's/APP_REPLACE_VERSION/$(APP_VERSION)/g' $(STAGING)/metadata.yaml
sed -i 's/HELM_REPLACE_REPO/$(HELM_REPO)/g' $(STAGING)/metadata.yaml
# Copy the plugins: installed in the buildroot
mkdir -p $(STAGING_FLUXCD)/plugins
cp /plugins/*.whl $(STAGING_FLUXCD)/plugins
mkdir -p $(STAGING)/plugins
cp /plugins/*.whl $(STAGING)/plugins
# Create the app package.
cd $(STAGING_FLUXCD) && find . -type f ! -name '*.md5' -print0 | xargs -0 md5sum > checksum.md5
tar cfz $(APP_TARBALL_FLUXCD) -C $(STAGING_FLUXCD)/ .
cd $(STAGING) && find . -type f ! -name '*.md5' -print0 | xargs -0 md5sum > checksum.md5
tar cfz $(APP_TARBALL) -C $(STAGING)/ .
# Cleanup staging.
rm -rf $(STAGING_FLUXCD)
# Cleanup staging
rm -rf $(STAGING)
override_dh_auto_install:
# Install the app tar file.
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:

View File

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

View File

@ -15,7 +15,7 @@ spec:
chart:
spec:
chart: snmp
version: 1.0.0
version: REPLACE_HELM_CHART_VERSION
sourceRef:
kind: HelmRepository
name: stx-platform