forked from cohere-ai/cohere-toolkit
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #2 from EugeneLightsOn/automated-release
Test automated release workflow - DRAFT 1 PR
- Loading branch information
Showing
1 changed file
with
86 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
name: Automated Release | ||
|
||
on: | ||
push: | ||
branches: | ||
- main | ||
|
||
jobs: | ||
check-and-release: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
# Checkout | ||
- name: Checkout code | ||
uses: actions/checkout@v3 | ||
|
||
# Get the latest release version | ||
- name: Get latest release version | ||
id: get_latest_release | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
run: | | ||
latest_release=$(gh release list --limit 1 --json tagName --jq '.[0].tagName' || echo "v0.0.0") | ||
echo "latest_release=${latest_release}" >> $GITHUB_ENV | ||
echo "latest_release=${latest_release}" | ||
# Extract version from _RELEASE_VERSION constant in main.py | ||
- name: Extract version from main.py | ||
id: get_file_version | ||
run: | | ||
file_version=$(grep '_RELEASE_VERSION' src/backend/main.py | sed -E 's/.*"([^"]+)".*/\1/') | ||
echo "file_version=${file_version}" >> $GITHUB_ENV | ||
echo "file_version=${file_version}" | ||
# Check if new version is greater | ||
- name: Check if new version is greater | ||
id: check_version | ||
run: | | ||
latest_version_number=$(echo "$latest_release" | sed 's/^v//') | ||
file_version_number=$(echo "$file_version" | sed 's/^v//') | ||
# Get major, minor, and patch from the versions | ||
IFS='.' read -r l_major l_minor l_patch <<<"$latest_version_number" | ||
IFS='.' read -r f_major f_minor f_patch <<<"$file_version_number" | ||
# Compare major, minor, and patch versions | ||
if [ "$f_major" -gt "$l_major" ] || | ||
([ "$f_major" -eq "$l_major" ] && [ "$f_minor" -gt "$l_minor" ]) || | ||
([ "$f_major" -eq "$l_major" ] && [ "$f_minor" -eq "$l_minor" ] && [ "$f_patch" -gt "$l_patch" ]); then | ||
echo "new_version_needed=true" >> $GITHUB_ENV | ||
echo "NEED TO CREATE A NEW RELEASE" | ||
else | ||
echo "new_version_needed=false" >> $GITHUB_ENV | ||
echo "NO NEED TO CREATE A NEW RELEASE" | ||
exit 0 | ||
fi | ||
# Changelog generation | ||
- name: Generate pull request changelog | ||
id: generate_changelog | ||
run: | | ||
echo "Generating changelog from ${{ env.latest_release }} to ${{ env.file_version }}..." | ||
changelog=$(gh pr list --state merged --base main --search "merged:>${{ env.latest_release }}" --json title --jq '.[].title') | ||
if [[ -z "$changelog" ]]; then | ||
echo "No pull requests found since the last release." | ||
echo "changelog=No changes since the last release." >> $GITHUB_ENV | ||
else | ||
echo "Changelog:" | ||
echo "$changelog" | ||
echo "changelog=$changelog" >> $GITHUB_ENV | ||
fi | ||
# Create a new release if the version is greater | ||
- name: Create new release | ||
if: env.new_version_needed == 'true' | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
run: | | ||
release_date=$(date +'%Y-%m-%d') | ||
release_title="${release_date} (${file_version})" | ||
description="**Full Changelog**: https://github.com/${GITHUB_REPOSITORY}/compare/${latest_release}...${file_version}" | ||
echo "Creating release with title: $release_title" | ||
echo "Creating release with notes: $description" | ||
gh release create "${file_version}" \ | ||
--title "$release_title" --draft \ | ||
--notes "$description" | ||
echo "Release created successfully." |