From b1a0c92c57b12a433ed53adecd5c18ce59eef4ea Mon Sep 17 00:00:00 2001 From: Venkata Shreyas Kabekkodu Date: Thu, 9 Oct 2025 18:26:36 +0530 Subject: [PATCH 1/3] feat: enhance release notes only for appVersion changes and move step to end - Add logic to detect appVersion changes and only enhance when components are upgraded - Move enhancement step to end of workflow to prevent disrupting releases if it fails - Update section header from 'Upstream' to 'OpenTelemetry Release Notes' for clarity - Remove code duplication and verbose text in release notes generation - Add CR_GENERATE_RELEASE_NOTES environment variable back to workflow - Fix trailing whitespace issues Addresses reviewer feedback and ensures enhancement only runs when meaningful to users. Signed-off-by: Venkata Shreyas Kabekkodu --- .github/scripts/enhance-release-notes.sh | 81 +++++++++++++++++++++ .github/scripts/generate-release-notes.sh | 88 +++++++++++++++++++++++ .github/workflows/release.yaml | 5 ++ 3 files changed, 174 insertions(+) create mode 100755 .github/scripts/enhance-release-notes.sh create mode 100755 .github/scripts/generate-release-notes.sh diff --git a/.github/scripts/enhance-release-notes.sh b/.github/scripts/enhance-release-notes.sh new file mode 100755 index 0000000000..b09f940f34 --- /dev/null +++ b/.github/scripts/enhance-release-notes.sh @@ -0,0 +1,81 @@ +#!/bin/bash +# Script to enhance release notes with upstream OpenTelemetry project links + +set -euo pipefail + +# Function to update release notes for a chart +update_release_notes() { + local chart_name="$1" + local chart_version="$2" + local app_version="$3" + local release_tag="${chart_name}-${chart_version}" + + echo "Updating release notes for ${release_tag}" + + # Generate enhanced release notes + enhanced_notes=$(.github/scripts/generate-release-notes.sh "$chart_name" "$chart_version" "$app_version" "charts/$chart_name/") + + # Get the current release notes + current_notes=$(gh release view "$release_tag" --json body --jq '.body' 2>/dev/null || echo "") + + if [[ -z "$current_notes" ]]; then + echo "ERROR: No existing release notes found for ${release_tag}. This indicates a problem with the chart-releaser process." + echo "Expected chart-releaser to generate initial release notes, but none were found." + exit 1 + fi + + # Combine current notes with enhanced notes + combined_notes="$current_notes + +--- + +$enhanced_notes" + + # Update the release notes + gh release edit "$release_tag" --notes "$combined_notes" +} + +# Main function to enhance release notes for recent releases +enhance_release_notes() { + # Check each chart for recent releases + for chart_dir in charts/*/; do + if [ -f "${chart_dir}Chart.yaml" ]; then + chart_name=$(basename "$chart_dir") + chart_version=$(grep '^version:' "${chart_dir}Chart.yaml" | cut -d' ' -f2) + app_version=$(grep '^appVersion:' "${chart_dir}Chart.yaml" | cut -d' ' -f2) + release_tag="${chart_name}-${chart_version}" + + # Check if this release was just created (within the last 5 minutes) + if gh release view "$release_tag" >/dev/null 2>&1; then + release_date=$(gh release view "$release_tag" --json publishedAt --jq '.publishedAt') + release_timestamp=$(date -d "$release_date" +%s) + current_timestamp=$(date +%s) + time_diff=$((current_timestamp - release_timestamp)) + + # If release was created within the last 5 minutes (300 seconds), check if appVersion changed + if [[ $time_diff -lt 300 ]]; then + # Check if appVersion changed compared to the previous chart version + previous_chart_version=$(git tag -l "${chart_name}-*" --sort=-version:refname | grep -v "^${release_tag}$" | head -1) + + if [[ -n "$previous_chart_version" ]]; then + # Get the previous appVersion from git + previous_app_version=$(git show "${previous_chart_version}:charts/${chart_name}/Chart.yaml" 2>/dev/null | grep '^appVersion:' | cut -d' ' -f2 || echo "") + + if [[ "$app_version" != "$previous_app_version" && -n "$previous_app_version" ]]; then + echo "AppVersion changed from ${previous_app_version} to ${app_version} - enhancing release notes" + update_release_notes "$chart_name" "$chart_version" "$app_version" + else + echo "AppVersion unchanged (${app_version}) - skipping release notes enhancement for ${release_tag}" + fi + else + echo "No previous release found - enhancing release notes for initial release ${release_tag}" + update_release_notes "$chart_name" "$chart_version" "$app_version" + fi + fi + fi + fi + done +} + +# Execute main function +enhance_release_notes diff --git a/.github/scripts/generate-release-notes.sh b/.github/scripts/generate-release-notes.sh new file mode 100755 index 0000000000..864420ecb5 --- /dev/null +++ b/.github/scripts/generate-release-notes.sh @@ -0,0 +1,88 @@ +#!/bin/bash +# Script to generate release notes with links to upstream OpenTelemetry releases + +set -euo pipefail + +# Function to get OpenTelemetry Collector release notes URL +get_otel_collector_release_url() { + local version="$1" + echo "https://github.com/open-telemetry/opentelemetry-collector/releases/tag/v${version}" +} + +# Function to get OpenTelemetry Collector Contrib release notes URL +get_otel_collector_contrib_release_url() { + local version="$1" + echo "https://github.com/open-telemetry/opentelemetry-collector-contrib/releases/tag/v${version}" +} + +# Function to get OpenTelemetry Operator release notes URL +get_otel_operator_release_url() { + local version="$1" + echo "https://github.com/open-telemetry/opentelemetry-operator/releases/tag/v${version}" +} + +# Function to get OpenTelemetry Demo release notes URL +get_otel_demo_release_url() { + local version="$1" + echo "https://github.com/open-telemetry/opentelemetry-demo/releases/tag/v${version}" +} + +# Function to generate release notes for a specific chart +generate_release_notes() { + local chart_name="$1" + local chart_version="$2" + local app_version="$3" + local chart_path="$4" + + echo "# ${chart_name} ${chart_version}" + echo "" + echo "## What's Changed" + echo "" + echo "This release updates the ${chart_name} to version ${app_version}." + echo "" + + # Add links to release notes + echo "## OpenTelemetry Release Notes" + echo "" + case "$chart_name" in + "opentelemetry-collector") + echo "- [OpenTelemetry Collector v${app_version}]($(get_otel_collector_release_url "$app_version"))" + echo "- [OpenTelemetry Collector Contrib v${app_version}]($(get_otel_collector_contrib_release_url "$app_version"))" + ;; + "opentelemetry-operator") + echo "- [OpenTelemetry Operator v${app_version}]($(get_otel_operator_release_url "$app_version"))" + ;; + "opentelemetry-demo") + echo "- [OpenTelemetry Demo v${app_version}]($(get_otel_demo_release_url "$app_version"))" + ;; + "opentelemetry-target-allocator") + echo "- [OpenTelemetry Operator v${app_version}]($(get_otel_operator_release_url "$app_version")) (Target Allocator is part of the Operator project)" + ;; + *) + echo "See upstream OpenTelemetry project releases for details." + ;; + esac + echo "" + + echo "## Chart Information" + echo "" + echo "- **Chart Version**: ${chart_version}" + echo "- **App Version**: ${app_version}" + echo "- **Chart Path**: ${chart_path}" + echo "" + echo "## Installation" + echo "" + echo "\`\`\`bash" + echo "helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts" + echo "helm repo update" + echo "helm install my-${chart_name} open-telemetry/${chart_name} --version ${chart_version}" + echo "\`\`\`" +} + +# Main execution +if [ $# -ne 4 ]; then + echo "Usage: $0 " + exit 1 +fi + +generate_release_notes "$1" "$2" "$3" "$4" diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 11f5a87b18..8838970bea 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -63,3 +63,8 @@ jobs: fi helm push "${pkg}" "oci://ghcr.io/${GITHUB_REPOSITORY}" done + + - name: Enhance release notes with OpenTelemetry links + run: .github/scripts/enhance-release-notes.sh + env: + GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}" From a7ef418eeef3e950010f53869f363136e160ced7 Mon Sep 17 00:00:00 2001 From: Venkata Shreyas Kabekkodu Date: Thu, 9 Oct 2025 18:58:35 +0530 Subject: [PATCH 2/3] fix: add missing cr.yaml configuration file - Add chart-releaser configuration with automatic release notes generation - Restore missing config parameter in release workflow - Ensure chart-releaser can properly generate baseline release notes Required for the release notes enhancement feature to work correctly. Signed-off-by: Venkata Shreyas Kabekkodu --- .github/cr.yaml | 7 +++++++ .github/workflows/release.yaml | 1 + 2 files changed, 8 insertions(+) create mode 100644 .github/cr.yaml diff --git a/.github/cr.yaml b/.github/cr.yaml new file mode 100644 index 0000000000..01be4c615e --- /dev/null +++ b/.github/cr.yaml @@ -0,0 +1,7 @@ +# Configuration for chart-releaser +# Enable automatic generation of release notes +generate-release-notes: true + +# Repository configuration +owner: open-telemetry +git-repo: opentelemetry-helm-charts diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 8838970bea..f54b85340a 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -43,6 +43,7 @@ jobs: uses: helm/chart-releaser-action@cae68fefc6b5f367a0275617c9f83181ba54714f # v1.7.0 with: charts_dir: charts + config: .github/cr.yaml env: CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}" CR_GENERATE_RELEASE_NOTES: true From fb4921aaedcded5d03bdc01994f78fa02ab3d4d5 Mon Sep 17 00:00:00 2001 From: Venkata Shreyas Kabekkodu Date: Tue, 30 Dec 2025 10:56:55 +0530 Subject: [PATCH 3/3] refactor: remove installation instructions from release notes generation Signed-off-by: Venkata Shreyas Kabekkodu --- .github/scripts/generate-release-notes.sh | 8 -------- 1 file changed, 8 deletions(-) diff --git a/.github/scripts/generate-release-notes.sh b/.github/scripts/generate-release-notes.sh index 864420ecb5..432942c3ae 100755 --- a/.github/scripts/generate-release-notes.sh +++ b/.github/scripts/generate-release-notes.sh @@ -69,14 +69,6 @@ generate_release_notes() { echo "- **Chart Version**: ${chart_version}" echo "- **App Version**: ${app_version}" echo "- **Chart Path**: ${chart_path}" - echo "" - echo "## Installation" - echo "" - echo "\`\`\`bash" - echo "helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts" - echo "helm repo update" - echo "helm install my-${chart_name} open-telemetry/${chart_name} --version ${chart_version}" - echo "\`\`\`" } # Main execution