Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 81 additions & 26 deletions hack/release.sh
Original file line number Diff line number Diff line change
@@ -1,17 +1,35 @@
#!/bin/bash
set -euo pipefail
# run hack/release.sh from the project root directory to publish the release
DOCS_DIR="../docs"
DOCS_DIR="$(realpath $(dirname $0)/../../docs)"

DRY_RUN=0
if [ ${1:-} == "--dry-run" ]; then
DRY_RUN=1
fi

echo "check status of last commit build"
commit=$(git rev-parse HEAD)
check_status=$(curl https://api.github.com/repos/kubeovn/kube-ovn/commits/$commit/check-runs)
if ! echo $check_status | grep -q '"conclusion": "failure"'; then
echo "last commit build successed"
else
echo "last commit build failed"
exit 1
# FIXME: get all runs by setting parameter page and per_page if there are more than 100 runs
# Reference: https://docs.github.com/en/rest/checks/runs?apiVersion=2022-11-28#list-check-runs-for-a-git-reference
check_status=$(curl -s https://api.github.com/repos/kubeovn/kube-ovn/commits/$commit/check-runs?per_page=100)
if echo $check_status | grep -q '"status": "queued"'; then
echo "last commit build is queued"
exit 1
fi
if echo $check_status | grep -q '"status": "in_progress"'; then
echo "last commit build is in progress"
exit 1
fi
if echo $check_status | grep -q '"conclusion": "failure"'; then
echo "last commit build failed"
exit 1
fi
if echo $check_status | grep -q '"conclusion": "cancelled"'; then
echo "last commit build was cancelled"
exit 1
fi
echo "last commit build successed"


echo "tag and push image"
Expand All @@ -33,9 +51,11 @@ docker manifest create kubeovn/kube-ovn:${VERSION} kubeovn/kube-ovn:${VERSION}-x
docker manifest create kubeovn/vpc-nat-gateway:${VERSION} kubeovn/vpc-nat-gateway:${VERSION}-x86 kubeovn/vpc-nat-gateway:${VERSION}-arm
docker manifest create kubeovn/kube-ovn:${VERSION}-debug kubeovn/kube-ovn:${VERSION}-debug-x86 kubeovn/kube-ovn:${VERSION}-debug-arm

docker manifest push kubeovn/kube-ovn:${VERSION}
docker manifest push kubeovn/vpc-nat-gateway:${VERSION}
docker manifest push kubeovn/kube-ovn:${VERSION}-debug
if [ $DRY_RUN -eq 0 ]; then
docker manifest push kubeovn/kube-ovn:${VERSION}
docker manifest push kubeovn/vpc-nat-gateway:${VERSION}
docker manifest push kubeovn/kube-ovn:${VERSION}-debug
fi

NEXT_VERSION=$(cat VERSION | awk -F '.' '{print $1"."$2"."$3+1}')
echo "create and push base images for the next version ${NEXT_VERSION}"
Expand All @@ -53,10 +73,13 @@ docker manifest create kubeovn/kube-ovn-base:${NEXT_VERSION} kubeovn/kube-ovn-ba
docker manifest create kubeovn/kube-ovn-base:${NEXT_VERSION}-debug kubeovn/kube-ovn-base:${VERSION}-debug-amd64 kubeovn/kube-ovn-base:${VERSION}-debug-arm64
docker tag kubeovn/kube-ovn-base:${VERSION}-amd64-legacy kubeovn/kube-ovn-base:${NEXT_VERSION}-amd64-legacy
docker tag kubeovn/kube-ovn-base:${VERSION}-dpdk kubeovn/kube-ovn-base:${NEXT_VERSION}-dpdk
docker manifest push kubeovn/kube-ovn-base:${NEXT_VERSION}
docker manifest push kubeovn/kube-ovn-base:${NEXT_VERSION}-debug
docker push kubeovn/kube-ovn-base:${NEXT_VERSION}-amd64-legacy
docker push kubeovn/kube-ovn-base:${NEXT_VERSION}-dpdk

if [ $DRY_RUN -eq 0 ]; then
docker manifest push kubeovn/kube-ovn-base:${NEXT_VERSION}
docker manifest push kubeovn/kube-ovn-base:${NEXT_VERSION}-debug
docker push kubeovn/kube-ovn-base:${NEXT_VERSION}-amd64-legacy
docker push kubeovn/kube-ovn-base:${NEXT_VERSION}-dpdk
fi

current_branch=$(git rev-parse --abbrev-ref HEAD)
if [ "$current_branch" != "master" ]; then
Expand All @@ -66,22 +89,36 @@ if [ "$current_branch" != "master" ]; then
sed -i 's/tag:\ .*/tag:\ '"${VERSION}"'/' charts/kube-ovn/values.yaml
sed -i 's/version:\ .*/version:\ '"${VERSION}"'/' charts/kube-ovn/Chart.yaml
sed -i 's/appVersion:\ .*/appVersion:\ "'"${VERSION#v}"'"/' charts/kube-ovn/Chart.yaml
if [ -f charts/kube-ovn-v2/values.yaml ]; then
sed -i 's/tag:\ .*/tag:\ '"${VERSION}"'/' charts/kube-ovn-v2/values.yaml
sed -i 's/version:\ .*/version:\ '"${VERSION}"'/' charts/kube-ovn-v2/Chart.yaml
sed -i 's/appVersion:\ .*/appVersion:\ "'"${VERSION#v}"'"/' charts/kube-ovn-v2/Chart.yaml
fi
sed -i '/image:/s/v(\d+\.){2}\d+/'"${VERSION}/" yamls/webhook.yaml

echo "commit, tag and push"
git add dist/images/install.sh
git add charts/kube-ovn/values.yaml
git add charts/kube-ovn/Chart.yaml
if [ -f charts/kube-ovn-v2/values.yaml ]; then
git add charts/kube-ovn-v2/values.yaml
git add charts/kube-ovn-v2/Chart.yaml
fi
git commit -m "release ${VERSION}"
git tag ${VERSION}
git push
git push origin --tags
if [ $DRY_RUN -eq 0 ]; then
git push
git push origin --tags
fi

echo "modify version to next patch number"
NEXT_VERSION=$(cat VERSION | awk -F '.' '{print $1"."$2"."$3+1}')
echo ${NEXT_VERSION} > VERSION
git add VERSION
git commit -m "prepare for next release"
git push
if [ $DRY_RUN -eq 0 ]; then
git push
fi

echo "Modify the doc version number"
cd ${DOCS_DIR}
Expand All @@ -90,7 +127,9 @@ if [ "$current_branch" != "master" ]; then
sed -i "s/version: .*/version: ${VERSION}/" mkdocs.yml
git add mkdocs.yml
git commit -m "update version to ${VERSION}"
git push
if [ $DRY_RUN -eq 0 ]; then
git push
fi

echo "clean up images"
docker rmi kubeovn/kube-ovn:${VERSION}-x86 \
Expand All @@ -112,9 +151,13 @@ else
echo "push tag and create new release branch"
git tag ${VERSION}
RELEASE_BRANCH=release-$(echo ${VERSION} | sed 's/v\([0-9]*\.[0-9]*\).*/\1/')
git push origin --tags
if [ $DRY_RUN -eq 0 ]; then
git push origin --tags
fi
git checkout -b $RELEASE_BRANCH
git push --set-upstream origin $RELEASE_BRANCH
if [ $DRY_RUN -eq 0 ]; then
git push --set-upstream origin $RELEASE_BRANCH
fi

echo "create and push base images for the master branch"
git checkout master
Expand All @@ -128,38 +171,50 @@ else
docker manifest create kubeovn/kube-ovn-base:${NEXT_VERSION}-debug kubeovn/kube-ovn-base:${VERSION}-debug-amd64 kubeovn/kube-ovn-base:${VERSION}-debug-arm64
docker tag kubeovn/kube-ovn-base:${VERSION}-amd64-legacy kubeovn/kube-ovn-base:${NEXT_VERSION}-amd64-legacy
docker tag kubeovn/kube-ovn-base:${VERSION}-dpdk kubeovn/kube-ovn-base:${NEXT_VERSION}-dpdk
docker manifest push kubeovn/kube-ovn-base:${NEXT_VERSION}
docker manifest push kubeovn/kube-ovn-base:${NEXT_VERSION}-debug
docker push kubeovn/kube-ovn-base:${NEXT_VERSION}-amd64-legacy
docker push kubeovn/kube-ovn-base:${NEXT_VERSION}-dpdk
if [ $DRY_RUN -eq 0 ]; then
docker manifest push kubeovn/kube-ovn-base:${NEXT_VERSION}
docker manifest push kubeovn/kube-ovn-base:${NEXT_VERSION}-debug
docker push kubeovn/kube-ovn-base:${NEXT_VERSION}-amd64-legacy
docker push kubeovn/kube-ovn-base:${NEXT_VERSION}-dpdk
fi

echo "prepare next release in master branch"
echo ${NEXT_VERSION} > VERSION
sed -i '/^VERSION=/c\VERSION="'"${NEXT_VERSION}"'"' dist/images/install.sh
sed -i 's/tag:\ .*/tag:\ '"${NEXT_VERSION}"'/' charts/kube-ovn/values.yaml
sed -i 's/version:\ .*/version:\ '"${NEXT_VERSION}"'/' charts/kube-ovn/Chart.yaml
sed -i 's/appVersion:\ .*/appVersion:\ "'"${NEXT_VERSION#v}"'"/' charts/kube-ovn/Chart.yaml
sed -i 's/tag:\ .*/tag:\ '"${NEXT_VERSION}"'/' charts/kube-ovn-v2/values.yaml
sed -i 's/version:\ .*/version:\ '"${NEXT_VERSION}"'/' charts/kube-ovn-v2/Chart.yaml
sed -i 's/appVersion:\ .*/appVersion:\ "'"${NEXT_VERSION#v}"'"/' charts/kube-ovn-v2/Chart.yaml
sed -ri 's#(\s+)(- master)#\1\2\n\1- '$RELEASE_BRANCH'#' .github/workflows/build-kube-ovn-base.yaml
sed -ri 's#(\s+)(- master)#\1\2\n\1- '$RELEASE_BRANCH'#' .github/workflows/build-kube-ovn-base-dpdk.yaml
sed -ri 's#(\s+)(- master)#\1\2\n\1- '$RELEASE_BRANCH'#' .github/workflows/scheduled-e2e.yaml
sed -i '/image:/s/v(\d+\.){2}\d+/'"${NEXT_VERSION}/" yamls/webhook.yaml

git add dist/images/install.sh
git add charts/kube-ovn/values.yaml
git add charts/kube-ovn/Chart.yaml
git add charts/kube-ovn-v2/values.yaml
git add charts/kube-ovn-v2/Chart.yaml
git add VERSION
git add .github/workflows/build-kube-ovn-base.yaml
git add .github/workflows/build-kube-ovn-base-dpdk.yaml
git add .github/workflows/scheduled-e2e.yaml
git commit -m "prepare for next release"
git push
if [ $DRY_RUN -eq 0 ]; then
git push
fi

echo "prepare next release in release branch"
git checkout $RELEASE_BRANCH
NEXT_VERSION=$(cat VERSION | awk -F '.' '{print $1"."$2"."$3+1}')
echo ${NEXT_VERSION} > VERSION
git add VERSION
git commit -m "prepare for next release"
git push
if [ $DRY_RUN -eq 0 ]; then
git push
fi

echo "need manual update the docs to create a new branch"
fi
Loading