diff --git a/hack/release.sh b/hack/release.sh index 4b57ba10dfe..930adca962d 100755 --- a/hack/release.sh +++ b/hack/release.sh @@ -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" @@ -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}" @@ -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 @@ -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} @@ -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 \ @@ -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 @@ -128,10 +171,12 @@ 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 @@ -139,19 +184,27 @@ else 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 @@ -159,7 +212,9 @@ else 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