The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/scripts/releasefinder.sh

112 lines
4.0 KiB

#!/bin/bash
# This script finds which Grafana releases include a specific commit.
# It checks both release branches and tags to determine:
# 1. Which previous releases include the commit
# 2. Which upcoming releases will include the commit
# 3. The first release that included the commit
#
# Usage: ./scripts/releasefinder.sh <commit-hash>
# The commit hash can be either:
# - Full hash (e.g., 1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t)
# - Short hash (e.g., 1a2b3c4d)
#
# Example: ./scripts/releasefinder.sh a1b2c3d4e5f6
#
# Note: This script requires a full repository clone with all branches and tags.
# It will not work correctly with shallow clones (--depth) or single-branch clones.
#
# If you get a "Permission denied" error, make the script executable with:
# chmod +x scripts/releasefinder.sh
# Check if script is executable
if [ ! -x "$0" ]; then
echo "Error: This script is not executable."
echo "To fix this, run: chmod +x $0"
echo "Then try running the script again."
exit 1
fi
# Check if a commit hash was provided
if [ $# -ne 1 ]; then
echo "Usage: $0 <commit-hash>"
echo "The commit hash can be either:"
echo " - Full hash (e.g., 1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t)"
echo " - Short hash (e.g., 1a2b3c4d)"
echo "Example: $0 a1b2c3d4e5f6"
exit 1
fi
COMMIT_HASH=$1
# Validate that the commit exists
if ! git cat-file -t "$COMMIT_HASH" >/dev/null 2>&1; then
echo "Error: Commit $COMMIT_HASH not found in repository"
echo "Make sure you've provided a valid commit hash (full or short)"
exit 1
fi
echo "Fetching latest remote information..."
git fetch --all --tags --prune 2>/dev/null
echo "Finding releases containing commit: $COMMIT_HASH"
echo "============================================="
echo
# Get all commit details in one call for better performance
commit_info=$(git log -1 --format="%an <%ae>%n%ad%n%B" --date=iso "$COMMIT_HASH")
author=$(echo "$commit_info" | sed -n '1p')
date=$(echo "$commit_info" | sed -n '2p')
commit_message=$(echo "$commit_info" | sed -n '3,$p')
echo "Commit details:"
echo " Author: $author"
echo " Date: $date"
# Extract PR number and title
PR_NUMBER=$(echo "$commit_message" | grep -o '#[0-9]\+' | head -n1 | tr -d '#')
if [ -n "$PR_NUMBER" ]; then
PR_TITLE=$(echo "$commit_message" | head -n1)
echo " PR: #$PR_NUMBER - $PR_TITLE"
echo " Link: https://github.com/grafana/grafana/pull/$PR_NUMBER"
fi
echo
# Find release branches and tags containing the commit
release_branches=$(git branch -r --contains "$COMMIT_HASH" 2>/dev/null | grep -E 'origin/release-[0-9]+\.[0-9]+\.[0-9]+(\+security-[0-9]{2})?$' | sed 's/.*origin\///')
release_tags=$(git tag --contains "$COMMIT_HASH" 2>/dev/null | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+(\+security-[0-9]{2})?$' | sort -V)
# Get all existing tags for upcoming release filtering
all_tags=$(git tag 2>/dev/null | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+(\+security-[0-9]{2})?$')
# Display previous releases
if [ -n "$release_tags" ]; then
echo "This commit has been included in these PREVIOUS on-prem releases:"
first_release=$(echo "$release_tags" | head -1)
while read -r tag; do
if [ "$tag" = "$first_release" ]; then
echo " - $tag (first release)"
else
echo " - $tag"
fi
done <<< "$release_tags"
echo
echo "Note: This code may have been backported to previous release branches. Please check the original PR for backport information."
echo
fi
# Display upcoming releases
if [ -n "$release_branches" ]; then
echo "This commit will be included in these UPCOMING on-prem releases:"
while read -r branch; do
tag_version="v${branch#release-}"
# Only show branches that don't have a corresponding tag yet
if ! echo "$all_tags" | grep -q "^$tag_version$"; then
echo " - $tag_version"
fi
done <<< "$release_branches" | sort -V
else
echo "This commit is not yet included in any release branches."
echo "The corresponding release branch has likely not been created yet."
fi
echo