Commit Graph

9 Commits (7aa539c9fe55593dcab3cd9c98ac969a6a1f9d80)

Author SHA1 Message Date
dsarno 7aa539c9fe
fix: beta workflow no longer auto-bumps minor version (#673)
* fix: beta workflow no longer auto-bumps minor version

Changes to beta-release.yml:
- Beta now bumps patch instead of minor (9.3.1 → 9.3.2-beta.1)
- Allows patch releases without being forced into minor bumps
- Increment beta number if already a beta version

Changes to release.yml:
- Added "none" bump option to release beta version as-is
- Added version status display showing main/beta versions and
  what the release version will be

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* chore: remove redundant β character from version badge

The version string now includes "-beta.N" suffix, making the
separate β indicator redundant.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: improve version consistency in release workflows

beta-release.yml:
- Changed from already_beta to needs_update flag
- Only skip updates when computed version matches current
- PyPI versioning now detects existing prereleases and keeps
  the same base version instead of always bumping patch

release.yml:
- Preview step outputs stripped_version to GITHUB_OUTPUT
- Compute step uses previewed value for "none" bump option
- Added sanity check warning if versions diverge unexpectedly

This ensures the released version matches what was shown to the
user and prevents unnecessary patch bumps on consecutive beta runs.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 09:53:01 -08:00
dsarno cb08b0c59b
fix: Claude Code registration, thread-safety, and auto-detect beta server (#664) (#667)
* Fix Git URL in README for package installation

Updated the Git URL for adding the package to include the branch name.

* fix: Clean up Claude Code config from all scopes to prevent stale config conflicts (#664)

- Add RemoveFromAllScopes helper to remove from local/user/project scopes
- Use explicit --scope local when registering
- Update manual snippets to show multi-scope cleanup
- Handle legacy 'unityMCP' naming in all scopes

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: Make Claude Code status check thread-safe (#664)

The background thread status check was accessing main-thread-only Unity
APIs (Application.platform, EditorPrefs via HttpEndpointUtility and
AssetPathUtility), causing "GetString can only be called from main thread"
errors.

Now all main-thread-only values are captured before Task.Run() and passed
as parameters to CheckStatusWithProjectDir().

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: Persist client dropdown selection and remove dead IO code

- Remember last selected client in EditorPrefs so it restores on window
  reopen (prevents hiding config issues by defaulting to first client)
- Remove dead Outbound class, _outbox BlockingCollection, and writer
  thread that was never used (nothing ever enqueued to outbox)
- Keep only failure IO logs, remove verbose success logging

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* feat: Auto-detect beta package to enable UseBetaServer + workflow updates

- Add IsPreReleaseVersion() helper to detect beta/alpha/rc package versions
- UseBetaServer now defaults to true only for prerelease package versions
- Main branch users get false default, beta branch users get true default
- Update beta-release.yml to set Unity package version with -beta.1 suffix
- Update release.yml to merge beta → main and strip beta suffix
- Fix CodexConfigHelperTests to explicitly set UseBetaServer for determinism
- Use EditorConfigurationCache consistently for UseBetaServer access

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: Address code review feedback for thread-safety and validation

- Add thread-safe overloads for GetBetaServerFromArgs/List that accept
  pre-captured useBetaServer and gitUrlOverride parameters
- Use EditorConfigurationCache.SetUseBetaServer() in McpAdvancedSection
  for atomic cache + EditorPrefs update
- Add semver validation guard in beta-release.yml before version arithmetic
- Add semver validation guard in release.yml after stripping prerelease suffix

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: Complete thread-safety for GetBetaServerFromArgs overloads

- Add packageSource parameter to thread-safe overloads to avoid calling
  GetMcpServerPackageSource() (which uses EditorPrefs) from background threads
- Apply quoteFromPath logic to gitUrlOverride and packageSource paths to
  handle local paths with spaces correctly

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: Patch legacy connection pool in transport tests to prevent real Unity discovery

The auto-select tests were failing because they only patched PluginHub
but not the fallback legacy connection pool discovery. When PluginHub
returns no results, the middleware falls back to discovering instances
via get_unity_connection_pool(), which found the real running Unity.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 15:35:01 -08:00
Marcus Sanatan d3e42a1c32 docs: change README installation examples from fixed version to beta branch
Remove version-specific installation examples from README.md and README-zh.md, replacing with beta branch references. Update release workflow and update_versions.py to stop modifying README files during version bumps since they no longer contain version-specific URLs.
2026-01-23 01:14:54 -04:00
Marcus Sanatan f314a2367a
Update CI flow so that we bump from beta to main, and sync back (#614)
* feat: add release workflow concurrency control and main-to-beta sync

Add safeguards to prevent concurrent releases and ensure beta stays in sync:
- Add concurrency group to prevent overlapping release runs
- Enforce workflow runs only on main branch (fail if run elsewhere)
- Explicitly checkout and push to main (not dynamic branch)
- Fail if release tag already exists (was silently skipping)
- Add sync_beta job that merges main back into beta after release
- Add docs/guides/RELEASING.md with two

* feat: use PRs for version bumps and beta sync instead of direct pushes

For release notes to work we need for PRs from beta to main to not be squashed. We also want to enforce all changes to be via PRs, for humans. But that also limits GH Actions.

An alternative is creating a GH App with bypass permissions but that felt like overkill

Replace direct pushes to main/beta with PR-based workflow for better branch protection compatibility:
- Create temporary release/vX.Y.Z branch for version bump
- Open PR from release branch into main, enable auto-merge
- Poll for PR merge completion (up to 2 minutes) before creating tag
- Fetch merged main and create tag on merged commit
- Clean up release branch after tag creation
- Create PR to merge main into beta (skip if already
2026-01-22 21:36:54 -04:00
Marcus Sanatan 067eddd1da refactor: consolidate version update logic into Python script
Replace inline sed/jq commands in release workflow with tools/update_versions.py script that:
- Updates MCPForUnity/package.json, manifest.json, Server/pyproject.toml
- Updates version references in Server/README.md, README.md, docs/i18n/README-zh.md
- Supports --dry-run and --version flags
- Auto-detects version from package.json if not specified
- Provides better error handling and progress output
2026-01-22 16:08:21 -04:00
Bryan Thompson 1238eb1e84
feat: Add MCPB bundle for Claude Desktop installation (#580)
* feat: Add MCPB bundle for Claude Desktop installation

Add Model Context Protocol Bundle (MCPB) support enabling single-click
installation in Claude Desktop and other MCP hosts.

Changes:
- Add manifest.json with uvx-based server configuration
- Add icon.png for display in Claude Desktop
- Add .mcpbignore for build exclusions
- Add pre-built unity-mcp.mcpb bundle

🤖 Generated with [Claude Code](https://claude.com/claude-code)

* fix: Generate MCPB as release artifact instead of committing to repo

Address review feedback from @msanatan:
- Remove pre-built unity-mcp.mcpb and icon.png from repository
- Add tools/generate_mcpb.py script for bundle generation
- Update release.yml with new publish_mcpb job that:
  - Generates bundle using generate_mcpb.py
  - Uploads MCPB file as release artifact
- Update manifest.json to reference icon from docs/images/

The bundle is now generated automatically on each release,
keeping the repository clean while providing download artifacts.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

* fix: Use correct mcpb pack CLI syntax (positional args)

The mcpb CLI uses 'mcpb pack [directory] [output]' syntax,
not '--output' flag. Tested locally - bundle generates correctly.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: triepod-ai <199543909+triepod-ai@users.noreply.github.com>
2026-01-22 15:46:35 -04:00
Marcus Sanatan 9682e3c3e1
Marcus/update readme on release (#607)
* chore: update version references in README files during release

- Add version update for root README.md UPM fixed version examples
- Add version update for README-zh.md UPM and pip fixed version examples
- Include README.md and README-zh.md in release commit

* Update version in README

* Update example command version

* Update simplified Chinese readme to match english one

* The readme has changed

* docs: reorganize documentation into structured subdirectories

- Move README-zh.md to docs/i18n/README-zh.md
- Move development docs to docs/development/ (README-DEV.md, README-DEV-zh.md)
- Move user guides to docs/guides/ (CLI_USAGE.md, CURSOR_HELP.md, MCP_CLIENT_CONFIGURATORS.md)
- Move migration guides to docs/migrations/ (v5_MIGRATION.md, v6_NEW_UI_CHANGES.md, v8_NEW_NETWORKING_SETUP.md)
- Move reference docs to docs/reference/ (CUSTOM_TOOLS.md, TELEMETRY.md)
- Update all internal links in README
2026-01-21 22:35:24 -04:00
David Sarno 12fa0b7707 Fix PyPI publish by inlining steps in release workflow
The pypa/gh-action-pypi-publish action does not support being called
from nested composite actions due to GitHub Actions context variable
limitations (github.action_repository not propagating correctly).

Inline the publish steps directly in release.yml to avoid the issue.
See: https://github.com/pypa/gh-action-pypi-publish/issues/338

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 16:09:27 -08:00
Marcus Sanatan 41664178aa
CI Updates (#536)
* Update the major tag of a version as well when publishing to Docker

Useful for the asset store releases

* feat: trigger publish workflows automatically after version bump and release creation

It should work in theory, and correctly release to Docker and pypi via tags.

* feat: consolidate release workflows into single pipeline with reusable actions

Refactored version bump, Docker publish, and PyPI publish workflows into a unified release pipeline that runs sequentially. Created reusable composite actions for Docker and PyPI publishing to eliminate duplication.

Changes:
- Rename bump-version.yml to release.yml with three jobs: bump, publish_docker, publish_pypi
- Create .github/actions/publish-docker/action.yml with configurable inputs for image, version, branch
2026-01-08 16:37:52 -04:00