Release #6
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Release | |
on: | |
schedule: | |
# Every Monday at 07:00 (UTC) | |
- cron: '00 7 * * MON' | |
workflow_dispatch: | |
inputs: | |
plugin_quay_repository: | |
description: Plugin Quay repository | |
type: string | |
default: quay.io/kiali/ossmconsole | |
required: true | |
jobs: | |
initialize: | |
name: Initialize | |
runs-on: ubuntu-20.04 | |
outputs: | |
target_branch: ${{ github.ref_name }} | |
release_type: ${{ env.release_type }} | |
release_version: ${{ env.release_version }} | |
branch_version: ${{ env.branch_version }} | |
next_version: ${{ env.next_version }} | |
plugin_quay_tag: ${{ env.plugin_quay_tag }} | |
plugin_quay_repo: ${{ env.plugin_quay_repo }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.ref_name }} | |
- name: Prepare scripts | |
run: | | |
cat <<-EOF > bump.py | |
import sys | |
release_type = sys.argv[1] | |
version = sys.argv[2] | |
parts = version.split('.') | |
major = int(parts[0][1:]) | |
minor = int(parts[1]) | |
patch = int(parts[2]) | |
if release_type == 'major': | |
major = major + 1 | |
minor = 0 | |
patch = 0 | |
elif release_type == 'minor': | |
minor = minor + 1 | |
patch = 0 | |
elif release_type == 'patch': | |
patch = patch + 1 | |
print('.'.join(['v' + str(major), str(minor), str(patch)])) | |
EOF | |
cat <<-EOF > minor.py | |
import datetime | |
base = int(datetime.datetime.strptime("24/04/2022", "%d/%m/%Y").timestamp()) | |
now = int(datetime.datetime.now().timestamp()) | |
diff = now - base | |
days_elapsed = int(diff / (24*60*60)) | |
weeks_elapsed = int(days_elapsed / 7) | |
weeks_mod3 = int(weeks_elapsed % 3) | |
print(weeks_mod3) | |
EOF | |
- name: Determine release type | |
id: release_type | |
run: | | |
if [ -z "${{ github.event.inputs.release_type }}" ]; | |
then | |
DO_RELEASE=$(python minor.py) | |
if [[ $DO_RELEASE == "1" ]] | |
then | |
echo "release_type=minor" >> $GITHUB_ENV | |
else | |
echo "release_type=skip" >> $GITHUB_ENV | |
fi | |
else | |
echo "release_type=${{ github.event.inputs.release_type }}" >> $GITHUB_ENV | |
fi | |
- name: Determine release version | |
if: ${{ env.release_type != 'skip' }} | |
env: | |
RELEASE_TYPE: ${{ env.release_type }} | |
id: release_version | |
run: | | |
RAW_VERSION=$(sed -rn 's/^VERSION \?= (.*)/\1/p' Makefile) | |
# Remove any pre release identifier (ie: "-SNAPSHOT") | |
RELEASE_VERSION=${RAW_VERSION%-*} | |
if [[ $RELEASE_TYPE == "patch" ]] | |
then | |
RELEASE_VERSION=$(python bump.py $RELEASE_TYPE $RELEASE_VERSION) | |
elif [[ $RELEASE_TYPE == "minor" ]] | |
then | |
RELEASE_VERSION=$RELEASE_VERSION | |
fi | |
echo "release_version=$RELEASE_VERSION" >> $GITHUB_ENV | |
- name: Determine next version | |
env: | |
RELEASE_TYPE: ${{ env.release_type }} | |
RELEASE_VERSION: ${{ env.release_version }} | |
id: next_version | |
if: ${{ env.release_type != 'skip' }} | |
run: | | |
if [[ $RELEASE_TYPE == "patch" ]] | |
then | |
NEXT_VERSION=$(python bump.py $RELEASE_TYPE $RELEASE_VERSION) | |
elif [[ $RELEASE_TYPE == "minor" ]] | |
then | |
NEXT_VERSION=$(python bump.py $RELEASE_TYPE $RELEASE_VERSION) | |
fi | |
echo "next_version=$NEXT_VERSION" >> $GITHUB_ENV | |
- name: Determine branch version | |
if: ${{ env.release_type != 'skip' }} | |
env: | |
RELEASE_VERSION: ${{ env.release_version }} | |
id: branch_version | |
run: echo "branch_version=$(echo $RELEASE_VERSION | sed 's/\.[0-9]*\+$//')" >> $GITHUB_ENV | |
- name: Determine Quay tag | |
if: ${{ env.release_type != 'skip' }} | |
env: | |
RELEASE_VERSION: ${{ env.release_version }} | |
BRANCH_VERSION: ${{ env.branch_version }} | |
id: quay_tag | |
run: | | |
if [ -z "${{ github.event.inputs.plugin_quay_repository }}" ]; | |
then | |
PLUGIN_QUAY_REPO="quay.io/kiali/ossmconsole" | |
else | |
PLUGIN_QUAY_REPO="${{ github.event.inputs.plugin_quay_repository }}" | |
fi | |
PLUGIN_QUAY_TAG="$PLUGIN_QUAY_REPO:$RELEASE_VERSION" | |
echo "plugin_quay_tag=$PLUGIN_QUAY_TAG" >> $GITHUB_ENV | |
echo "plugin_quay_repo=$PLUGIN_QUAY_REPO" >> $GITHUB_ENV | |
- name: Cleanup | |
run: rm bump.py minor.py | |
- name: Log information | |
run: | | |
echo "Release type: ${{ env.release_type }}" | |
echo "Release version: ${{ env.release_version }}" | |
echo "Next version: ${{ env.next_version }}" | |
echo "Branch version: ${{ env.branch_version }}" | |
echo "Plugin Quay tag: ${{ env.plugin_quay_tag }}" | |
release: | |
name: Release | |
if: ${{ needs.initialize.outputs.release_type != 'skip' && ((github.event_name == 'schedule' && github.repository == 'kiali/openshift-servicemesh-plugin') || github.event_name != 'schedule') }} | |
runs-on: ubuntu-20.04 | |
needs: [initialize] | |
env: | |
RELEASE_VERSION: ${{ needs.initialize.outputs.release_version }} | |
BRANCH_VERSION: ${{ needs.initialize.outputs.branch_version }} | |
NEXT_VERSION: ${{ needs.initialize.outputs.next_version }} | |
RELEASE_BRANCH: ${{ github.ref_name }} | |
PLUGIN_QUAY_TAG: ${{ needs.initialize.outputs.plugin_quay_tag }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.event.inputs.release_branch || github.ref_name }} | |
- name: Set version to release | |
run: | | |
# Backend version | |
sed -i -r "s/^VERSION \?= (.*)/VERSION \?= $RELEASE_VERSION/" Makefile | |
# UI version | |
jq -r ".version |= \"${RELEASE_VERSION:1}\" | .consolePlugin.version |= \"${RELEASE_VERSION:1}\"" plugin/package.json > plugin/package.json.tmp | |
mv plugin/package.json.tmp plugin/package.json | |
cat plugin/package.json | |
- name: Build and push images | |
run: | | |
docker login -u ${{ secrets.QUAY_USER }} -p ${{ secrets.QUAY_PASSWORD }} quay.io | |
# TODO: find out why ARM builds failed and fix it; we want to target ARM also. | |
make -e TARGET_ARCHS="amd64 s390x ppc64le" build-push-plugin-multi-arch | |
- name: Configure git | |
run: | | |
git config user.email '[email protected]' | |
git config user.name 'kiali-bot' | |
- name: Create tag | |
run: | | |
git add Makefile plugin/package.json | |
git commit -m "Release $RELEASE_VERSION" | |
git push origin $(git rev-parse HEAD):refs/tags/$RELEASE_VERSION | |
- name: Create release | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
run: | | |
gh release create $RELEASE_VERSION -t "OpenShift Service Mesh Console $RELEASE_VERSION" | |
- name: Create or update version branch | |
run: git push origin $(git rev-parse HEAD):refs/heads/$BRANCH_VERSION | |
- name: Create a PR to prepare for next version | |
env: | |
BUILD_TAG: kiali-release-${{ github.run_number }}-main | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
if: ${{ needs.initialize.outputs.release_type == 'minor' }} | |
run: | | |
sed -i -r "s/^VERSION \?= (.*)/VERSION \?= $NEXT_VERSION-SNAPSHOT/" Makefile | |
jq -r ".version |= \"${NEXT_VERSION:1}\" | .consolePlugin.version |= \"${NEXT_VERSION:1}\"" plugin/package.json > plugin/package.json.tmp | |
mv plugin/package.json.tmp plugin/package.json | |
cat plugin/package.json | |
git add Makefile plugin/package.json | |
git commit -m "Prepare for next version" | |
git push origin $(git rev-parse HEAD):refs/heads/$BUILD_TAG | |
gh pr create -t "Prepare for next version" -b "Please, merge to update version numbers and prepare for release $NEXT_VERSION." -H $BUILD_TAG -B $RELEASE_BRANCH |