Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
bb8fcb0
Gate package release commit matching on release-please subjects
hatayama Jul 2, 2026
a6d7ce4
Introduce a repo-root Go workspace ahead of the module split
hatayama Jul 2, 2026
0e467a8
Extract shared CLI packages into an independent common module
hatayama Jul 2, 2026
0e6f94a
Extract the dispatcher into its own Go module
hatayama Jul 2, 2026
8cf7e92
Extract release automation into its own Go module
hatayama Jul 2, 2026
252ebd0
Bump dispatcherVersion for the module split
hatayama Jul 2, 2026
4621c80
Read the bump guard base contract through the legacy fallback
hatayama Jul 2, 2026
ab52614
Fix dispatcher release target test fixture to use the split contract …
hatayama Jul 2, 2026
19721c0
Rename the cli module to project-runner and move shared tooling to th…
hatayama Jul 2, 2026
d7101bb
Fix the recovery smoke default uloop path for the repo-root dist tree
hatayama Jul 2, 2026
f39e2b4
Scan all four Go modules in the code complexity checks
hatayama Jul 2, 2026
5c4e863
Collapse the duplicated legacy contract fallback into one helper
hatayama Jul 2, 2026
a248469
Merge remote-tracking branch 'origin/v3-beta' into refactor/directory…
hatayama Jul 2, 2026
3b7d1ee
Extract contract-file-at-ref helpers into a dedicated file
hatayama Jul 2, 2026
d1af0fa
Move architecture tests to release-automation and validate all modules
hatayama Jul 2, 2026
87e8a61
Update docs and review config to the split module paths
hatayama Jul 2, 2026
b7caf49
Treat lowercase does-not-exist git errors as missing files
hatayama Jul 2, 2026
6d60dc8
Cover every common package in the dispatcher release input patterns
hatayama Jul 2, 2026
35e4628
Include go.work files in the native CLI release input paths
hatayama Jul 2, 2026
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
4 changes: 2 additions & 2 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ reviews:
path_instructions:
- path: "**/*"
instructions: |
For changes that touch the Unity package/native CLI IPC contract, explicitly check whether the integer protocol generation must be bumped. Relevant IPC surfaces include JSON-RPC method names, request/response shapes, request metadata under `uloop`, readiness/dispatch/heartbeat handshakes, tool catalog schema, `cli/internal/unityipc/**`, `Packages/src/Editor/Infrastructure/Api/**`, `cli/contract.json`, and `CliConstants.REQUIRED_CLI_PROTOCOL_VERSION`.
For changes that touch the Unity package/native CLI IPC contract, explicitly check whether the integer protocol generation must be bumped. Relevant IPC surfaces include JSON-RPC method names, request/response shapes, request metadata under `uloop`, readiness/dispatch/heartbeat handshakes, tool catalog schema, `common/unityipc/**`, `Packages/src/Editor/Infrastructure/Api/**`, `common/clicontract/contract.json`, and `CliConstants.REQUIRED_CLI_PROTOCOL_VERSION`.

The compatibility gate is an exact protocol match, not a release-semver range. If a change makes a CLI/package from the previous protocol generation unable to interoperate, require both `cli/contract.json` `protocolVersion` and `CliConstants.REQUIRED_CLI_PROTOCOL_VERSION` to be incremented in the same PR.
The compatibility gate is an exact protocol match, not a release-semver range. If a change makes a CLI/package from the previous protocol generation unable to interoperate, require both `common/clicontract/contract.json` `protocolVersion` and `CliConstants.REQUIRED_CLI_PROTOCOL_VERSION` to be incremented in the same PR.

Do not request a protocol bump for ordinary CLI features, bug fixes, UI changes, documentation, or additive wire-format changes that older counterparts can safely ignore. `projectRunnerVersion` and `default-tools.json` `version` are release-please managed release metadata. If a PR bumps `CliConstants.REQUIRED_CLI_PROTOCOL_VERSION`, require a matching update to `CliConstants.MINIMUM_REQUIRED_PROJECT_RUNNER_VERSION` after the corresponding published project runner release tag is available, because setup must install a project runner release that advertises the required protocol.
chat:
Expand Down
22 changes: 11 additions & 11 deletions .github/workflows/build-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c
with:
go-version-file: cli/.go-version
go-version-file: .go-version
cache: false

- name: Test release automation shell helpers
Expand All @@ -50,24 +50,24 @@ jobs:

- name: Check IPC protocol reminder
if: github.event_name == 'pull_request'
working-directory: cli
working-directory: tools/release-automation
run: go run ./cmd/check-ipc-protocol-reminder --base "origin/${{ github.base_ref }}" --head HEAD

- name: Check protocol minimum version bump
if: github.event_name == 'pull_request' && !(startsWith(github.head_ref, 'release-please--branches--') && (github.event.pull_request.user.login == 'github-actions[bot]' || github.event.pull_request.user.login == 'release-please[bot]'))
working-directory: cli
working-directory: tools/release-automation
env:
GH_TOKEN: ${{ github.token }}
run: go run ./cmd/check-protocol-minimum-version --base "origin/${{ github.base_ref }}" --head HEAD

- name: Check dispatcher minimum version
if: github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch'
working-directory: cli
working-directory: tools/release-automation
run: go run ./cmd/check-dispatcher-minimum-version

- name: Check dispatcher version bump
if: github.event_name == 'pull_request'
working-directory: cli
working-directory: tools/release-automation
run: go run ./cmd/check-dispatcher-version-bump --base "origin/${{ github.base_ref }}" --head HEAD

- name: Install golangci-lint
Expand All @@ -91,7 +91,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c
with:
go-version-file: cli/.go-version
go-version-file: .go-version
cache: false

# Windows-only code paths (named pipe transport, winio deadlines, typed error
Expand All @@ -100,7 +100,7 @@ jobs:
# separators, missing .exe suffixes, TCP-only fixtures) that predate this job.
- name: Test native Go CLI transport on Windows
shell: bash
run: cd cli && go test ./internal/unityipc/
run: cd common && go test ./unityipc/

- name: Test install release filter in Git Bash
shell: bash
Expand Down Expand Up @@ -133,10 +133,10 @@ jobs:
test -d "Packages/src/Editor" || exit 1
test ! -d "Packages/src/Cli~" || exit 1
test -d "Packages/src/Editor/CliOnlyTools~" || exit 1
test -d "cli" || exit 1
test -f "cli/go.mod" || exit 1
test -d "cli/cmd" || exit 1
test -d "cli/internal" || exit 1
test -d "project-runner" || exit 1
test -f "project-runner/go.mod" || exit 1
test -d "project-runner/cmd" || exit 1
test -d "project-runner/internal" || exit 1

echo "✅ Unity Package structure is valid"

Expand Down
16 changes: 11 additions & 5 deletions .github/workflows/code-complexity.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@ on:
pull_request:
branches: [ main, v3-beta ]
paths:
- 'cli/**/*.go'
- 'cli/.go-version'
- 'cli/.golangci-complexity.yml'
- 'common/**/*.go'
Comment thread
cubic-dev-ai[bot] marked this conversation as resolved.
- 'dispatcher/**/*.go'
- 'project-runner/**/*.go'
- 'tools/release-automation/**/*.go'
- '.go-version'
- '.golangci-complexity.yml'
- 'Packages/src/**/*.cs'
- 'tools/UnityCliLoop.CodeComplexity/**'
- 'tests/UnityCliLoop.CodeComplexity.Tests/**'
Expand All @@ -29,7 +32,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c
with:
go-version-file: cli/.go-version
go-version-file: .go-version
cache: false

- name: Setup .NET
Expand All @@ -54,7 +57,10 @@ jobs:
if: always()
run: |
mkdir -p artifacts
(cd cli && golangci-lint run --config .golangci-complexity.yml --issues-exit-code=0 --show-stats=false --output.json.path ../artifacts/go-code-complexity.json ./...)
for module_dir in common dispatcher project-runner tools/release-automation; do
artifact_name="go-code-complexity-$(printf '%s' "$module_dir" | tr '/' '-').json"
(cd "$module_dir" && golangci-lint run --config "$GITHUB_WORKSPACE/.golangci-complexity.yml" --issues-exit-code=0 --show-stats=false --output.json.path "$GITHUB_WORKSPACE/artifacts/$artifact_name" ./...)
done
dotnet run --project tools/UnityCliLoop.CodeComplexity/UnityCliLoop.CodeComplexity.csproj -- \
--root . \
--max-complexity 15 \
Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/dispatcher-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ jobs:
if: steps.release.outputs.publish == 'true' || steps.release.outputs.release == 'true'
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c
with:
go-version-file: cli/.go-version
cache-dependency-path: cli/**/go.sum
go-version-file: .go-version
cache-dependency-path: '**/go.sum'

- name: Install golangci-lint
if: steps.release.outputs.publish == 'true'
Expand All @@ -95,7 +95,7 @@ jobs:
if: steps.release.outputs.publish == 'true' && steps.release.outputs.dry_run != 'true'
uses: actions/attest@59d89421af93a897026c735860bf21b6eb4f7b26
with:
subject-path: cli/dist/dispatcher-release/*
subject-path: dist/dispatcher-release/*

- name: Verify dispatcher asset attestations
if: steps.release.outputs.publish == 'true' && steps.release.outputs.dry_run != 'true'
Expand All @@ -106,7 +106,7 @@ jobs:
run: |
set -eu

for asset_path in cli/dist/dispatcher-release/*; do
for asset_path in dist/dispatcher-release/*; do
gh attestation verify "${asset_path}" \
--repo "${GITHUB_REPOSITORY}" \
--signer-workflow "${SIGNER_WORKFLOW}"
Expand All @@ -117,7 +117,7 @@ jobs:
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
with:
name: dispatcher-release-assets-${{ steps.release.outputs.tag }}
path: cli/dist/dispatcher-release/*
path: dist/dispatcher-release/*
if-no-files-found: error

- name: Create or reuse draft dispatcher release
Expand Down Expand Up @@ -194,7 +194,7 @@ jobs:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_TAG: ${{ steps.release.outputs.tag }}
run: |
gh release upload "${RELEASE_TAG}" cli/dist/dispatcher-release/* --clobber
gh release upload "${RELEASE_TAG}" dist/dispatcher-release/* --clobber

- name: Verify remote dispatcher release assets
if: steps.release.outputs.publish == 'true' && steps.release.outputs.dry_run != 'true'
Expand Down Expand Up @@ -246,4 +246,4 @@ jobs:
- name: Dry run summary
if: steps.release.outputs.publish == 'true' && steps.release.outputs.dry_run == 'true'
run: |
ls -lh cli/dist/dispatcher-release
ls -lh dist/dispatcher-release
16 changes: 8 additions & 8 deletions .github/workflows/native-cli-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,8 +75,8 @@ jobs:
if: steps.release.outputs.publish == 'true' || steps.release.outputs.release == 'true'
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c
with:
go-version-file: cli/.go-version
cache-dependency-path: cli/**/go.sum
go-version-file: .go-version
cache-dependency-path: '**/go.sum'

- name: Install golangci-lint
if: steps.release.outputs.publish == 'true'
Expand All @@ -100,7 +100,7 @@ jobs:
if: steps.release.outputs.publish == 'true' && steps.release.outputs.dry_run != 'true'
uses: actions/attest@59d89421af93a897026c735860bf21b6eb4f7b26
with:
subject-path: cli/dist/release/*
subject-path: dist/release/*

- name: Verify native CLI asset attestations
if: steps.release.outputs.publish == 'true' && steps.release.outputs.dry_run != 'true'
Expand All @@ -111,7 +111,7 @@ jobs:
run: |
set -eu

for asset_path in cli/dist/release/*; do
for asset_path in dist/release/*; do
gh attestation verify "${asset_path}" \
--repo "${GITHUB_REPOSITORY}" \
--signer-workflow "${SIGNER_WORKFLOW}"
Expand All @@ -122,7 +122,7 @@ jobs:
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a
with:
name: native-cli-release-assets-${{ steps.release.outputs.tag }}
path: cli/dist/release/*
path: dist/release/*
if-no-files-found: error

- name: Write release notes
Expand Down Expand Up @@ -151,7 +151,7 @@ jobs:
exit 1
}
}
' cli/CHANGELOG.md > "${NOTES_FILE}"
' project-runner/CHANGELOG.md > "${NOTES_FILE}"

echo "RELEASE_NOTES_FILE=${NOTES_FILE}" >> "$GITHUB_ENV"

Expand Down Expand Up @@ -212,7 +212,7 @@ jobs:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_TAG: ${{ steps.release.outputs.tag }}
run: |
gh release upload "${RELEASE_TAG}" cli/dist/release/* --clobber
gh release upload "${RELEASE_TAG}" dist/release/* --clobber

- name: Verify remote release assets
if: steps.release.outputs.publish == 'true' && steps.release.outputs.dry_run != 'true'
Expand Down Expand Up @@ -281,4 +281,4 @@ jobs:
- name: Dry run summary
if: steps.release.outputs.publish == 'true' && steps.release.outputs.dry_run == 'true'
run: |
ls -lh cli/dist/release
ls -lh dist/release
4 changes: 2 additions & 2 deletions .github/workflows/protocol-minimum-version-warning.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,14 @@ jobs:
- name: Setup Go
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c
with:
go-version-file: cli/.go-version
go-version-file: .go-version
cache: false

- name: Fetch pull request merge
run: git fetch --no-tags origin "pull/${{ github.event.pull_request.number }}/merge:protocol-minimum-version-pr-merge"

- name: Comment on protocol minimum version guard
working-directory: cli
working-directory: tools/release-automation
env:
GH_TOKEN: ${{ github.token }}
PR_NUMBER: ${{ github.event.pull_request.number }}
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/release-please.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,8 @@ jobs:
- name: Setup Go for package release sync
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c
with:
go-version-file: cli/.go-version
cache-dependency-path: cli/**/go.sum
go-version-file: .go-version
cache-dependency-path: '**/go.sum'

- name: 🏷️ Sync release-please package releases
id: package_release_sync
Expand Down Expand Up @@ -108,12 +108,12 @@ jobs:
if: steps.target.outputs.branch == 'v3-beta' && steps.release_commit.outputs.skip != 'true' && steps.package_release_sync.outputs.ready != 'false' && steps.release.outputs.prs_created == 'true'
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c
with:
go-version-file: cli/.go-version
cache-dependency-path: cli/**/go.sum
go-version-file: .go-version
cache-dependency-path: '**/go.sum'

- name: Dispatch release PR checks
if: steps.target.outputs.branch == 'v3-beta' && steps.release_commit.outputs.skip != 'true' && steps.package_release_sync.outputs.ready != 'false' && steps.release.outputs.prs_created == 'true'
working-directory: cli
working-directory: tools/release-automation
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TARGET_BRANCH: ${{ steps.target.outputs.branch }}
Expand Down
32 changes: 20 additions & 12 deletions .github/workflows/security-scan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,27 @@ on:
paths:
- 'Packages/src/**/*.cs'
- 'Assets/**/*.cs'
- 'cli/**/*.go'
- 'cli/.golangci.yml'
- 'cli/.go-version'
- 'cli/**/go.mod'
- 'cli/**/go.sum'
- 'common/**/*.go'
- 'dispatcher/**/*.go'
- 'project-runner/**/*.go'
- 'tools/release-automation/**/*.go'
- '.golangci.yml'
- '.go-version'
- '**/go.mod'
- '**/go.sum'
pull_request:
branches: [ main, v3-beta ]
paths:
- 'Packages/src/**/*.cs'
- 'Assets/**/*.cs'
- 'cli/**/*.go'
- 'cli/.golangci.yml'
- 'cli/.go-version'
- 'cli/**/go.mod'
- 'cli/**/go.sum'
- 'common/**/*.go'
- 'dispatcher/**/*.go'
- 'project-runner/**/*.go'
- 'tools/release-automation/**/*.go'
- '.golangci.yml'
- '.go-version'
- '**/go.mod'
- '**/go.sum'
workflow_dispatch:

jobs:
Expand Down Expand Up @@ -114,7 +120,7 @@ jobs:
- name: Setup Go
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c
with:
go-version-file: cli/.go-version
go-version-file: .go-version
cache: false

- name: Install golangci-lint
Expand All @@ -132,4 +138,6 @@ jobs:

- name: Run govulncheck
run: |
(cd cli && govulncheck ./...)
for module_dir in common dispatcher project-runner tools/release-automation; do
(cd "$module_dir" && govulncheck ./...)
done
7 changes: 1 addition & 6 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -112,12 +112,7 @@ yarn-error.log*
**/[Oo]bj/

# Native Go CLI build and release outputs
/cli/dist/
!cli/Core~/dist/darwin-arm64/uloop-core
!cli/Core~/dist/darwin-amd64/uloop-core
!cli/Core~/dist/windows-amd64/uloop-core.exe
cli/Dispatcher~/dist/
cli/Dispatcher~/release/
/dist/

# Environment configuration files
.env
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"Packages/src": "3.0.0-beta.48",
"cli": "3.0.0-beta.46"
"project-runner": "3.0.0-beta.46"
}
Loading