Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[INFRA-1152] Fix release workflows #1180

Merged
merged 2 commits into from
Dec 12, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
58 changes: 58 additions & 0 deletions .github/workflows/dev-release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: DEV Release Workflow

on:
workflow_dispatch:
inputs:
version:
description: 'Version to release'
required: true
base-branch:
description: 'Base branch'
required: true

env:
COMMIT_EMAIL: [email protected]
DEFAULT_PYTHON_VERSION: "3.10"
GITHUB_TOKEN: ${{ secrets.RASASDK_GITHUB_TOKEN }}

jobs:
prepare-dev-release:
name: Prepare DEV Release
if: ${{ github.event_name == 'workflow_dispatch' }}
runs-on: ubuntu-24.04
steps:
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0

- name: Check-out base branch
run: |
git checkout $BASE_BRANCH
git branch
env:
BASE_BRANCH: ${{ github.event.inputs.base-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 }}
181 changes: 83 additions & 98 deletions .github/workflows/release-artifacts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,101 +5,70 @@ on:
tags:
- "*"
workflow_dispatch:
inputs:
tag_version:
description: 'Tag version:'
required: true

jobs:
build_docker_image_set_env:
name: Prepare environment for Docker build
runs-on: ubuntu-22.04
if: github.repository == 'RasaHQ/rasa-sdk'
define-release-version:
name: Define Release Version
runs-on: ubuntu-24.04

outputs:
# Tag name used for intermediate images created during Docker image builds, e.g. 3886 - a PR number
image_tag: ${{ steps.set_output.outputs.image_tag }}
# Return 'true' if tag version is equal or higher than the latest tagged rasa-sdk version
is_newest_version: ${{ steps.rasa_sdk_get_version.outputs.is_newest_version }}
version: ${{ steps.set-tag-version.outputs.tag_version }}

steps:
- name: Checkout git repository 🕝
uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3

# Set environment variables for a tag
#
# In this scenario, we've pushed the '2.4.1' tag
#
# Example output:
# IMAGE_TAG=2.4.1
- name: Set image_tag
- name: Define release version
id: set-tag-version
run: |
TAG_NAME=${GITHUB_REF#refs/tags/}
echo "IMAGE_TAG=${TAG_NAME}" >> $GITHUB_ENV
echo "image_tag=${{ env.IMAGE_TAG }}" >> $GITHUB_OUTPUT

- name: Set is_newest_version
id: rasa_sdk_get_version
run: |
# Get latest tagged rasa-sdk version
git fetch --depth=1 origin "+refs/tags/*:refs/tags/*"
# Fetch branch history
git fetch --prune --unshallow
LATEST_TAGGED_NON_ALPHA_RASA_SDK_VERSION=$(git tag | sort -r -V | grep -E "^[0-9.]+$" | head -n1)
CURRENT_TAG=${GITHUB_REF#refs/tags/}
# Return 'true' if tag version is equal or higher than the latest tagged rasa-sdk version
IS_NEWEST_VERSION=$((printf '%s\n%s\n' "${LATEST_TAGGED_NON_ALPHA_RASA_SDK_VERSION}" "$CURRENT_TAG" \
| sort -V -C && echo true || echo false) || true)


if [[ "${IS_NEWEST_VERSION}" == "true" && "$CURRENT_TAG" =~ ^[0-9.]+$ ]]; then
echo "is_newest_version=true" >> $GITHUB_OUTPUT
if [[ -n "$GITHUB_REF" && "$GITHUB_REF" == refs/tags/* ]]; then
echo "tag_version=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
elif [[ -n "$INPUT_TAG_VERSION" ]]; then
echo "tag_version=$INPUT_TAG_VERSION" >> $GITHUB_OUTPUT
else
echo "is_newest_version=false" >> $GITHUB_OUTPUT
echo "No tag version found."
exit 1
fi

build_docker_image:
name: Build Docker image
runs-on: ubuntu-22.04
needs: [ build_docker_image_set_env ]
if: github.repository == 'RasaHQ/rasa-sdk'

env:
INPUT_TAG_VERSION: ${{ github.event.inputs.tag_version }}

release-artifacts-docker:
name: Release Artifacts Docker
runs-on: ubuntu-24.04
needs: define-release-version

steps:
- name: Checkout git repository 🕝
uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3

- name: Check out code
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
ref: ${{ needs.define-release-version.outputs.version }}

- name: Set up QEMU
uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@0d103c3126aa41d772a8362f6aa67afac040f80c # v3.1.0

- name: Set environment variables
run: |
echo "IMAGE_TAG=${{ needs.build_docker_image_set_env.outputs.image_tag }}" >> $GITHUB_ENV

- name: Login to Docker Hub Registry 🔢
run: echo ${{ secrets.DOCKER_HUB_PASSWORD }} | docker login -u ${{ secrets.DOCKER_HUB_USERNAME }} --password-stdin || true

- name: Build and Push Docker image 📦
run: |
IS_NEWEST_VERSION=${{ needs.build_docker_image_set_env.outputs.is_newest_version }}

# Push image
IMAGE_NAME=rasa/rasa-sdk \
IMAGE_TAG=${GITHUB_REF#refs/tags/} \
IMAGE_NAME=rasa/rasa-sdk
IMAGE_TAG="${{ needs.define-release-version.outputs.version }}"
make build-and-push-multi-platform-docker

# Tag the image as latest
if [[ "${IS_NEWEST_VERSION}" == "true" ]]; then
IMAGE_TAG=latest \
make build-and-push-multi-platform-docker
fi

deploy:
name: Deploy to PyPI
runs-on: ubuntu-22.04

# deploy will only be run when there is a tag available
needs: [ build_docker_image ] # only run after all other stages succeeded


release-artifacts-pypi:
name: Release Artifacts PyPI
runs-on: ubuntu-24.04
needs: define-release-version

steps:
- name: Checkout git repository 🕝
uses: actions/checkout@8f4b7f84864484a7bf31766abe9204da3cbe65b3
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
ref: ${{ needs.define-release-version.outputs.version }}

- name: Set up Python 3.10 🐍
uses: actions/setup-python@d27e3f3d7c64b4bbf8e4abfb9b63b83e846e0435
Expand All @@ -126,37 +95,53 @@ jobs:
password: ${{ secrets.PYPI_TOKEN }}
skip_existing: true

release-atifacts-publish-release:
name: Release Artifacts Publish Release
runs-on: ubuntu-24.04
needs: [define-release-version, release-artifacts-docker, release-artifacts-pypi]

steps:
- name: Check out code
if: success()
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
with:
ref: ${{ needs.define-release-version.outputs.version }}

- name: Publish Release Notes 🗞
if: env.IS_TAG_BUILD
if: success()
env:
GITHUB_TAG: ${{ github.ref }}
GITHUB_TAG: ${{ needs.define-release-version.outputs.version }}
GITHUB_REPO_SLUG: ${{ github.repository }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ secrets.RASASDK_GITHUB_TOKEN }}
run: |
GITHUB_TAG=${GITHUB_TAG/refs\/tags\//}
sudo apt-get update
sudo apt-get -y install pandoc
pip install -U github3.py pep440_version_utils
python3 ${GITHUB_WORKSPACE}/scripts/publish_gh_release_notes.py
GITHUB_TAG=$GITHUB_TAG
pip install -U github3.py pep440-version-utils
python3 scripts/publish_gh_release_notes.py

- name: Get RASA SDK Version
env:
RASA_SDK_VERSION: ${{ github.ref }}
run: |
echo "RASA_SDK_VERSION=${RASA_SDK_VERSION/refs\/tags\//}" >> $GITHUB_ENV
release-artifact-slack-notifications:
name: Release Analytics Artifact Slack Notifications
runs-on: ubuntu-24.04
needs: [define-release-version, release-artifacts-docker, release-artifacts-pypi, release-atifacts-publish-release]

- name: Notify Slack 💬
if: success()
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_RELEASE_ASSISTANT_RELEASE_WEBHOOK }}
uses: Ilshidur/[email protected]
with:
args: "⚡ New *Rasa SDK* version ${{ env.RASA_SDK_VERSION }} has been released! Changelog: https://github.com/RasaHQ/rasa-sdk/blob/${{ env.RASA_SDK_VERSION }}/CHANGELOG.mdx"
if: always() # Ensures this job runs regardless of the result of previous jobs

- name: Notify Slack of Failure ⛔
if: failure()
steps:
- name: Notify Slack of successful release 💬
if: ${{ needs.release-artifacts-docker.result == 'success' && needs.release-artifacts-pypi.result == 'success' }}
uses: slackapi/slack-github-action@6c661ce58804a1a20f6dc5fbee7f0381b469e001 #v 1.25.0
with:
# Send notification to #release slack channel
channel-id: "C024Z61K9QU"
slack-message: ":rocket: New *Rasa SDK* version `${{ needs.define-release-version.outputs.version }}` has been released! More information can be found <https://github.com/RasaHQ/rasa-sdk/releases/tag/${{ needs.define-release-version.outputs.version }}|here>."
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_RELEASE_ASSISTANT_DEV_TRIBE_WEBHOOK }}
uses: Ilshidur/[email protected]
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}

- name: Notify Slack of unsuccessful release ⛔️
if: ${{ needs.release-artifacts-docker.result == 'success' && needs.release-artifacts-pypi.result == 'success' }}
uses: slackapi/slack-github-action@6c661ce58804a1a20f6dc5fbee7f0381b469e001 #v 1.25.0
with:
args: "⛔️ *Rasa SDK* version ${{ env.RASA_SDK_VERSION }} could not be released 😱 GitHub Actions: https://github.com/RasaHQ/rasa-sdk/actions?query=branch%3A${{ env.RASA_SDK_VERSION }}"
# Send notification to #devtribe slack channel
channel-id: "C061J0LGHU0"
slack-message: ":broken_heart: *Rasa SDK* release version `${{ needs.define-release-version.outputs.version }}` has failed! More information can be found <https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>."
env:
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }}
Loading