mirror of https://github.com/linkerd/linkerd2.git
103 lines
2.6 KiB
Bash
Executable File
103 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -o errexit
|
|
set -o nounset
|
|
|
|
bindir=$( cd "${0%/*}" && pwd )
|
|
|
|
# Assert at least one and at most two arguments were passed.
|
|
if [[ $# -lt 1 || $# -gt 2 ]]; then
|
|
echo "Error: ${0##*/} accepts 1 or 2 arguments
|
|
Usage:
|
|
${0##*/} edge
|
|
${0##*/} stable x.x.x" >&2
|
|
exit 1
|
|
fi
|
|
|
|
release_channel="$1"
|
|
|
|
# Verify the release channel.
|
|
release_channel_regex="^(edge|stable)$"
|
|
if [[ ! $release_channel =~ $release_channel_regex ]]; then
|
|
echo 'Error: valid release channels: edge, stable
|
|
Usage:
|
|
bin/create-release-tag edge
|
|
bin/create-release-tag stable 2.4.8'
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$release_channel" = stable ]; then
|
|
if [ $# -ne 2 ]; then
|
|
echo 'Error: accepts 2 arguments
|
|
Usage:
|
|
bin/create-release-tag stable 2.4.8'
|
|
exit 1
|
|
fi
|
|
|
|
stable_tag=$2
|
|
|
|
# Verify the stable tag format.
|
|
stable_tag_regex="^([0-9]+)\.([0-9]+)\.([0-9]+)$"
|
|
if [[ ! $stable_tag =~ $stable_tag_regex ]]; then
|
|
echo 'Error: version reference incorrect
|
|
Usage:
|
|
bin/create-release-tag stable 2.4.8'
|
|
exit 1
|
|
fi
|
|
|
|
# Set the script global `release_tag` variable.
|
|
release_tag="stable-$stable_tag"
|
|
fi
|
|
|
|
if [ "$release_channel" = edge ]; then
|
|
if [ $# -ne 1 ]; then
|
|
echo 'Error: accepts 1 argument
|
|
Usage:
|
|
bin/create-release-tag edge'
|
|
exit 1
|
|
fi
|
|
|
|
# Some awks on Linux do no support quantifiers in regex, so this regex is
|
|
# explicit.
|
|
edge_tag_regex="(edge)-([0-9][0-9])\.([0-9]|[0-9][0-9])\.([0-9]+)"
|
|
url=https://run.linkerd.io/install-edge
|
|
|
|
# Get the current edge version.
|
|
current_edge=$("$bindir"/scurl $url | awk -v tag_format="$edge_tag_regex" '$0 ~ tag_format')
|
|
|
|
# Get the third and fourth groups of the regex; they are the month and
|
|
# month minor values for the current edge version.
|
|
current_mm=$(echo "$current_edge" | sed -n -E "s/.*$edge_tag_regex}$/\3/p")
|
|
current_xx=$(echo "$current_edge" | sed -n -E "s/.*$edge_tag_regex}$/\4/p")
|
|
|
|
yy=$(date +"%y")
|
|
|
|
# Strip leading zero
|
|
new_mm=$(date +"%-m")
|
|
|
|
# If this is a new month, `new_xx` should be 1; otherwise increment it.
|
|
if [ "$new_mm" != "$current_mm" ]; then
|
|
new_xx=1
|
|
else
|
|
new_xx=$((current_xx+1))
|
|
fi
|
|
|
|
# Set the script global `release_tag` variable.
|
|
release_tag="edge-$yy.$new_mm.$new_xx"
|
|
fi
|
|
|
|
bindir=$( cd "${BASH_SOURCE[0]%/*}" && pwd )
|
|
# shellcheck source=_release.sh
|
|
tmp=$(. "$bindir"/_release.sh; extract_release_notes)
|
|
|
|
# Create a signed tag with the commit message.
|
|
git tag -s -F "$tmp" "$release_tag"
|
|
|
|
# Success message
|
|
echo "$release_tag tag created and signed.
|
|
|
|
tag: $release_tag
|
|
|
|
To push tag, run:
|
|
git push origin $release_tag"
|