mirror of https://github.com/istio/istio.io.git
195 lines
6.3 KiB
Bash
Executable File
195 lines
6.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Copyright Istio 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.
|
|
|
|
# parse_input function parses the name of the new release, determines
|
|
# the type of the release, and runs scripts accordingly
|
|
parse_input() {
|
|
[[ $1 =~ ^release-([0-9])\.([0-9]+)\.([0-9]+)$ ]] ||
|
|
{ echo "Target format error: should be 'release-x.x.x', got '$1'"; exit 1; }
|
|
|
|
MAJOR="${BASH_REMATCH[1]}"
|
|
MINOR="${BASH_REMATCH[2]}"
|
|
PATCH="${BASH_REMATCH[3]}"
|
|
|
|
echo "Creating release for ${MAJOR}.${MINOR}.${PATCH}..."
|
|
|
|
# patch release
|
|
if [ "${PATCH}" != '0' ]; then
|
|
echo "Patch release automation is currently not supported"
|
|
exit 0
|
|
fi
|
|
|
|
# major/minor release
|
|
CURR_MINOR="${MAJOR}.${MINOR}" # current version
|
|
PREV_MINOR="${MAJOR}.$((MINOR-1))" # previous version
|
|
NEXT_MINOR="${MAJOR}.$((MINOR+1))" # next version
|
|
|
|
if [ "${DRY_RUN}" == '1' ]; then
|
|
CURR_MINOR="${CURR_MINOR}-dry-run"
|
|
git checkout "${MASTER}"
|
|
git pull --ff-only "${ISTIOIO_GIT_SOURCE}" "${MASTER}"
|
|
fi
|
|
|
|
# for a major release x.0, find the latest minor release
|
|
if [ "${MINOR}" == '0' ]; then
|
|
LAST_MINOR_OF_PREV_MAJOR=$(
|
|
git branch -a |
|
|
grep "release-$((MAJOR-1))." |
|
|
sed -r "s/^.*release-$((MAJOR-1))\.([0-9]+)$/\1/" |
|
|
sort -n |
|
|
tail -1
|
|
)
|
|
PREV_MINOR="$((MAJOR-1)).${LAST_MINOR_OF_PREV_MAJOR}"
|
|
fi
|
|
|
|
echo "Previous minor release: ${PREV_MINOR}"
|
|
echo "Upcoming minor release: ${NEXT_MINOR}"
|
|
}
|
|
|
|
# archive_old_release function checks out to the old release branch,
|
|
# creates an archive, and stores the archive in the master branch
|
|
archive_old_release() {
|
|
echo -e "\nStep 1: archive the old release branch"
|
|
|
|
build_archive() {
|
|
scripts/build_old_archive.sh "build-old-archive-${PREV_MINOR}.0"
|
|
|
|
sed -i "
|
|
s/^preliminary: .*$/preliminary: \"${NEXT_MINOR}\"/;
|
|
s/^main: .*$/main: \"${CURR_MINOR}\"/
|
|
" data/versions.yml
|
|
|
|
# add list item to index page only once
|
|
INDEX_PAGE="archive/archive/index.html"
|
|
grep -q "<a\ href=/v${PREV_MINOR}>v${PREV_MINOR}</a>" ${INDEX_PAGE} ||
|
|
sed -i "0,/<li>/s//\<li>\n\
|
|
<a href=\/v${PREV_MINOR}>v${PREV_MINOR}<\/a>\n\
|
|
<\/li>\n\
|
|
<li>/" ${INDEX_PAGE}
|
|
}
|
|
|
|
if [ "${DRY_RUN}" == '1' ]; then
|
|
echo "Archive will be added in Step 2 for dry run"
|
|
return
|
|
fi
|
|
|
|
git checkout "release-${PREV_MINOR}"
|
|
git pull --ff-only "${ISTIOIO_GIT_SOURCE}" "release-${PREV_MINOR}"
|
|
|
|
sed -i "
|
|
s/^archive: false$/archive: true/;
|
|
s/^archive_date: .*$/archive_date: $(date +'%Y-%m-%d')/;
|
|
s/^archive_search_refinement: .*$/archive_search_refinement: \"V${PREV_MINOR}\"/
|
|
" data/args.yml
|
|
|
|
sed -i "s/^disableAliases = true$/disableAliases = false/" hugo.toml
|
|
|
|
if [[ $(git status --porcelain) ]]; then # for idempotence
|
|
git add -u
|
|
git commit -m "mark v${PREV_MINOR} as archived"
|
|
git push origin "release-${PREV_MINOR}"
|
|
fi
|
|
|
|
# complete the archive process in master
|
|
git checkout "${MASTER}"
|
|
git pull --ff-only "${ISTIOIO_GIT_SOURCE}" "${MASTER}"
|
|
|
|
build_archive
|
|
|
|
if [[ $(git status --porcelain) ]]; then
|
|
git add -u
|
|
git commit -m "update data/versions.yml and archive index page"
|
|
git push origin "${MASTER}"
|
|
fi
|
|
}
|
|
|
|
# create_branch_for_new_release function creates a branch for the
|
|
# new release off the master branch and pushes it to origin
|
|
create_branch_for_new_release() {
|
|
NEW_RELEASE_BRANCH="release-${CURR_MINOR}"
|
|
echo -e "\nStep 2: create a new branch for ${NEW_RELEASE_BRANCH}"
|
|
|
|
# delete branch if it already exists
|
|
if [[ $(git ls-remote --heads origin "${NEW_RELEASE_BRANCH}") ]]; then
|
|
git push --delete origin "${NEW_RELEASE_BRANCH}"
|
|
fi
|
|
git checkout -B "${NEW_RELEASE_BRANCH}"
|
|
|
|
# make archive in the dry run release branch
|
|
if [ "${DRY_RUN}" == '1' ]; then
|
|
build_archive
|
|
fi
|
|
|
|
sed -i "
|
|
s/^preliminary: true$/preliminary: false/;
|
|
s/^doc_branch_name: .*$/doc_branch_name: ${NEW_RELEASE_BRANCH}/;
|
|
" data/args.yml
|
|
|
|
# Can only do an update-common against a non dry-run branch
|
|
if [ "${DRY_RUN}" != '1' ]; then
|
|
UPDATE_BRANCH=${NEW_RELEASE_BRANCH} make update-common
|
|
fi
|
|
|
|
if [[ $(git status --porcelain) ]]; then
|
|
git add -A
|
|
git commit -m "create a new release branch for ${CURR_MINOR}"
|
|
git push origin "${NEW_RELEASE_BRANCH}"
|
|
fi
|
|
}
|
|
|
|
# advance_master_to_next_release function advances the master branch
|
|
# to the next release from which preliminary.istio.io is built
|
|
advance_master_to_next_release() {
|
|
echo -e "\nStep 3: advance master to release-${NEXT_MINOR}..."
|
|
if [ "${DRY_RUN}" == '1' ]; then
|
|
echo "Skipping step 3 in dry run"
|
|
return
|
|
fi
|
|
|
|
git checkout "${MASTER}"
|
|
sed -i "
|
|
s/^version: .*$/version: \"${NEXT_MINOR}\"/;
|
|
s/^full_version: .*$/full_version: \"${NEXT_MINOR}.0\"/;
|
|
s/^previous_version: .*$/previous_version: \"${CURR_MINOR}\"/;
|
|
s/^source_branch_name:.*$/source_branch_name: ${MASTER}/;
|
|
s/^doc_branch_name: .*$/doc_branch_name: ${MASTER}/
|
|
" data/args.yml
|
|
|
|
sed -i "
|
|
s/^export SOURCE_BRANCH_NAME ?=.*$/export SOURCE_BRANCH_NAME ?= ${MASTER}/;
|
|
s/^ISTIO_IMAGE_VERSION ?=.*$/ISTIO_IMAGE_VERSION ?= ${NEXT_MINOR}-alpha/
|
|
" Makefile.core.mk
|
|
|
|
go get istio.io/istio@"${MASTER}"
|
|
go mod tidy
|
|
|
|
make update_all gen
|
|
|
|
yq -i '.[0].k8sVersions = .[1].k8sVersions' data/compatibility/supportStatus.yml
|
|
|
|
if [[ $(git status --porcelain) ]]; then
|
|
git add -A
|
|
git commit -m "advance master to release-${NEXT_MINOR}"
|
|
git push origin "${MASTER}"
|
|
fi
|
|
}
|
|
|
|
set -e
|
|
parse_input "$1"
|
|
archive_old_release
|
|
create_branch_for_new_release
|
|
advance_master_to_next_release
|
|
echo "[SUCCESS] New release now has been created in the branch 'release-${CURR_MINOR}'" |