Skip to content

[INFRA-1118] Add minor release detection #12

[INFRA-1118] Add minor release detection

[INFRA-1118] Add minor release detection #12

Workflow file for this run

name: Release Workflow
on:
workflow_dispatch:
inputs:
version:
description: 'Version to release'
required: true
pull_request:
branches:
- main
- '[0-9]+.[0-9]+.x'
types: [closed]
env:
COMMIT_EMAIL: [email protected]
DEFAULT_PYTHON_VERSION: "3.10"
GITHUB_TOKEN: ${{ secrets.RASASDK_GITHUB_TOKEN }}
jobs:
prepare-the-release:
name: Prepare the Release
if: ${{ github.event_name == 'workflow_dispatch' }}
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
- name: Minor Release Check
id: minor_release
run: |
version="$INPUT_VERSION"
# Check if version is in format number.number.number
if ! [[ $version =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "Invalid version format. It should be in format 'number.number.number'."
exit 1
fi
# Extract the third number
IFS='.' read -r -a version_parts <<< "$version"
third_number="${version_parts[2]}"
# Check if it's a minor release
if [ "$third_number" -eq 0 ]; then
echo "Minor release detected."
echo "is_minor=true" >> $GITHUB_ENV
else
echo "Not a minor release. Skipping branch creation."
echo "is_minor=false" >> $GITHUB_ENV
fi
- name: Create and Push New Release Branch
if: env.is_minor == 'true'
run: |
version="$INPUT_VERSION"
IFS='.' read -r -a version_parts <<< "$version"
release_branch="${version_parts[0]}.${version_parts[1]}.x"
git fetch origin
git checkout origin/main
git checkout -b $release_branch
git push origin $release_branch
- name: Check-out Release Branch
run: |
version="$INPUT_VERSION"
IFS='.' read -r -a version_parts <<< "$version"
release_branch="${version_parts[0]}.${version_parts[1]}.x"
echo "base_branch=${version_parts[0]}.${version_parts[1]}.x" >> $GITHUB_ENV
echo $base_branch
git checkout $release_branch
git branch
- name: Setup Python Environment
uses: ./.github/actions/setup-python-env
with:
PYTHON_VERSION: ${{ env.DEFAULT_PYTHON_VERSION }}
- name: Prepare the release
run: |
git config user.name "rasabot"
git config user.email "[email protected]"
poetry run python scripts/release.py --next_version $INPUT_VERSION
env:
INPUT_VERSION: ${{ github.event.inputs.version }}
- name: Create pull request
uses: devops-infra/action-pull-request@e66e2ba93519dc63b9884a26e620e2fd0cffab2c # v0.5.5
with:
github_token: ${{ env.GITHUB_TOKEN }}
source_branch: prepare-release-${{ env.INPUT_VERSION }}
target_branch: ${{ env.base_branch }}
body: "**Automated pull request for Rasa SDK release.**"
title: Release ${{ github.event.inputs.version }}
env:
INPUT_VERSION: ${{ github.event.inputs.version }}
if_merged_tag_release:
name: Tag Release Version
if: startsWith(github.head_ref, 'prepare-release-') && github.event.pull_request.merged == true
runs-on: ubuntu-22.04
steps:
- name: Checkout git repository 🕝
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
with:
token: ${{ secrets.RELEASE_TAGGER_PAT }}
- name: Set up Python ${{ env.DEFAULT_PYTHON_VERSION }} 🐍
uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0
with:
python-version: ${{ env.DEFAULT_PYTHON_VERSION }}
- name: Read Poetry Version 🔢
run: |
echo "POETRY_VERSION=$(scripts/poetry-version.sh)" >> $GITHUB_ENV
shell: bash
- name: Install poetry 🦄
uses: Gr1N/setup-poetry@15821dc8a61bc630db542ae4baf6a7c19a994844 # v8
with:
poetry-version: ${{ env.POETRY_VERSION }}
- name: Load Poetry Cached Libraries ⬇
id: cache-poetry
uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # v4.0.0
with:
path: .venv
key: ${{ runner.os }}-poetry-${{ env.POETRY_VERSION }}-${{ env.DEFAULT_PYTHON_VERSION }}-${{ hashFiles('**/poetry.lock') }}-${{ secrets.POETRY_CACHE_VERSION }}
restore-keys: ${{ runner.os }}-poetry-${{ env.DEFAULT_PYTHON_VERSION }}
- name: Clear Poetry cache
if: steps.cache-poetry.outputs.cache-hit == 'true' && contains(github.event.pull_request.labels.*.name, 'tools:clear-poetry-cache-unit-tests')
run: rm -r .venv
- name: Create virtual environment
if: steps.cache-poetry.outputs.cache-hit != 'true' || contains(github.event.pull_request.labels.*.name, 'tools:clear-poetry-cache-unit-tests')
run: python -m venv create .venv
- name: Set up virtual environment
run: poetry config virtualenvs.in-project true
- name: Install Dependencies 📦
# Poetry intermittently fails to install dependency if it is not PEP 517 compliant
# This is a workaround for that issue
run: |
sudo apt-get -y install libpq-dev
make install
- name: Configure git
run: |
git config --global user.email ${{ env.COMMIT_EMAIL }}
git config --global user.name "Github Actions"
- name: Tag Release
run: make tag-release