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/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..432942c3ae --- /dev/null +++ b/.github/scripts/generate-release-notes.sh @@ -0,0 +1,80 @@ +#!/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}" +} + +# 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..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 @@ -63,3 +64,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 }}"