1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- #!/bin/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.
- set -e
- help()
- {
- printf "\n"
- printf "Usage: $0 -t tag\n"
- printf "\t-t Unreleased tag. Update all go.mod with this tag.\n"
- exit 1 # Exit script after printing help
- }
- while getopts "t:" opt
- do
- case "$opt" in
- t ) TAG="$OPTARG" ;;
- ? ) help ;; # Print help
- esac
- done
- # Print help in case parameters are empty
- if [ -z "$TAG" ]
- then
- printf "Tag is missing\n";
- help
- fi
- # Validate semver
- 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-]+)*)?$"
- if [[ "${TAG}" =~ ${SEMVER_REGEX} ]]; then
- printf "${TAG} is valid semver tag.\n"
- else
- printf "${TAG} is not a valid semver tag.\n"
- exit -1
- fi
- TAG_FOUND=`git tag --list ${TAG}`
- if [[ ${TAG_FOUND} = ${TAG} ]] ; then
- printf "Tag ${TAG} already exists\n"
- exit -1
- fi
- # Get version for version.go
- OTEL_VERSION=$(echo "${TAG}" | grep -o '^v[0-9]\+\.[0-9]\+\.[0-9]\+')
- # Strip leading v
- OTEL_VERSION="${OTEL_VERSION#v}"
- cd $(dirname $0)
- if ! git diff --quiet; then \
- printf "Working tree is not clean, can't proceed with the release process\n"
- git status
- git diff
- exit 1
- fi
- # Update version.go
- cp ./version.go ./version.go.bak
- sed "s/\(return \"\)[0-9]*\.[0-9]*\.[0-9]*\"/\1${OTEL_VERSION}\"/" ./version.go.bak >./version.go
- rm -f ./version.go.bak
- # Update go.mod
- git checkout -b pre_release_${TAG} main
- PACKAGE_DIRS=$(find . -mindepth 2 -type f -name 'go.mod' -exec dirname {} \; | egrep -v 'tools' | sed 's/^\.\///' | sort)
- for dir in $PACKAGE_DIRS; do
- cp "${dir}/go.mod" "${dir}/go.mod.bak"
- sed "s/opentelemetry.io\/otel\([^ ]*\) v[0-9]*\.[0-9]*\.[0-9]/opentelemetry.io\/otel\1 ${TAG}/" "${dir}/go.mod.bak" >"${dir}/go.mod"
- rm -f "${dir}/go.mod.bak"
- done
- # Run lint to update go.sum
- make lint
- # Add changes and commit.
- git add .
- make ci
- git commit -m "Prepare for releasing $TAG"
- printf "Now run following to verify the changes.\ngit diff main\n"
- printf "\nThen push the changes to upstream\n"
|