Skip to content
Open
Show file tree
Hide file tree
Changes from all 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"

# 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 "\`\`\`"
}

# 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 }}"