diff --git a/addons/processors/iceberg-processor/deploy/helm/iceberg-processor/Chart.yaml b/addons/processors/iceberg-processor/deploy/helm/iceberg-processor/Chart.yaml index 9f30c3f..1fec61a 100644 --- a/addons/processors/iceberg-processor/deploy/helm/iceberg-processor/Chart.yaml +++ b/addons/processors/iceberg-processor/deploy/helm/iceberg-processor/Chart.yaml @@ -17,5 +17,5 @@ apiVersion: v2 name: iceberg-processor description: Storage-native Iceberg processor for Kafscale segments type: application -version: 0.1.0 -appVersion: 0.1.0 +version: 0.1.2 +appVersion: "v1.4.2" diff --git a/addons/processors/iceberg-processor/go.mod b/addons/processors/iceberg-processor/go.mod index eed8b41..cacc588 100644 --- a/addons/processors/iceberg-processor/go.mod +++ b/addons/processors/iceberg-processor/go.mod @@ -8,7 +8,7 @@ require ( github.com/aws/aws-sdk-go-v2 v1.41.0 github.com/aws/aws-sdk-go-v2/config v1.32.6 github.com/aws/aws-sdk-go-v2/service/s3 v1.94.0 - github.com/KafScale/platform v1.4.0 + github.com/KafScale/platform v1.4.2 github.com/prometheus/client_golang v1.23.2 github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 go.etcd.io/etcd/api/v3 v3.6.7 diff --git a/addons/processors/skeleton/deploy/helm/skeleton-processor/Chart.yaml b/addons/processors/skeleton/deploy/helm/skeleton-processor/Chart.yaml index 814b13e..e323d02 100644 --- a/addons/processors/skeleton/deploy/helm/skeleton-processor/Chart.yaml +++ b/addons/processors/skeleton/deploy/helm/skeleton-processor/Chart.yaml @@ -17,5 +17,5 @@ apiVersion: v2 name: skeleton-processor description: Storage-native processor skeleton for Kafscale segments type: application -version: 0.1.0 -appVersion: 0.1.0 +version: 0.1.2 +appVersion: "v1.4.2" diff --git a/addons/processors/sql-processor/deploy/helm/sql-processor/Chart.yaml b/addons/processors/sql-processor/deploy/helm/sql-processor/Chart.yaml index ce897cc..ffdf440 100644 --- a/addons/processors/sql-processor/deploy/helm/sql-processor/Chart.yaml +++ b/addons/processors/sql-processor/deploy/helm/sql-processor/Chart.yaml @@ -17,5 +17,5 @@ apiVersion: v2 name: sql-processor description: SQL processor for querying Kafscale segments in S3 type: application -version: 0.1.0 -appVersion: 0.1.0 +version: 0.1.2 +appVersion: "v1.4.2" diff --git a/deploy/helm/kafscale/Chart.yaml b/deploy/helm/kafscale/Chart.yaml index bd3a5e8..4f955a2 100644 --- a/deploy/helm/kafscale/Chart.yaml +++ b/deploy/helm/kafscale/Chart.yaml @@ -19,5 +19,5 @@ description: Helm chart for the Kafscale operator and console home: https://github.com/KafScale/platform icon: https://raw.githubusercontent.com/KafScale/platform/main/docs/assets/icon.png type: application -version: 0.3.0 -appVersion: "v1.4.0" +version: 0.3.2 +appVersion: "v1.4.2" diff --git a/docs/development.md b/docs/development.md index 0cf79f1..54a3c2b 100644 --- a/docs/development.md +++ b/docs/development.md @@ -110,9 +110,11 @@ We publish container images and GitHub releases from tags. This keeps release ar - Tag push triggers the Docker workflow to build and push `kafscale-broker`, `kafscale-operator`, `kafscale-console`, and `kafscale-sql-processor` images to GHCR. - The workflow also creates a GitHub release with autogenerated notes. - The Helm chart defaults image tags to `appVersion`, so bump `deploy/helm/kafscale/Chart.yaml` `version` and `appVersion` for each release. Users can override `operator.image.tag`, `console.image.tag`, and `operator.brokerImage.tag` to pin a specific version, or set `operator.image.useLatest=true`, `console.image.useLatest=true`, and `operator.brokerImage.useLatest=true` for dev/latest installs. +- Also bump addon processor charts (`addons/processors/*/deploy/helm/*/Chart.yaml`) `version` and `appVersion` so release tags stay aligned across Helm deployments. - Update all release references to the new version, including addon module dependencies and docs that pin version strings. - Release notes live in `docs/releases/` and should include a human-readable summary plus a "Security fixes" section listing any known CVEs addressed (or "None"). - Optional: create a prep branch named `prep-vX.Y.Z` to stage release notes and Helm chart bumps before tagging. +- `scripts/release.sh -tag vX.Y.Z` creates a `prep-vX.Y.Z` branch, bumps Helm/app versions (including addons), generates release notes from history, commits, and pushes the branch for review. ## Testing Expectations diff --git a/docs/releases/v1.4.2.md b/docs/releases/v1.4.2.md new file mode 100644 index 0000000..e41878d --- /dev/null +++ b/docs/releases/v1.4.2.md @@ -0,0 +1,42 @@ + + +# v1.4.2 + +Release date: 2026-01-17 + +## Highlights + +- Introduced Kafsql as a first-class SQL processor with Helm charts, proxy mode, guardrails, and caching. +- Expanded Kafsql query capabilities with manifest/time index tooling, backfill support, and broader protocol coverage. +- Added SQL processor documentation plus an end-to-end demo flow and Docker build wiring. + +## Bug fixes + +- Fixed coordinator broker identity mismatches. +- Corrected int32 conversion for S3 partitions. +- Bounded SQL partition parsing for CodeQL findings. + +## Maintenance + +- Bumped AWS SDK dependencies and GitHub Actions tooling (CodeQL, setup-go). +- Refreshed organization/module references across tooling and docs. +- Bumped Helm chart versions for the SQL, Iceberg, and skeleton processors to align with v1.4.2. + +## Security fixes + +- No known runtime vulnerabilities were fixed in this release. diff --git a/scripts/release.sh b/scripts/release.sh new file mode 100755 index 0000000..e57ac26 --- /dev/null +++ b/scripts/release.sh @@ -0,0 +1,155 @@ +#!/usr/bin/env bash +# Copyright 2026 Alexander Alten (novatechflow), NovaTechflow (novatechflow.com). +# This project is supported and financed by Scalytics, Inc. (www.scalytics.io). +# +# 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 +# +# http://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. +set -euo pipefail + +usage() { + cat <<'EOF' +Usage: scripts/release.sh -tag vX.Y.Z + +Prepares a release branch, bumps versions, generates release notes from git +history, commits, and pushes the branch. +EOF +} + +tag="" +while [[ $# -gt 0 ]]; do + case "$1" in + -tag) + tag="${2:-}" + shift 2 + ;; + -h|--help) + usage + exit 0 + ;; + *) + echo "Unknown argument: $1" >&2 + usage + exit 1 + ;; + esac +done + +if [[ -z "$tag" ]]; then + echo "Missing -tag vX.Y.Z" >&2 + usage + exit 1 +fi + +if [[ ! "$tag" =~ ^v([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then + echo "Tag must match vX.Y.Z, got: $tag" >&2 + exit 1 +fi + +major="${BASH_REMATCH[1]}" +minor="${BASH_REMATCH[2]}" +patch="${BASH_REMATCH[3]}" + +if [[ "$minor" -eq 0 ]]; then + echo "Minor version must be >= 1 to map chart version (0.(minor-1).patch)." >&2 + exit 1 +fi + +chart_version="0.$((minor - 1)).$patch" +addon_chart_version="0.1.$patch" +branch="prep-${tag}" + +if [[ -n "$(git status --porcelain)" ]]; then + echo "Working tree is dirty; commit or stash changes before running." >&2 + exit 1 +fi + +git checkout -b "$branch" + +sed -i '' -E "s/^version: .*/version: ${chart_version}/" deploy/helm/kafscale/Chart.yaml +sed -i '' -E "s/^appVersion: .*/appVersion: \"${tag}\"/" deploy/helm/kafscale/Chart.yaml + +while IFS= read -r chart; do + sed -i '' -E "s/^version: .*/version: ${addon_chart_version}/" "$chart" + sed -i '' -E "s/^appVersion: .*/appVersion: \"${tag}\"/" "$chart" +done < <(rg --files -g 'addons/processors/*/deploy/helm/*/Chart.yaml') + +while IFS= read -r modfile; do + sed -i '' -E "s|(github.com/KafScale/platform) v[0-9]+\.[0-9]+\.[0-9]+|\\1 ${tag}|g" "$modfile" +done < <(rg --files -g 'addons/processors/**/go.mod') + +release_file="docs/releases/${tag}.md" +if [[ -e "$release_file" ]]; then + echo "Release notes already exist: $release_file" >&2 + exit 1 +fi + +prev_tag="$(git tag -l 'v*' | sort -V | tail -n 1)" +log_range="HEAD" +if [[ -n "$prev_tag" ]]; then + log_range="${prev_tag}..HEAD" +fi + +release_date="$(date +%F)" +commit_notes="$(git log --pretty=format:'- %s (%h)' ${log_range})" + +cat > "$release_file" < + +# ${tag} + +Release date: ${release_date} + +## Highlights + +- TODO: Add high-level highlights for this release. + +## Changes + +${commit_notes} + +## Bug fixes + +- TODO: Summarize user-facing fixes. + +## Maintenance + +- TODO: Summarize dependency/tooling updates. + +## Security fixes + +- No known runtime vulnerabilities were fixed in this release. +EOF + +git add deploy/helm/kafscale/Chart.yaml \ + addons/processors/iceberg-processor/deploy/helm/iceberg-processor/Chart.yaml \ + addons/processors/sql-processor/deploy/helm/sql-processor/Chart.yaml \ + addons/processors/skeleton/deploy/helm/skeleton-processor/Chart.yaml \ + addons/processors/iceberg-processor/go.mod \ + "$release_file" + +git commit -m "release: prep ${tag}" +git push -u origin "$branch"