113 lines
4.0 KiB
Bash
Executable File
113 lines
4.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Copyright (c) 2024 The Jaeger Authors.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
# Prepares a pull request for the next release.
|
|
# Set environment variable DRY_RUN=true to skip committing the changes.
|
|
|
|
set -euf -o errexit -o pipefail
|
|
|
|
DRY_RUN=${DRY_RUN:-false}
|
|
config_file=hugo.yaml
|
|
|
|
print_usage() {
|
|
echo "Usage: $0 <version_v1> <version_v2>"
|
|
echo " Both versions must be in #.#.# format (major, minor, patch)"
|
|
exit 1
|
|
}
|
|
|
|
if [ "$#" -ne 2 ]; then
|
|
print_usage
|
|
fi
|
|
|
|
if [[ "$1" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
version_v1="$1"
|
|
else
|
|
echo "🔴 ERROR: Version $1 is not in a major.minor.patch format."
|
|
print_usage
|
|
fi
|
|
if [[ "$2" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
version_v2="$2"
|
|
else
|
|
echo "🔴 ERROR: Version $2 is not in a major.minor.patch format."
|
|
print_usage
|
|
fi
|
|
|
|
safe_checkout_main() {
|
|
# We need to be on a branch to be able to create commits,
|
|
# and we want that branch to be main, which has been checked before.
|
|
# But we also want to make sure that we build and release exactly the tagged version, so we verify that the remote
|
|
# branch is where our tag is.
|
|
local checkoutBranch=main
|
|
if [[ "$DRY_RUN" = "true" ]]; then
|
|
echo "Skipping branch validation"
|
|
return
|
|
fi
|
|
git remote -v
|
|
git checkout -B "${checkoutBranch}"
|
|
git fetch origin "${checkoutBranch}":origin/"${checkoutBranch}"
|
|
commit_local_main="$(git rev-parse ${checkoutBranch})"
|
|
commit_remote_main="$(git rev-parse origin/${checkoutBranch})"
|
|
if [ "$commit_local_main" != "$commit_remote_main" ]; then
|
|
echo "${checkoutBranch} on remote 'origin' has commits since the version under release, aborting"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
update_links() {
|
|
local versionMajorMinor=$1
|
|
local version=$2
|
|
local versionTag="v${version}"
|
|
find ./content/docs/${versionMajorMinor} -type f -exec sed -i "s|https://github.com/jaegertracing/jaeger/tree/main|https://github.com/jaegertracing/jaeger/tree/${versionTag}|g" {} \;
|
|
find ./content/docs/${versionMajorMinor} -type f -exec sed -i "s|https://github.com/jaegertracing/jaeger/blob/main|https://github.com/jaegertracing/jaeger/blob/${versionTag}|g" {} \;
|
|
}
|
|
|
|
gen_cli_docs_v1() {
|
|
local versionMajorMinor=$1
|
|
# we set this as a temp dir with write permissions to everyone to overcome #441
|
|
# we then set the permissions back to sane levels once we are done
|
|
cliDocsTempDir=$(mktemp -d -t cli-docs-XXXXXXXX)
|
|
mkdir -p ${cliDocsTempDir}/data/cli
|
|
cp -r ./data/cli/next-release/ ${cliDocsTempDir}/data/cli/${versionMajorMinor}
|
|
chmod -R a+w ${cliDocsTempDir}
|
|
python ./scripts/gen-cli-data.py ${versionMajorMinor} ${cliDocsTempDir}
|
|
rm -f ${cliDocsTempDir}/data/cli/${versionMajorMinor}/*_completion_*.yaml
|
|
mv ${cliDocsTempDir}/data/cli/${versionMajorMinor} ./data/cli/
|
|
}
|
|
|
|
set -x
|
|
safe_checkout_main
|
|
|
|
for version in "${version_v1}" "${version_v2}"; do
|
|
versionMajorMinor=$(echo "${version}" | sed 's/\.[[:digit:]]$//')
|
|
echo "Creating new documentation for ${version} (${versionMajorMinor})"
|
|
var_suffix=""
|
|
if [[ "${versionMajorMinor}" == 2* ]]; then
|
|
cp -r ./content/docs/next-release-v2/ ./content/docs/${versionMajorMinor}
|
|
var_suffix="V2"
|
|
else
|
|
cp -r ./content/docs/next-release/ ./content/docs/${versionMajorMinor}
|
|
gen_cli_docs_v1 ${versionMajorMinor}
|
|
fi
|
|
|
|
update_links "${versionMajorMinor}" "${version}"
|
|
|
|
versions=$(grep -E "versions${var_suffix} *:" "${config_file}")
|
|
if [[ "$versions" == *"$versionMajorMinor"* ]]; then
|
|
echo "🔴 ERROR: Version ${versionMajorMinor} is already included in the versions list."
|
|
exit 1
|
|
fi
|
|
|
|
sed -i -e "s/latest${var_suffix} *:.*$/latest${var_suffix}: \"${versionMajorMinor}\"/" "${config_file}"
|
|
sed -i -e "s/binariesLatest${var_suffix} *:.*$/binariesLatest${var_suffix}: \"${version}\"/" "${config_file}"
|
|
sed -i -e "s/versions${var_suffix} *: *\[/versions${var_suffix}: \[\"${versionMajorMinor}\"\,/" "${config_file}"
|
|
done
|
|
|
|
if [[ "$DRY_RUN" = "true" ]]; then
|
|
echo "Not committing changes because DRY_RUN=$DRY_RUN"
|
|
exit 0
|
|
fi
|
|
git add ${config_file} ./content/docs/ ./data/cli/
|
|
git commit -m "Release ${version_v2}/${version_v1}" -s
|