mirror of https://github.com/istio/istio.io.git
Automate release process (#7601)
* script part one * first draft * save progress * update README (i) * try script * add more echos * even more echos * complete list of git add * change git add to --all * separate remake archive * change --all to -A * fix path * add credential helper * fix path * build an archive of v1.6 in tori-release * add master variable * build an archive of v1.6 in tori-release * update data/versions.yml and archive index page * finish redo_archive * add patch release * git add * fix go command * complete scripts * make linters happy * update readme * update readme * add script for prepare release * add security patch arg * fix release note path * fix param expansion * update readme * fix typo * refine patch release script * add git pull to make sure everything is up to date * ensure idempotence * add dry run option * fix func arg * fix brackets * allow existing branches * fix arg bug * remove git config * update readme * update readme * remove unnecessary note * update readme * update readme * fix indentation * fix format bug * force mv * fix mv command * rm previous archive * fix extra char * update readme * change 1.4 example to 1.7; remove 'the' * change 'set -e' position * add function doc; do git pull --ff-only * rename target to fetch-archive * rename to PRIVATE_PATCH; remove release note template * update readme * add archive build in new release dry run * rename to build_old_archive * build archive before edit * set upstream * fix language * rm set upstream * delete dry run branch if exists * change wordings * make linter happy * patch release changes * rm args.yml edit * change wordings * change heading * change gcse in readme * Update README.md * rm patch release automation * Update README.md
This commit is contained in:
parent
6711cc7bd3
commit
583d8ff0f7
|
@ -139,6 +139,22 @@ update_all: update_ref_docs update_examples
|
||||||
foo2:
|
foo2:
|
||||||
hugo version
|
hugo version
|
||||||
|
|
||||||
|
# Release related targets
|
||||||
|
export ISTIOIO_GIT_SOURCE := https://github.com/istio/istio.io.git
|
||||||
|
export MASTER := master
|
||||||
|
|
||||||
|
prepare-%:
|
||||||
|
@scripts/prepare_release.sh $@
|
||||||
|
|
||||||
|
release-%-dry-run:
|
||||||
|
@DRY_RUN=1 scripts/create_version.sh $(subst -dry-run,,$@)
|
||||||
|
|
||||||
|
release-%:
|
||||||
|
@scripts/create_version.sh $@
|
||||||
|
|
||||||
|
build-old-archive-%:
|
||||||
|
@scripts/build_old_archive.sh $@
|
||||||
|
|
||||||
# The init recipe was split into two recipes to solve an issue seen in prow
|
# The init recipe was split into two recipes to solve an issue seen in prow
|
||||||
# where paralyzation is happening and some tasks in a recipe were occuring out
|
# where paralyzation is happening and some tasks in a recipe were occuring out
|
||||||
# of order. The desired behavior is for `preinit` to do the clone and set up the
|
# of order. The desired behavior is for `preinit` to do the clone and set up the
|
||||||
|
|
136
README.md
136
README.md
|
@ -6,8 +6,8 @@
|
||||||
|
|
||||||
## istio.io
|
## istio.io
|
||||||
|
|
||||||
This repository contains the source code for the [istio.io](https://istio.io),
|
This repository contains the source code for [istio.io](https://istio.io) and
|
||||||
[preliminary.istio.io](https://preliminary.istio.io), and [archive.istio.io](https://archive.istio.io) sites.
|
[preliminary.istio.io](https://preliminary.istio.io).
|
||||||
|
|
||||||
Please see the main Istio [README](https://github.com/istio/istio/blob/master/README.md)
|
Please see the main Istio [README](https://github.com/istio/istio/blob/master/README.md)
|
||||||
file to learn about the overall Istio project and how to get in touch with us. To learn how you can
|
file to learn about the overall Istio project and how to get in touch with us. To learn how you can
|
||||||
|
@ -18,7 +18,7 @@ see the Istio [contribution guidelines](https://github.com/istio/community/blob/
|
||||||
- [Versions and releases](#versions-and-releases)
|
- [Versions and releases](#versions-and-releases)
|
||||||
- [How versioning works](#how-versioning-works)
|
- [How versioning works](#how-versioning-works)
|
||||||
- [Publishing content immediately](#publishing-content-immediately)
|
- [Publishing content immediately](#publishing-content-immediately)
|
||||||
- [Creating a version](#creating-a-version)
|
- [Creating a major/minor release](#creating-a-majorminor-release)
|
||||||
- [Creating a patch release](#creating-a-patch-release)
|
- [Creating a patch release](#creating-a-patch-release)
|
||||||
- [Multi-language support](#multi-language-support)
|
- [Multi-language support](#multi-language-support)
|
||||||
- [Regular maintenance](#regular-maintenance)
|
- [Regular maintenance](#regular-maintenance)
|
||||||
|
@ -30,17 +30,15 @@ To learn how to edit and build this repo's content, please refer to
|
||||||
|
|
||||||
## Versions and releases
|
## Versions and releases
|
||||||
|
|
||||||
Istio maintains three variations of its public site.
|
Istio maintains two variations of its public site.
|
||||||
|
|
||||||
- [istio.io](https://istio.io) is the main site, showing documentation for the current release of the product.
|
- [istio.io](https://istio.io) is the main site, showing documentation for the current release of the product.
|
||||||
|
[istio.io/archive](https://istio.io/archive) contains snapshots of the documentation for previous releases of the product. This is useful for customers still using these older releases.
|
||||||
- [archive.istio.io](https://archive.istio.io) contains snapshots of the documentation for previous releases of the product.
|
|
||||||
This is useful for customers still using these older releases.
|
|
||||||
|
|
||||||
- [preliminary.istio.io](https://preliminary.istio.io) contains the actively updated documentation for the next release of the product.
|
- [preliminary.istio.io](https://preliminary.istio.io) contains the actively updated documentation for the next release of the product.
|
||||||
|
|
||||||
The user can trivially navigate between the different variations of the site using the gear menu in the top right
|
The user can trivially navigate between the different variations of the site using the gear menu in the top right
|
||||||
of each page. All three sites are hosted on [Netlify](https://netlify.com).
|
of each page. Both sites are hosted on [Netlify](https://netlify.com).
|
||||||
|
|
||||||
### How versioning works
|
### How versioning works
|
||||||
|
|
||||||
|
@ -50,152 +48,76 @@ are automatically reflected on preliminary.istio.io.
|
||||||
- The content of istio.io is taken from the latest release-XXX branch. The specific branch that
|
- The content of istio.io is taken from the latest release-XXX branch. The specific branch that
|
||||||
is used is determined by the istio.io [Netlify](https://netlify.com) project's configuration.
|
is used is determined by the istio.io [Netlify](https://netlify.com) project's configuration.
|
||||||
|
|
||||||
- The content of archive.istio.io is taken from the older release-XXX branches. The set of branches that
|
|
||||||
are included on archive.istio.io is determined by the `TOBUILD` variable in this
|
|
||||||
[script](https://github.com/istio/istio.io/blob/master/scripts/build_archive_site.sh).
|
|
||||||
|
|
||||||
### Publishing content immediately
|
### Publishing content immediately
|
||||||
|
|
||||||
Checking in updates to the master branch will automatically update preliminary.istio.io, and will only be reflected on
|
Checking in updates to the master branch will automatically update preliminary.istio.io, and will only be reflected on
|
||||||
istio.io the next time a release is created, which can be several weeks in the future. If you'd like some changes to be
|
istio.io the next time a release is created, which can be several weeks in the future. If you'd like some changes to be
|
||||||
immediately reflected on istio.io, you need to check your changes both to the master branch and to the
|
immediately reflected on istio.io, you need to check your changes both to the master branch and to the
|
||||||
current release branch (named release-XXX such as release-1.4).
|
current release branch (named `release-<MAJOR>.<MINOR>` such as `release-1.7`).
|
||||||
|
|
||||||
This process can be taken care of automatically by our infrastructure. If you submit a PR
|
This process can be taken care of automatically by our infrastructure. If you submit a PR
|
||||||
to the master branch and annotate the PR with the `actions/merge-to-release-branch` label,
|
to the master branch and annotate the PR with the `actions/merge-to-release-branch` label,
|
||||||
then as soon as your PR is merged into master, it will be merged into the current release branch.
|
then as soon as your PR is merged into master, it will be merged into the current release branch.
|
||||||
|
|
||||||
### Creating a version
|
### Creating a major/minor release
|
||||||
|
|
||||||
Here are the steps necessary to create a new documentation version. Let's assume the current
|
Here are the steps necessary to create a new documentation version. Let's assume the current
|
||||||
version of Istio is 1.3 and you wish to introduce 1.4 which has been under development.
|
version of Istio is 1.6 and you wish to introduce 1.7 which has been under development.
|
||||||
|
|
||||||
#### When Istio source code is branched
|
#### When Istio source code is branched
|
||||||
|
|
||||||
The documentation repo pulls content from the Istio source repos for inclusion in the published site.
|
Run `make prepare-1.7.0`, and that's it. This will grab the latest material from the new istio source branch.
|
||||||
When the source repos are branched in preparation for a release, a few changes are needed in the
|
|
||||||
documentation repo to track this:
|
|
||||||
|
|
||||||
1. Switch to the **master** branch of the istio/istio.io repo and make sure everything is up to date.
|
|
||||||
|
|
||||||
1. Edit the file `Makefile.core.mk` and change the `SOURCE_BRANCH_NAME` variable to the
|
|
||||||
name of the newly created source branches (in this case `release-1.4`).
|
|
||||||
|
|
||||||
1. Edit the file `data/args.yml` and set the `source_branch_name` field to the name of the newly created source
|
|
||||||
branches (in this case `release-1.4`).
|
|
||||||
|
|
||||||
1. Run `make update_all` in order to retrieve the latest material from the source repositories.
|
|
||||||
|
|
||||||
1. Commit the previous edits to your local git repo and push your **master** branch to GitHub.
|
|
||||||
|
|
||||||
#### On the day of the release
|
#### On the day of the release
|
||||||
|
|
||||||
##### Creating the release branch
|
1. Run `make release-1.7.0`. This make target will change some variables in `master` and `release-1.6` as needed, and create a new branch `release-1.7` for the new version.
|
||||||
|
|
||||||
The day of a major Istio release, assuming you've previously done the steps from the above section, you need to:
|
- For a dry run before official release, run `make release-1.7.0-dry-run`, which will only create a new branch `release-1.7-dry-run`, and not touch any other branches.
|
||||||
|
|
||||||
1. Switch to the **master** branch of the istio/istio.io repo and make sure everything is up to date.
|
1. Go to the istio.io project on [Netlify](https://netlify.com) and do the following:
|
||||||
|
|
||||||
1. Edit the file `scripts/build_archive_site.sh` and add the new archive version
|
- Change the branch that is built from the previous release's branch to the new release branch, in this case `release-1.7` (or `release-1.7-dry-run` as appropriate).
|
||||||
(in this case `release-1.3`) to the `TOBUILD` variable.
|
|
||||||
|
|
||||||
1. Edit the file `data/versions.yml`. Set the `preliminary` field to the next Istio release
|
- Select the option to trigger an immediate rebuild and redeployment.
|
||||||
(in this case `1.5`) and the `main` field to the current release (in this case `1.4`).
|
|
||||||
|
|
||||||
1. Commit the previous edits to your local git repo and push your **master** branch to GitHub.
|
- Once deployment is done, browse istio.io and make sure everything looks good.
|
||||||
|
|
||||||
1. Create a new release branch off of master, named as release-**major**.**minor** (in this case `release-1.4`). There is one
|
|
||||||
such branch for every release.
|
|
||||||
|
|
||||||
1. Edit the file `data/args.yml`. Set the `preliminary` field to `false`
|
|
||||||
and the the `doc_branch_name` field to the name of the release branch (in this case `release-1.4`).
|
|
||||||
|
|
||||||
1. Commit the previous edits to your local git repo and push your **release** branch to GitHub.
|
|
||||||
|
|
||||||
#### Updating istio.io
|
|
||||||
|
|
||||||
1. Go to the istio.io project on [Netlify](https://netlify.com)
|
|
||||||
|
|
||||||
1. Change the branch that is built from the previous release's branch to the new release branch, in this case release-1.4
|
|
||||||
|
|
||||||
1. Select the option to trigger an immediate rebuild and redeployment.
|
|
||||||
|
|
||||||
1. Once deployment is done, browse istio.io and make sure everything looks good.
|
|
||||||
|
|
||||||
##### Updating archive.istio.io
|
|
||||||
|
|
||||||
1. Go to the [Google Custom Search Engine](https://cse.google.com) and do the following:
|
1. Go to the [Google Custom Search Engine](https://cse.google.com) and do the following:
|
||||||
|
|
||||||
- Download the archive.istio.io CSE context file from the Advanced tab.
|
- Download the istio.io CSE context file from the Advanced tab.
|
||||||
|
|
||||||
- Add a new FacetItem at the top of the file containing the previous release's version number. In
|
- Add a new FacetItem at the top of the file containing the previous release's version number. In
|
||||||
this case, this would be "V1.3".
|
this case, this would be `V1.6`.
|
||||||
|
|
||||||
- Upload the updated CSE context file to the site.
|
- Upload the updated CSE context file to the site.
|
||||||
|
|
||||||
- In the Setup section, add a new site that covers the previous release's archive directory. In this
|
- In the Setup section, add a new site that covers the previous release's archive directory. In this
|
||||||
case, the site URL would be archive.istio.io/v1.3/*. Set the label of this site to the name of the
|
case, the site URL would be `istio.io/v1.6/*`. Set the label of this site to the name of the
|
||||||
facet item created above (V1.3 in this case).
|
facet item created above (`V1.6` in this case).
|
||||||
|
|
||||||
1. In the **previous release's** branch (in this case `release-1.3`), edit the file `data/args.yml`. Set the
|
|
||||||
`archive` field to true and the `archive_date` field to the current date, and the `archive_search_refinement`
|
|
||||||
to the previous release version (in this case `V1.3`).
|
|
||||||
|
|
||||||
1. In the **previous release's** branch (in this case `release-1.3`), edit the file `config.toml`. Set the
|
|
||||||
`disableAliases` field to `false`.
|
|
||||||
|
|
||||||
1. Commit the previous edits to your local git repo and push the **previous release's** branch to GitHub.
|
|
||||||
|
|
||||||
1. In the **archive** branch, rebase the branch to have all changes from the current release. In this case,
|
|
||||||
all changes from the `release-1.4` branch.
|
|
||||||
|
|
||||||
1. Commit the previous edits to your local git repo and push the **archive** branch to GitHub.
|
|
||||||
|
|
||||||
1. Wait a while (~20 minutes) and browse archive.istio.io to make sure everything looks good.
|
|
||||||
|
|
||||||
##### Updating preliminary.istio.io
|
|
||||||
|
|
||||||
1. In the **master** branch, edit the file `data/args.yml`. Set the `version` and `full_version` fields to have the version
|
|
||||||
of the next Istio release, and `previous_version` to be the version of the previous release. In this case, you would set the fields to
|
|
||||||
"1.5", "1.5.0", and "1.4" respectively.
|
|
||||||
|
|
||||||
1. In the **master** branch, edit the file `data/args.yml`. Set the
|
|
||||||
`source_branch_name` and `doc_branch_name` fields to `master`.
|
|
||||||
|
|
||||||
1. In the **master** branch, edit the file `Makefile.core.mk`. Set the variable `SOURCE_BRANCH_NAKE` to
|
|
||||||
`master`.
|
|
||||||
|
|
||||||
1. Run `make update_all` in order to retrieve the latest material from the source repositories.
|
|
||||||
|
|
||||||
1. Commit the previous edits to your local git repo and push the **master** branch to GitHub.
|
|
||||||
|
|
||||||
1. Wait a while (~5 minutes) and browse preliminary.istio.io to make sure everything looks good.
|
|
||||||
|
|
||||||
### Creating a patch release
|
### Creating a patch release
|
||||||
|
|
||||||
A few days before the patch release, the release managers should notify the Doc WG that the release
|
A few days before the patch release, the release managers should notify the Doc WG that the release
|
||||||
is built and is starting it's long running qualification test. At this time, move the doc automation
|
is built and is starting it's long running qualification test. At this time, move the doc automation
|
||||||
tests to use the new release to verify automated doc testing passes. To move to a new release
|
tests to use the new release to verify automated doc testing passes.
|
||||||
(make sure you are in the patch's release branch):
|
|
||||||
|
|
||||||
1. `go get istio.io/istio@1.X.Y`
|
To move to a new release (make sure you are in the patch's release branch):
|
||||||
|
|
||||||
1. `go mod tidy`
|
1. Run `go get istio.io/istio@A.X.Y && go mod tidy`.
|
||||||
|
|
||||||
1. Create a PR with the go.* changes.
|
1. Create a PR with the `go.*` changes.
|
||||||
|
|
||||||
Creating a new patch release involves modifying a few files:
|
Creating a new patch release involves modifying a few files:
|
||||||
|
|
||||||
1. Create the release note for the release by adding a markdown file in
|
1. Edit `data/args.yml` and change the `full_version` field to `"A.X.Y"`.
|
||||||
`content/en/news/<YEAR>/1.X.Y/index.md`, where 1.X.Y is the name of the release. This is where
|
|
||||||
you describe the changes in the release.
|
|
||||||
|
|
||||||
1. Edit the `data/args.yml` file and change the `full_version` field to the name of the release.
|
1. Complete the release note for the release by editing the markdown file `content/en/news/releases/A.X.x/announcing-A.X.Y/index.md`. This is where you describe the changes in the release. Please look at other existing files for example content and layout.
|
||||||
|
|
||||||
1. Run `make update_ref_docs` to get the latest reference docs.
|
1. Run `make update_ref_docs` to get the latest reference docs.
|
||||||
|
|
||||||
For the release note file, please look at existing files in the same location for example content and
|
### Updating an archive
|
||||||
layout.
|
|
||||||
|
If the archived version in a newer branch (e.g., `release-1.7:archive/v1.6`) needs to be updated due to changes in the old release branch (`release-1.6` in this case), you can run `build-old-archive-1.6.0` in the `release-1.7` branch, which will re-archive `release-1.6` and substitute it for the previous archive in the current branch.
|
||||||
|
|
||||||
## Multi-language support
|
## Multi-language support
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
#!/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.
|
||||||
|
|
||||||
|
# NOTE: this only works for v1.5+ because it needs an `archive-version`
|
||||||
|
# make target to create an archive.
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
[[ $1 =~ ^build-old-archive-([0-9]\.[0-9]+)\.0$ ]] ||
|
||||||
|
{ echo "Target format error: should be 'build-old-archive-x.x.0', got '$1'"; exit 1; }
|
||||||
|
|
||||||
|
VERSION="${BASH_REMATCH[1]}"
|
||||||
|
|
||||||
|
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
||||||
|
ARCHIVE_BRANCH="release-${VERSION}"
|
||||||
|
|
||||||
|
git checkout "${ARCHIVE_BRANCH}"
|
||||||
|
git pull --ff-only "${ISTIOIO_GIT_SOURCE}" "${ARCHIVE_BRANCH}"
|
||||||
|
|
||||||
|
echo "Making an archive for ${ARCHIVE_BRANCH}..."
|
||||||
|
make archive-version
|
||||||
|
|
||||||
|
git checkout "${CURRENT_BRANCH}"
|
||||||
|
rm -rf "archive/v${VERSION}"
|
||||||
|
mv "archived_version/v${VERSION}" archive
|
||||||
|
|
||||||
|
if [[ $(git status --porcelain) ]]; then
|
||||||
|
git add "archive/v${VERSION}"
|
||||||
|
git commit -m "build an archive of v${VERSION} in ${CURRENT_BRANCH}"
|
||||||
|
git push origin "${CURRENT_BRANCH}"
|
||||||
|
fi
|
|
@ -0,0 +1,181 @@
|
||||||
|
#!/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/" config.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
|
||||||
|
|
||||||
|
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/^SOURCE_BRANCH_NAME ?=.*$/SOURCE_BRANCH_NAME ?= ${MASTER}/" Makefile.core.mk
|
||||||
|
make update_all
|
||||||
|
|
||||||
|
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}'"
|
|
@ -0,0 +1,37 @@
|
||||||
|
#!/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.
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
[[ $1 =~ ^prepare-([0-9]\.[0-9]+)\.0$ ]] ||
|
||||||
|
{ echo "Target format error: should be 'prepare-x.x.0', got '$1'"; exit 1; }
|
||||||
|
|
||||||
|
VERSION="${BASH_REMATCH[1]}"
|
||||||
|
|
||||||
|
git checkout "${MASTER}"
|
||||||
|
git pull --ff-only "${ISTIOIO_GIT_SOURCE}" "${MASTER}"
|
||||||
|
|
||||||
|
sed -i "s/^source_branch_name: .*$/source_branch_name: release-${VERSION}/" data/args.yml
|
||||||
|
sed -i "s/^SOURCE_BRANCH_NAME ?=.*$/SOURCE_BRANCH_NAME ?= release-${VERSION}/" Makefile.core.mk
|
||||||
|
|
||||||
|
echo "Running make update_all..."
|
||||||
|
make update_all
|
||||||
|
|
||||||
|
if [[ $(git status --porcelain) ]]; then
|
||||||
|
git add -A
|
||||||
|
git commit -m "prepare for v${VERSION} as istio source is already branched"
|
||||||
|
git push origin "${MASTER}"
|
||||||
|
fi
|
Loading…
Reference in New Issue