blob: c58799a07e0276443c783e2eb1a45448683fbeb4 [file]
#!/usr/bin/env bash
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you 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 -euo pipefail
# shellcheck source=testlib.sh
source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/testlib.sh"
tmp="$(mktemp -d)"
trap 'rm -rf "$tmp"' EXIT
tool_copy="${tmp}/release-tools"
cp -R "$TOOLS_ROOT" "$tool_copy"
mkdir -p "${tmp}/repo" "${tmp}/fake-bin"
cat > "${tool_copy}/release.env" <<EOF
ROOT="${tool_copy}"
REPO_DIR="${tmp}/repo"
VERSION="9.9.9"
TAG="\${VERSION}"
GIT_REMOTE="test-remote"
PKG_BASE="apache-doris-operator-\${VERSION}-src"
ARCHIVE_PREFIX="\${PKG_BASE}/"
DEV_SVN_BASE="https://dist.example.test/dev/doris/doris-operator"
DEV_SVN_DIR="\${DEV_SVN_BASE}/\${VERSION}"
RELEASE_SVN_BASE="https://dist.example.test/release/doris/doris-operator"
RELEASE_SVN_DIR="\${RELEASE_SVN_BASE}/\${VERSION}"
KEYS_URL="https://downloads.example.test/doris/KEYS"
DEV_KEYS_SVN_BASE="https://dist.example.test/dev/doris"
RELEASE_KEYS_SVN_BASE="https://dist.example.test/release/doris"
APACHE_ID="release-manager"
APACHE_EMAIL="release-manager@apache.org"
SIGNER_NAME="Release Manager"
SIGNING_KEY="0123456789ABCDEF0123456789ABCDEF01234567"
GITHUB_REPO="apache-test/doris-operator"
GITHUB_TAG_URL="https://github.example.test/apache/doris-operator/releases/tag/\${TAG}"
RELEASE_NOTES_URL="https://github.example.test/apache/doris-operator/releases/notes/\${TAG}"
VERIFY_GUIDE_URL="https://doris.example.test/release-verify"
DOWNLOAD_PAGE_URL="https://github.example.test/apache/doris-operator/releases/tag/\${TAG}"
DOCKER_IMAGE="apache/doris:operator-\${VERSION}"
DOCKER_IMAGE_URL="https://hub.example.test/r/apache/doris/tags?name=operator-\${VERSION}"
VOTE_TO="dev@example.test"
ANNOUNCE_TO="announce@example.test"
WORK_DIR="${tmp}/work"
EOF
export COMMAND_LOG="${tmp}/commands.log"
: > "$COMMAND_LOG"
cat > "${tmp}/fake-bin/gpg" <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
printf 'gpg %s\n' "$*" >> "$COMMAND_LOG"
if [[ " $* " == *" --with-colons "* ]]; then
printf 'sec:-:4096:1:TESTKEY:0:0:::::::scESC:::+:::23:\n'
printf 'fpr:::::::::0123456789ABCDEF0123456789ABCDEF01234567:\n'
fi
exit 0
EOF
chmod +x "${tmp}/fake-bin/gpg"
PATH="${tmp}/fake-bin:${PATH}" "${tool_copy}/03-vote-mail.sh" > "${tmp}/vote-output"
vote_body="${tmp}/work/vote-email.txt"
vote_eml="${tmp}/work/vote-email.eml"
assert_exists "$vote_body"
assert_exists "$vote_eml"
assert_file_contains "$vote_eml" "Subject: [VOTE] Release Apache Doris Operator 9.9.9"
assert_eq "Subject: [VOTE] Release Apache Doris Operator 9.9.9" "$(head -n 1 "$vote_body")"
assert_file_contains "$vote_body" "https://github.example.test/apache/doris-operator/releases/tag/9.9.9"
assert_file_contains "$vote_body" "https://dist.example.test/dev/doris/doris-operator/9.9.9/"
assert_file_contains "$vote_body" "0123456789ABCDEF0123456789ABCDEF01234567"
assert_file_contains "$vote_body" "release-manager@apache.org"
assert_file_contains "$vote_body" "The vote will remain open for at least 72 hours."
assert_file_contains "$vote_body" "[ ] +1 Approve the release"
assert_file_contains "${tmp}/vote-output" "Subject: [VOTE] Release Apache Doris Operator 9.9.9"
assert_file_contains "${tmp}/vote-output" "No email was sent."
: > "$COMMAND_LOG"
PATH="${tmp}/fake-bin:${PATH}" "${tool_copy}/04-release-complete.sh" --mail-only > "${tmp}/announce-output"
announce_body="${tmp}/work/announce-email.txt"
announce_eml="${tmp}/work/announce-email.eml"
assert_exists "$announce_body"
assert_exists "$announce_eml"
assert_file_contains "$announce_eml" "To: announce@example.test"
assert_file_contains "$announce_eml" "Subject: [ANNOUNCE] Apache Doris Operator 9.9.9 release"
assert_eq "Subject: [ANNOUNCE] Apache Doris Operator 9.9.9 release" "$(head -n 1 "$announce_body")"
assert_file_contains "${tmp}/announce-output" "Subject: [ANNOUNCE] Apache Doris Operator 9.9.9 release"
assert_file_contains "$announce_body" "automates the deployment and management"
assert_file_contains "$announce_body" "https://dist.example.test/release/doris/doris-operator/9.9.9/apache-doris-operator-9.9.9-src.tar.gz"
assert_file_contains "$announce_body" "Thank you to everyone"
assert_file_contains "${tmp}/announce-output" "mail-only mode: skipping tag, package, signing, SVN, and GitHub operations"
assert_not_exists "${tmp}/work/github-release-notes.md"
[[ ! -s "$COMMAND_LOG" ]] || fail "--mail-only invoked an external release command"
if PATH="${tmp}/fake-bin:${PATH}" "${tool_copy}/04-release-complete.sh" --unknown >/dev/null 2>&1; then
fail "04-release-complete.sh accepted an unknown argument"
fi
if PATH="${tmp}/fake-bin:${PATH}" "${tool_copy}/04-release-complete.sh" \
--mail-only --github-only >/dev/null 2>&1; then
fail "04-release-complete.sh accepted --mail-only together with --github-only"
fi
pass