Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/cr.yaml
Original file line number Diff line number Diff line change
@@ -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
81 changes: 81 additions & 0 deletions .github/scripts/enhance-release-notes.sh
Original file line number Diff line number Diff line change
@@ -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"
Comment thread
itsvshreyas marked this conversation as resolved.

# 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
88 changes: 88 additions & 0 deletions .github/scripts/generate-release-notes.sh
Original file line number Diff line number Diff line change
@@ -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 "\`\`\`"
Comment thread
dmitryax marked this conversation as resolved.
Outdated
}

# Main execution
if [ $# -ne 4 ]; then
echo "Usage: $0 <chart_name> <chart_version> <app_version> <chart_path>"
exit 1
fi

generate_release_notes "$1" "$2" "$3" "$4"
6 changes: 6 additions & 0 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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 }}"