mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #15443 from ArkaSaha30/automated-cherry-pick-of-#14860-upstream-release-3.5
[3.5] Automated cherry-pick of #14860: Trigger release in current branch for github workflow case
This commit is contained in:
commit
8b4549d534
2
.github/workflows/release.yaml
vendored
2
.github/workflows/release.yaml
vendored
@ -21,4 +21,4 @@ jobs:
|
||||
Name-Email: github-action@etcd.io
|
||||
Expire-Date: 0
|
||||
EOF
|
||||
DRY_RUN=true BRANCH=release-3.5 ./scripts/release --no-upload --no-docker-push 3.5.99
|
||||
DRY_RUN=true ./scripts/release --no-upload --no-docker-push --in-place 3.5.99
|
||||
|
@ -7,7 +7,6 @@ source ./scripts/test_lib.sh
|
||||
VER=$1
|
||||
REPOSITORY="${REPOSITORY:-git@github.com:etcd-io/etcd.git}"
|
||||
|
||||
|
||||
if [ -z "$1" ]; then
|
||||
echo "Usage: ${0} VERSION" >> /dev/stderr
|
||||
exit 255
|
||||
@ -25,9 +24,7 @@ function setup_env {
|
||||
|
||||
pushd "${proj}" >/dev/null
|
||||
run git fetch --all
|
||||
git_assert_branch_in_sync || exit 2
|
||||
run git checkout "${ver}"
|
||||
git_assert_branch_in_sync || exit 2
|
||||
popd >/dev/null
|
||||
}
|
||||
|
||||
|
@ -41,6 +41,7 @@ help() {
|
||||
echo " flags:"
|
||||
echo " --no-upload: skip gs://etcd binary artifact uploads."
|
||||
echo " --no-docker-push: skip docker image pushes."
|
||||
echo " --in-place: build binaries using current branch."
|
||||
echo ""
|
||||
echo "One can perform a (dry-run) test release from any (uncommitted) branch using:"
|
||||
echo " DRY_RUN=true REPOSITORY=\`pwd\` BRANCH='local-branch-name' ./scripts/release 3.5.0-foobar.2"
|
||||
@ -54,8 +55,15 @@ main() {
|
||||
fi
|
||||
RELEASE_VERSION="v${VERSION}"
|
||||
MINOR_VERSION=$(echo "${VERSION}" | cut -d. -f 1-2)
|
||||
BRANCH=${BRANCH:-"release-${MINOR_VERSION}"}
|
||||
REPOSITORY=${REPOSITORY:-"https://github.com/etcd-io/etcd.git"}
|
||||
|
||||
if [ "${IN_PLACE}" == 1 ]; then
|
||||
# Trigger release in current branch
|
||||
REPOSITORY=$(pwd)
|
||||
BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
||||
else
|
||||
REPOSITORY=${REPOSITORY:-"https://github.com/etcd-io/etcd.git"}
|
||||
BRANCH=${BRANCH:-"release-${MINOR_VERSION}"}
|
||||
fi
|
||||
|
||||
log_warning "DRY_RUN=${DRY_RUN}"
|
||||
log_callout "RELEASE_VERSION=${RELEASE_VERSION}"
|
||||
@ -78,19 +86,20 @@ main() {
|
||||
# Set up release directory.
|
||||
local reldir="/tmp/etcd-release-${VERSION}"
|
||||
log_callout "Preparing temporary directory: ${reldir}"
|
||||
if [ ! -d "${reldir}/etcd" ]; then
|
||||
if [ ! -d "${reldir}/etcd" ] && [ "${IN_PLACE}" == 0 ]; then
|
||||
mkdir -p "${reldir}"
|
||||
cd "${reldir}"
|
||||
run git clone "${REPOSITORY}" --branch "${BRANCH}"
|
||||
run cd "${reldir}/etcd" || exit 2
|
||||
run git checkout "${BRANCH}" || exit 2
|
||||
run git pull origin
|
||||
|
||||
git_assert_branch_in_sync || exit 2
|
||||
fi
|
||||
run cd "${reldir}/etcd" || exit 2
|
||||
|
||||
# mark local directory as root for test_lib scripts executions
|
||||
set_root_dir
|
||||
|
||||
run git checkout "${BRANCH}" || exit 2
|
||||
run git pull origin
|
||||
git_assert_branch_in_sync || exit 2
|
||||
|
||||
# If a release version tag already exists, use it.
|
||||
local remote_tag_exists
|
||||
remote_tag_exists=$(run git ls-remote origin "refs/tags/${RELEASE_VERSION}" | grep -c "${RELEASE_VERSION}" || true)
|
||||
@ -101,6 +110,7 @@ main() {
|
||||
fi
|
||||
|
||||
# Check go version.
|
||||
log_callout "Check go version"
|
||||
local go_version current_go_version
|
||||
go_version="go$(grep go-version .github/workflows/tests.yaml | awk '{print $2}' | tr -d '"')"
|
||||
current_go_version=$(go version | awk '{ print $3 }')
|
||||
@ -110,6 +120,7 @@ main() {
|
||||
fi
|
||||
|
||||
# If the release tag does not already exist remotely, create it.
|
||||
log_callout "Create tag if not present"
|
||||
if [ "${remote_tag_exists}" -eq 0 ]; then
|
||||
# Bump version/version.go to release version.
|
||||
local source_version
|
||||
@ -147,7 +158,7 @@ main() {
|
||||
fi
|
||||
|
||||
# Push the version change if it's not already been pushed.
|
||||
if [ "$DRY_RUN" != "true" ] && [ "$(git rev-list --count "origin/${BRANCH}..${BRANCH}")" -gt 0 ]; then
|
||||
if [ "${DRY_RUN}" != "true" ] && [ "$(git rev-list --count "origin/${BRANCH}..${BRANCH}")" -gt 0 ]; then
|
||||
read -p "Push version bump up to ${VERSION} to '$(git remote get-url origin)' [y/N]? " -r confirm
|
||||
[[ "${confirm,,}" == "y" ]] || exit 1
|
||||
maybe_run git push
|
||||
@ -161,14 +172,23 @@ main() {
|
||||
REMOTE_REPO="origin" push_mod_tags_cmd
|
||||
fi
|
||||
|
||||
# Verify the version tag is on the right branch
|
||||
local branch=$(git for-each-ref --contains "${RELEASE_VERSION}" --format="%(refname)" 'refs/heads' | cut -d '/' -f 3)
|
||||
if [ "${branch}" != "${BRANCH}" ]; then
|
||||
log_error "Error: Git tag ${RELEASE_VERSION} should be on branch '${BRANCH}' but is on '${branch}'"
|
||||
exit 1
|
||||
if [ "${IN_PLACE}" == 0 ]; then
|
||||
# Tried with `local branch=$(git branch -a --contains tags/"${RELEASE_VERSION}")`
|
||||
# so as to work with both current branch and main/release-3.X.
|
||||
# But got error below on current branch mode,
|
||||
# Error: Git tag v3.6.99 should be on branch '* (HEAD detached at pull/14860/merge)' but is on '* (HEAD detached from pull/14860/merge)'
|
||||
#
|
||||
# Verify the version tag is on the right branch
|
||||
# shellcheck disable=SC2155
|
||||
local branch=$(git for-each-ref --contains "${RELEASE_VERSION}" --format="%(refname)" 'refs/heads' | cut -d '/' -f 3)
|
||||
if [ "${branch}" != "${BRANCH}" ]; then
|
||||
log_error "Error: Git tag ${RELEASE_VERSION} should be on branch '${BRANCH}' but is on '${branch}'"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
log_callout "Verify the latest commit has the version tag"
|
||||
# Verify the latest commit has the version tag
|
||||
# shellcheck disable=SC2155
|
||||
local tag="$(git describe --exact-match HEAD)"
|
||||
@ -177,6 +197,7 @@ main() {
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_callout "Verify the work space is clean"
|
||||
# Verify the clean working tree
|
||||
# shellcheck disable=SC2155
|
||||
local diff="$(git diff HEAD --stat)"
|
||||
@ -212,7 +233,7 @@ main() {
|
||||
fi
|
||||
|
||||
# Upload artifacts.
|
||||
if [ "${NO_UPLOAD}" == 1 ]; then
|
||||
if [ "${DRY_RUN}" == "true" ] || [ "${NO_UPLOAD}" == 1 ]; then
|
||||
log_callout "Skipping artifact upload to gs://etcd. --no-upload flat is set."
|
||||
else
|
||||
read -p "Upload etcd ${RELEASE_VERSION} release artifacts to gs://etcd [y/N]? " -r confirm
|
||||
@ -224,7 +245,7 @@ main() {
|
||||
fi
|
||||
|
||||
# Push images.
|
||||
if [ "${NO_DOCKER_PUSH}" == 1 ]; then
|
||||
if [ "${DRY_RUN}" == "true" ] || [ "${NO_DOCKER_PUSH}" == 1 ]; then
|
||||
log_callout "Skipping docker push. --no-docker-push flat is set."
|
||||
else
|
||||
read -p "Publish etcd ${RELEASE_VERSION} docker images to quay.io [y/N]? " -r confirm
|
||||
@ -303,6 +324,7 @@ main() {
|
||||
POSITIONAL=()
|
||||
NO_UPLOAD=0
|
||||
NO_DOCKER_PUSH=0
|
||||
IN_PLACE=0
|
||||
|
||||
while test $# -gt 0; do
|
||||
case "$1" in
|
||||
@ -311,6 +333,10 @@ while test $# -gt 0; do
|
||||
help
|
||||
exit 0
|
||||
;;
|
||||
--in-place)
|
||||
IN_PLACE=1
|
||||
shift
|
||||
;;
|
||||
--no-upload)
|
||||
NO_UPLOAD=1
|
||||
shift
|
||||
@ -332,4 +358,11 @@ if [[ ! $# -eq 1 ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Note that we shouldn't upload artifacts in --in-place mode, so it
|
||||
# must be called with DRY_RUN=true
|
||||
if [ "${DRY_RUN}" != "true" ] && [ "${IN_PLACE}" == 1 ]; then
|
||||
log_error "--in-place should only be called with DRY_RUN=true"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
main "$1"
|
||||
|
@ -365,14 +365,16 @@ function assert_no_git_modifications {
|
||||
# - no differencing commits in relation to the origin/$branch
|
||||
function git_assert_branch_in_sync {
|
||||
local branch
|
||||
branch=$(run git rev-parse --abbrev-ref HEAD)
|
||||
# TODO: When git 2.22 popular, change to:
|
||||
# branch=$(git branch --show-current)
|
||||
branch=$(run git rev-parse --abbrev-ref HEAD)
|
||||
log_callout "Verify the current branch '${branch}' is clean"
|
||||
if [[ $(run git status --porcelain --untracked-files=no) ]]; then
|
||||
log_error "The workspace in '$(pwd)' for branch: ${branch} has uncommitted changes"
|
||||
log_error "Consider cleaning up / renaming this directory or (cd $(pwd) && git reset --hard)"
|
||||
return 2
|
||||
fi
|
||||
log_callout "Verify the current branch '${branch}' is in sync with the 'origin/${branch}'"
|
||||
if [ -n "${branch}" ]; then
|
||||
ref_local=$(run git rev-parse "${branch}")
|
||||
ref_origin=$(run git rev-parse "origin/${branch}")
|
||||
|
Loading…
x
Reference in New Issue
Block a user