diff --git a/scripts/release b/scripts/release index 0baf0c3b2..8c83d6ff5 100755 --- a/scripts/release +++ b/scripts/release @@ -119,6 +119,20 @@ main() { git tag --local-user "${KEYID}" --sign "${RELEASE_VERSION}" --message "${RELEASE_VERSION}" fi + # Verify the latest commit has the version tag + local tag="$(git describe --exact-match HEAD)" + if [ "${tag}" != "${RELEASE_VERSION}" ]; then + echo "Error: Expected HEAD to be tagged with ${RELEASE_VERSION}, but 'git describe --exact-match HEAD' reported: ${tag}" + exit 1 + fi + + # Verify the version tag is on the right branch + local branch=$(git branch --contains "${RELEASE_VERSION}") + if [ "${branch}" != "release-${MINOR_VERSION}" ]; then + echo "Error: Git tag ${RELEASE_VERSION} should be on branch release-${MINOR_VERSION} but is on ${branch}" + exit 1 + fi + # Push the tag change if it's not already been pushed. read -p "Push etcd ${RELEASE_VERSION} tag [y/N]? " -r confirm [[ "${confirm,,}" == "y" ]] || exit 1 @@ -199,6 +213,28 @@ main() { gsutil -m acl ch -u allUsers:R -r gs://artifacts.etcd-development.appspot.com fi + ### Release validation + mkdir -p downloads + + # Check image versions + for IMAGE in "quay.io/coreos/etcd:${RELEASE_VERSION}" "gcr.io/etcd-development/etcd:${RELEASE_VERSION}"; do + local image_version=$(docker run --rm "${IMAGE}" etcd --version | grep "etcd Version" | awk -F: '{print $2}' | tr -d '[:space:]') + if [ "${image_version}" != "${VERSION}" ]; then + echo "Check failed: etcd --version output for ${IMAGE} is incorrect: ${image_version}" + exit 1 + fi + done + + # Check gsutil binary versions + local BINARY_TGZ="etcd-${RELEASE_VERSION}-$(go env GOOS)-amd64.tar.gz" + gsutil cp "gs://etcd/${RELEASE_VERSION}/${BINARY_TGZ}" downloads + tar -zx -C downloads -f "downloads/${BINARY_TGZ}" + local binary_version=$("./downloads/etcd-${RELEASE_VERSION}-$(go env GOOS)-amd64/etcd" --version | grep "etcd Version" | awk -F: '{print $2}' | tr -d '[:space:]') + if [ "${binary_version}" != "${VERSION}" ]; then + echo "Check failed: etcd --version output for ${BINARY_TGZ} from gs://etcd/${RELEASE_VERSION} is incorrect: ${binary_version}" + exit 1 + fi + # TODO: signing process echo "" echo "WARNING: The release has not been signed and published to github. This must be done manually."