mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-12-24 22:10:23 +00:00
159 lines
4.7 KiB
Bash
159 lines
4.7 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
|
||
|
# Copyright The OpenTelemetry Authors
|
||
|
#
|
||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
# you may not use this file except in compliance with the License.
|
||
|
# You may obtain a copy of the License at
|
||
|
#
|
||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||
|
#
|
||
|
# Unless required by applicable law or agreed to in writing, software
|
||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
# See the License for the specific language governing permissions and
|
||
|
# limitations under the License.
|
||
|
|
||
|
#
|
||
|
# This script is used for
|
||
|
# a) creating a new tagged release of go.opentelemetry.io/contrib
|
||
|
# b) bumping the referenced version of go.opentelemetry.io/otel
|
||
|
#
|
||
|
# The options can be used together or individually.
|
||
|
#
|
||
|
set -e
|
||
|
|
||
|
declare CONTRIB_TAG
|
||
|
declare OTEL_TAG
|
||
|
|
||
|
help() {
|
||
|
printf "\n"
|
||
|
printf "Usage: %s [-o otel_tag] [-t tag]\n" "$0"
|
||
|
printf "\t-o Otel release tag. Update all go.mod to reference go.opentelemetry.io/otel <otel_tag>.\n"
|
||
|
printf "\t-t New Contrib unreleased tag. Update all go.mod files with this tag.\n"
|
||
|
exit 1 # Exit script after printing help
|
||
|
}
|
||
|
|
||
|
while getopts "t:o:" opt
|
||
|
do
|
||
|
case "$opt" in
|
||
|
t ) CONTRIB_TAG="$OPTARG" ;;
|
||
|
o ) OTEL_TAG="$OPTARG" ;;
|
||
|
? ) help ;; # Print help
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
declare -r SEMVER_REGEX="^v(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)(\\-[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*)?(\\+[0-9A-Za-z-]+(\\.[0-9A-Za-z-]+)*)?$"
|
||
|
|
||
|
validate_tag() {
|
||
|
local tag_=$1
|
||
|
if [[ "${tag_}" =~ ${SEMVER_REGEX} ]]; then
|
||
|
printf "%s is valid semver tag.\n" "${tag_}"
|
||
|
else
|
||
|
printf "%s is not a valid semver tag.\n" "${tag_}"
|
||
|
return 1
|
||
|
fi
|
||
|
}
|
||
|
|
||
|
# Print help in case parameters are empty
|
||
|
if [[ -z "$CONTRIB_TAG" && -z "$OTEL_TAG" ]]
|
||
|
then
|
||
|
printf "At least one of '-o' or '-t' must be specified.\n"
|
||
|
help
|
||
|
fi
|
||
|
|
||
|
|
||
|
## Validate tags first
|
||
|
if [ -n "${OTEL_TAG}" ]; then
|
||
|
validate_tag "${OTEL_TAG}" || exit $?
|
||
|
|
||
|
# check that OTEL_TAG is a currently released tag for go.opentelemetry.io/otel
|
||
|
TMPDIR=$(mktemp -d "/tmp/otel-contrib.XXXXXX") || exit 1
|
||
|
trap "rm -fr ${TMPDIR}" EXIT
|
||
|
(cd "${TMPDIR}" && go mod init tagtest)
|
||
|
# requires go 1.14 for support of '-modfile'
|
||
|
if ! go get -modfile="${TMPDIR}/go.mod" -d -v "go.opentelemetry.io/otel@${OTEL_TAG}"; then
|
||
|
printf "go.opentelemetry.io/otel %s does not exist. Please supply a valid tag\n" "${OTEL_TAG}"
|
||
|
exit 1
|
||
|
fi
|
||
|
fi
|
||
|
if [ -n "${CONTRIB_TAG}" ]; then
|
||
|
validate_tag "${CONTRIB_TAG}" || exit $?
|
||
|
TAG_FOUND=$(git tag --list "${CONTRIB_TAG}")
|
||
|
if [[ ${TAG_FOUND} = "${CONTRIB_TAG}" ]] ; then
|
||
|
printf "Tag %s already exists in this repo\n" "${CONTRIB_TAG}"
|
||
|
exit 1
|
||
|
fi
|
||
|
else
|
||
|
CONTRIB_TAG=${OTEL_TAG} # if contrib_tag not specified, but OTEL_TAG is, then set it to OTEL_TAG
|
||
|
fi
|
||
|
|
||
|
# Get version for contrib.go
|
||
|
OTEL_CONTRIB_VERSION=$(echo "${CONTRIB_TAG}" | egrep -o "${SEMVER_REGEX}")
|
||
|
# Strip leading v
|
||
|
OTEL_CONTRIB_VERSION="${OTEL_CONTRIB_VERSION#v}"
|
||
|
|
||
|
cd "$(dirname "$0")"
|
||
|
|
||
|
if ! git diff --quiet; then \
|
||
|
printf "Working tree is not clean, can't proceed\n"
|
||
|
git status
|
||
|
git diff
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Update contrib.go version definition
|
||
|
cp contrib.go contrib.go.bak
|
||
|
sed "s/\(return \"\)[0-9]*\.[0-9]*\.[0-9]*\"/\1${OTEL_CONTRIB_VERSION}\"/" ./contrib.go.bak > ./contrib.go
|
||
|
rm -f ./contrib.go.bak
|
||
|
|
||
|
declare -r BRANCH_NAME=pre_release_${CONTRIB_TAG}
|
||
|
|
||
|
patch_gomods() {
|
||
|
local pkg_=$1
|
||
|
local tag_=$2
|
||
|
# now do the same for all the directories underneath
|
||
|
PACKAGE_DIRS=$(find . -mindepth 2 -type f -name 'go.mod' -exec dirname {} \; | egrep -v 'tools' | sed 's|^\.\/||' | sort)
|
||
|
# quote any '.' characters in the pkg name
|
||
|
local quoted_pkg_=${pkg_//./\\.}
|
||
|
for dir in $PACKAGE_DIRS; do
|
||
|
cp "${dir}/go.mod" "${dir}/go.mod.bak"
|
||
|
sed "s|${quoted_pkg_}\([^ ]*\) v[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*[^0-9]*.*$|${pkg_}\1 ${tag_}|" "${dir}/go.mod.bak" >"${dir}/go.mod"
|
||
|
rm -f "${dir}/go.mod.bak"
|
||
|
done
|
||
|
}
|
||
|
|
||
|
# branch off from existing main
|
||
|
git checkout -b "${BRANCH_NAME}" main
|
||
|
|
||
|
# Update go.mods
|
||
|
if [ -n "${OTEL_TAG}" ]; then
|
||
|
# first update the top most module
|
||
|
go get "go.opentelemetry.io/otel@${OTEL_TAG}"
|
||
|
patch_gomods go.opentelemetry.io/otel "${OTEL_TAG}"
|
||
|
fi
|
||
|
|
||
|
if [ -n "${CONTRIB_TAG}" ]; then
|
||
|
patch_gomods go.opentelemetry.io/contrib "${CONTRIB_TAG}"
|
||
|
fi
|
||
|
|
||
|
git diff
|
||
|
# Run lint to update go.sum
|
||
|
make lint
|
||
|
|
||
|
# Add changes and commit.
|
||
|
git add .
|
||
|
make ci
|
||
|
# Check whether registry links are up to date
|
||
|
make registry-links-check
|
||
|
|
||
|
declare COMMIT_MSG=""
|
||
|
if [ -n "${OTEL_TAG}" ]; then
|
||
|
COMMIT_MSG+="Bumping otel version to ${OTEL_TAG}"
|
||
|
fi
|
||
|
COMMIT_MSG+=". Prepare for releasing ${CONTRIB_TAG}"
|
||
|
git commit -m "${COMMIT_MSG}"
|
||
|
|
||
|
printf "Now run following to verify the changes.\ngit diff main\n"
|
||
|
printf "\nThen push the changes to upstream\n"
|