197 lines
6.3 KiB
YAML
197 lines
6.3 KiB
YAML
name: Release
|
|
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
version_bump:
|
|
description: "Version bump type"
|
|
type: choice
|
|
options:
|
|
- patch
|
|
- minor
|
|
- major
|
|
default: patch
|
|
required: true
|
|
|
|
jobs:
|
|
bump:
|
|
name: Bump version, tag, and create release
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: write
|
|
outputs:
|
|
new_version: ${{ steps.compute.outputs.new_version }}
|
|
tag: ${{ steps.tag.outputs.tag }}
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Compute new version
|
|
id: compute
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
BUMP="${{ inputs.version_bump }}"
|
|
CURRENT_VERSION=$(jq -r '.version' "MCPForUnity/package.json")
|
|
echo "Current version: $CURRENT_VERSION"
|
|
|
|
IFS='.' read -r MA MI PA <<< "$CURRENT_VERSION"
|
|
case "$BUMP" in
|
|
major)
|
|
((MA+=1)); MI=0; PA=0
|
|
;;
|
|
minor)
|
|
((MI+=1)); PA=0
|
|
;;
|
|
patch)
|
|
((PA+=1))
|
|
;;
|
|
*)
|
|
echo "Unknown version_bump: $BUMP" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
NEW_VERSION="$MA.$MI.$PA"
|
|
echo "New version: $NEW_VERSION"
|
|
echo "new_version=$NEW_VERSION" >> "$GITHUB_OUTPUT"
|
|
echo "current_version=$CURRENT_VERSION" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Compute tag
|
|
id: tag
|
|
env:
|
|
NEW_VERSION: ${{ steps.compute.outputs.new_version }}
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
echo "tag=v${NEW_VERSION}" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Update files to new version
|
|
env:
|
|
NEW_VERSION: ${{ steps.compute.outputs.new_version }}
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
echo "Updating MCPForUnity/package.json to $NEW_VERSION"
|
|
jq ".version = \"${NEW_VERSION}\"" MCPForUnity/package.json > MCPForUnity/package.json.tmp
|
|
mv MCPForUnity/package.json.tmp MCPForUnity/package.json
|
|
|
|
echo "Updating Server/pyproject.toml to $NEW_VERSION"
|
|
sed -i '0,/^version = ".*"/s//version = "'"$NEW_VERSION"'"/' "Server/pyproject.toml"
|
|
|
|
echo "Updating Server/README.md version references to v$NEW_VERSION"
|
|
sed -i 's|git+https://github.com/CoplayDev/unity-mcp@v[0-9]\+\.[0-9]\+\.[0-9]\+#subdirectory=Server|git+https://github.com/CoplayDev/unity-mcp@v'"$NEW_VERSION"'#subdirectory=Server|g' Server/README.md
|
|
|
|
echo "Updating root README.md fixed version examples to v$NEW_VERSION"
|
|
sed -i 's|https://github.com/CoplayDev/unity-mcp.git?path=/MCPForUnity#v[0-9]\+\.[0-9]\+\.[0-9]\+|https://github.com/CoplayDev/unity-mcp.git?path=/MCPForUnity#v'"$NEW_VERSION"'|g' README.md
|
|
|
|
echo "Updating docs/i18n/README-zh.md fixed version examples to v$NEW_VERSION"
|
|
sed -i 's|https://github.com/CoplayDev/unity-mcp.git?path=/MCPForUnity#v[0-9]\+\.[0-9]\+\.[0-9]\+|https://github.com/CoplayDev/unity-mcp.git?path=/MCPForUnity#v'"$NEW_VERSION"'|g' docs/i18n/README-zh.md
|
|
|
|
- name: Commit and push changes
|
|
env:
|
|
NEW_VERSION: ${{ steps.compute.outputs.new_version }}
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
git config user.name "GitHub Actions"
|
|
git config user.email "actions@github.com"
|
|
git add MCPForUnity/package.json "Server/pyproject.toml" Server/README.md README.md docs/i18n/README-zh.md
|
|
if git diff --cached --quiet; then
|
|
echo "No version changes to commit."
|
|
else
|
|
git commit -m "chore: bump version to ${NEW_VERSION}"
|
|
fi
|
|
|
|
BRANCH="${GITHUB_HEAD_REF:-${GITHUB_REF_NAME}}"
|
|
echo "Pushing to branch: $BRANCH"
|
|
git push origin "$BRANCH"
|
|
|
|
- name: Create and push tag
|
|
env:
|
|
TAG: ${{ steps.tag.outputs.tag }}
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
echo "Preparing to create tag $TAG"
|
|
|
|
if git ls-remote --tags origin | grep -q "refs/tags/$TAG$"; then
|
|
echo "Tag $TAG already exists on remote. Skipping tag creation."
|
|
exit 0
|
|
fi
|
|
|
|
git tag -a "$TAG" -m "Version ${TAG#v}"
|
|
git push origin "$TAG"
|
|
|
|
- name: Create GitHub release
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
tag_name: ${{ steps.tag.outputs.tag }}
|
|
name: ${{ steps.tag.outputs.tag }}
|
|
generate_release_notes: true
|
|
|
|
publish_docker:
|
|
name: Publish Docker image
|
|
needs:
|
|
- bump
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: read
|
|
steps:
|
|
- name: Check out the repo
|
|
uses: actions/checkout@v6
|
|
with:
|
|
ref: ${{ needs.bump.outputs.tag }}
|
|
fetch-depth: 0
|
|
|
|
- name: Build and push Docker image
|
|
uses: ./.github/actions/publish-docker
|
|
with:
|
|
docker_username: ${{ secrets.DOCKER_USERNAME }}
|
|
docker_password: ${{ secrets.DOCKER_PASSWORD }}
|
|
image: ${{ secrets.DOCKER_USERNAME }}/mcp-for-unity-server
|
|
version: ${{ needs.bump.outputs.new_version }}
|
|
include_branch_tags: "false"
|
|
context: .
|
|
dockerfile: Server/Dockerfile
|
|
platforms: linux/amd64
|
|
|
|
publish_pypi:
|
|
name: Publish Python distribution to PyPI
|
|
needs:
|
|
- bump
|
|
runs-on: ubuntu-latest
|
|
environment:
|
|
name: pypi
|
|
url: https://pypi.org/p/mcpforunityserver
|
|
permissions:
|
|
contents: read
|
|
id-token: write
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
ref: ${{ needs.bump.outputs.tag }}
|
|
fetch-depth: 0
|
|
|
|
# Inlined from .github/actions/publish-pypi to avoid nested composite action issue
|
|
# with pypa/gh-action-pypi-publish (see https://github.com/pypa/gh-action-pypi-publish/issues/338)
|
|
- name: Install uv
|
|
uses: astral-sh/setup-uv@v7
|
|
with:
|
|
version: "latest"
|
|
enable-cache: true
|
|
cache-dependency-glob: "Server/uv.lock"
|
|
|
|
- name: Build a binary wheel and a source tarball
|
|
shell: bash
|
|
run: uv build
|
|
working-directory: ./Server
|
|
|
|
- name: Publish distribution to PyPI
|
|
uses: pypa/gh-action-pypi-publish@release/v1
|
|
with:
|
|
packages-dir: Server/dist/
|