Bump Version #11
This file contains hidden or 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: Bump Version | |
on: | |
workflow_dispatch: | |
inputs: | |
version_type: | |
description: 'Type of version bump (patch, minor, major)' | |
required: true | |
default: 'patch' | |
type: choice | |
options: | |
- patch | |
- minor | |
- major | |
custom_version: | |
description: 'Custom version (optional, overrides version_type if provided)' | |
required: false | |
type: string | |
release_notes: | |
description: 'Release notes for this version' | |
required: false | |
type: string | |
jobs: | |
bump-version: | |
runs-on: ubuntu-latest | |
if: github.ref == 'refs/heads/main' | |
permissions: | |
contents: write | |
outputs: | |
new_version: ${{ steps.bump_version.outputs.new_version }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.13' | |
- name: Install dependencies | |
run: | | |
python -m pip install --upgrade pip | |
pip install toml | |
- name: Configure Git | |
run: | | |
git config user.name "GitHub Actions" | |
git config user.email "[email protected]" | |
- name: Bump version | |
id: bump_version | |
run: | | |
python -c ' | |
import toml | |
import sys | |
import re | |
import os | |
# Read the current version | |
with open("pyproject.toml", "r") as f: | |
config = toml.load(f) | |
current_version = config["project"]["version"] | |
print(f"Current version: {current_version}") | |
# Parse the current version | |
major, minor, patch = map(int, current_version.split(".")) | |
# Determine the new version | |
custom_version = "${{ github.event.inputs.custom_version }}" | |
if custom_version: | |
# Validate custom version format | |
if re.match(r"^\d+\.\d+\.\d+$", custom_version): | |
new_version = custom_version | |
else: | |
print("Error: Custom version must be in format X.Y.Z") | |
sys.exit(1) | |
else: | |
version_type = "${{ github.event.inputs.version_type }}" | |
if version_type == "patch": | |
patch += 1 | |
elif version_type == "minor": | |
minor += 1 | |
patch = 0 | |
elif version_type == "major": | |
major += 1 | |
minor = 0 | |
patch = 0 | |
else: | |
print(f"Error: Unknown version type: {version_type}") | |
sys.exit(1) | |
new_version = f"{major}.{minor}.{patch}" | |
# Update the version in pyproject.toml | |
config["project"]["version"] = new_version | |
with open("pyproject.toml", "w") as f: | |
toml.dump(config, f) | |
print(f"New version: {new_version}") | |
with open(os.environ["GITHUB_OUTPUT"], "a") as f: | |
f.write(f"new_version={new_version}\n") | |
' | |
- name: Commit and push changes | |
run: | | |
git add pyproject.toml | |
git commit -m "Bump version to ${{ steps.bump_version.outputs.new_version }}" | |
git push | |
- name: Create tag | |
run: | | |
git tag v${{ steps.bump_version.outputs.new_version }} | |
git push --tags | |
create-release: | |
needs: bump-version | |
runs-on: ubuntu-latest | |
if: github.ref == 'refs/heads/main' | |
permissions: | |
contents: write | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Create GitHub Release | |
uses: softprops/action-gh-release@v1 | |
with: | |
tag_name: v${{ needs.bump-version.outputs.new_version }} | |
name: Release v${{ needs.bump-version.outputs.new_version }} | |
body: ${{ github.event.inputs.release_notes || '' }} | |
generate_release_notes: ${{ github.event.inputs.release_notes == '' }} | |
draft: false | |
prerelease: false | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Notify Slack about new version | |
id: slack | |
uses: slackapi/[email protected] | |
with: | |
channel-id: ${{ secrets.SLACK_CHANNEL_ID }} | |
slack-message: | | |
:tada: *New Version Released!* | |
*Package:* codelogic-mcp-server v${{ needs.bump-version.outputs.new_version }} | |
*Released by:* ${{ github.actor }} | |
${{ github.event.inputs.release_notes || '_No release notes provided._' }} | |
:link: <${{ github.server_url }}/${{ github.repository }}/releases/tag/v${{ needs.bump-version.outputs.new_version }}|View Release on GitHub> | |
env: | |
SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} |