From 446742d2e04f0ae9dfd75dace840dde8d7999a64 Mon Sep 17 00:00:00 2001 From: hatayama Date: Sat, 4 Jul 2026 16:32:38 +0900 Subject: [PATCH 1/2] Shrink the project runner pin schema to projectRunnerVersion and minimumDispatcherVersion The pin carried four fields no runtime code reads: requiredProtocolVersion (the IPC protocol is checked on the wire, never via the pin), packageName, packageVersion, and schemaVersion. Dead fields in the pin invite drift and each one is an extra release-please stamp or guard to keep consistent, so the pin now declares only the two values the dispatcher actually consumes. Older dispatchers reject a pin without schemaVersion; this one-time format break is accepted because pre-release dispatchers are updated manually. - Drop the removed fields from the dispatcher pin struct, its validation, and the release-automation guard, updating fixtures accordingly - Remove the two $.packageVersion pin stamps from release-please-config.json - Keep the two-pin identity and pin-to-contract projectRunnerVersion checks --- .uloop/project-runner-pin.json | 6 +--- .../Tests/Editor/CliPinSynchronizerTests.cs | 14 ++++----- Packages/src/project-runner-pin.json | 6 +--- .../protocol_version_consistency_test.go | 30 ++----------------- .../internal/dispatcher/dispatcher_pin.go | 7 ----- .../internal/dispatcher/dispatcher_test.go | 6 ++-- .../dispatcher_minimum_version_guard.go | 4 --- .../dispatcher_minimum_version_guard_test.go | 4 +-- release-please-config.json | 10 ------- scripts/test-release-please-config.sh | 6 +--- ...st-sync-release-please-package-releases.sh | 4 --- 11 files changed, 17 insertions(+), 80 deletions(-) diff --git a/.uloop/project-runner-pin.json b/.uloop/project-runner-pin.json index d6a77070cc..9bcd8c1482 100644 --- a/.uloop/project-runner-pin.json +++ b/.uloop/project-runner-pin.json @@ -1,8 +1,4 @@ { "projectRunnerVersion": "3.0.0-beta.46", - "minimumDispatcherVersion": "3.0.1-beta.6", - "packageName": "io.github.hatayama.uloopmcp", - "packageVersion": "3.0.0-beta.48", - "requiredProtocolVersion": 3, - "schemaVersion": 1 + "minimumDispatcherVersion": "3.0.1-beta.6" } diff --git a/Assets/Tests/Editor/CliPinSynchronizerTests.cs b/Assets/Tests/Editor/CliPinSynchronizerTests.cs index 08dddbcfe4..92a04d38c5 100644 --- a/Assets/Tests/Editor/CliPinSynchronizerTests.cs +++ b/Assets/Tests/Editor/CliPinSynchronizerTests.cs @@ -26,7 +26,7 @@ public void SyncProjectPinFile_WhenDestinationMissing_ShouldCopyPackagePin() Directory.CreateDirectory(projectRoot); File.WriteAllText( Path.Combine(packageRoot, UnityCliLoopConstants.ULOOP_PROJECT_RUNNER_PIN_FILE_NAME), - "{\"schemaVersion\":1}"); + "{\"projectRunnerVersion\":\"3.0.0\"}"); bool changed = CliPinSynchronizer.SyncProjectPinFile(packageRoot, projectRoot); @@ -37,7 +37,7 @@ public void SyncProjectPinFile_WhenDestinationMissing_ShouldCopyPackagePin() projectRoot, UnityCliLoopConstants.ULOOP_DIR, UnityCliLoopConstants.ULOOP_PROJECT_RUNNER_PIN_FILE_NAME)), - Is.EqualTo("{\"schemaVersion\":1}")); + Is.EqualTo("{\"projectRunnerVersion\":\"3.0.0\"}")); } finally { @@ -64,8 +64,8 @@ public void SyncProjectPinFile_WhenDestinationMatches_ShouldSkipWrite() string destinationPath = Path.Combine( projectUloopRoot, UnityCliLoopConstants.ULOOP_PROJECT_RUNNER_PIN_FILE_NAME); - File.WriteAllText(sourcePath, "{\"schemaVersion\":1}"); - File.WriteAllText(destinationPath, "{\"schemaVersion\":1}"); + File.WriteAllText(sourcePath, "{\"projectRunnerVersion\":\"3.0.0\"}"); + File.WriteAllText(destinationPath, "{\"projectRunnerVersion\":\"3.0.0\"}"); DateTime previousWriteTime = File.GetLastWriteTimeUtc(destinationPath); bool changed = CliPinSynchronizer.SyncProjectPinFile(packageRoot, projectRoot); @@ -94,16 +94,16 @@ public void SyncProjectPinFile_WhenPackagePinChanges_ShouldUpdateProjectPin() Directory.CreateDirectory(projectUloopRoot); File.WriteAllText( Path.Combine(packageRoot, UnityCliLoopConstants.ULOOP_PROJECT_RUNNER_PIN_FILE_NAME), - "{\"schemaVersion\":2}"); + "{\"projectRunnerVersion\":\"3.0.1\"}"); string destinationPath = Path.Combine( projectUloopRoot, UnityCliLoopConstants.ULOOP_PROJECT_RUNNER_PIN_FILE_NAME); - File.WriteAllText(destinationPath, "{\"schemaVersion\":1}"); + File.WriteAllText(destinationPath, "{\"projectRunnerVersion\":\"3.0.0\"}"); bool changed = CliPinSynchronizer.SyncProjectPinFile(packageRoot, projectRoot); Assert.That(changed, Is.True); - Assert.That(File.ReadAllText(destinationPath), Is.EqualTo("{\"schemaVersion\":2}")); + Assert.That(File.ReadAllText(destinationPath), Is.EqualTo("{\"projectRunnerVersion\":\"3.0.1\"}")); } finally { diff --git a/Packages/src/project-runner-pin.json b/Packages/src/project-runner-pin.json index d6a77070cc..9bcd8c1482 100644 --- a/Packages/src/project-runner-pin.json +++ b/Packages/src/project-runner-pin.json @@ -1,8 +1,4 @@ { "projectRunnerVersion": "3.0.0-beta.46", - "minimumDispatcherVersion": "3.0.1-beta.6", - "packageName": "io.github.hatayama.uloopmcp", - "packageVersion": "3.0.0-beta.48", - "requiredProtocolVersion": 3, - "schemaVersion": 1 + "minimumDispatcherVersion": "3.0.1-beta.6" } diff --git a/cli/common/clicontract/protocol_version_consistency_test.go b/cli/common/clicontract/protocol_version_consistency_test.go index 299485e7bc..161da97591 100644 --- a/cli/common/clicontract/protocol_version_consistency_test.go +++ b/cli/common/clicontract/protocol_version_consistency_test.go @@ -13,7 +13,6 @@ import ( // Unity package accepts. It is relative to this package directory (cli/common/clicontract). const ( unityProtocolConstantPath = "../../../Packages/src/Editor/Domain/CliConstants.cs" - unityPackageManifestPath = "../../../Packages/src/package.json" unityPackageCliPinPath = "../../../Packages/src/project-runner-pin.json" unityProjectCliPinPath = "../../../.uloop/project-runner-pin.json" ) @@ -23,17 +22,8 @@ var ( unityMinimumDispatcherVersionPattern = regexp.MustCompile(`MINIMUM_REQUIRED_DISPATCHER_VERSION\s*=\s*"([^"]+)"`) ) -type unityPackageManifest struct { - Name string `json:"name"` - Version string `json:"version"` -} - type unityPackageCliPin struct { - SchemaVersion int `json:"schemaVersion"` - PackageName string `json:"packageName"` - PackageVersion string `json:"packageVersion"` ProjectRunnerVersion string `json:"projectRunnerVersion"` - RequiredProtocolVersion int `json:"requiredProtocolVersion"` MinimumDispatcherVersion string `json:"minimumDispatcherVersion"` } @@ -55,30 +45,14 @@ func TestProtocolVersionMatchesUnityPackage(t *testing.T) { } // TestUnityPackageCliPinMatchesReleaseContracts verifies the dispatcher pin copied into -// projects points at the package release, project runner release, and protocol generation from their -// canonical declarations. +// projects points at the project runner release from cli/contract.json and at the minimum +// dispatcher version declared in CliConstants. func TestUnityPackageCliPinMatchesReleaseContracts(t *testing.T) { - manifest := readJSONFile[unityPackageManifest](t, unityPackageManifestPath) pin := readJSONFile[unityPackageCliPin](t, unityPackageCliPinPath) - if pin.SchemaVersion != 1 { - t.Fatalf("expected %s schemaVersion to be 1, got %d", unityPackageCliPinPath, pin.SchemaVersion) - } - if pin.PackageName != manifest.Name { - t.Fatalf("expected %s packageName to match %s name: %q != %q", unityPackageCliPinPath, unityPackageManifestPath, pin.PackageName, manifest.Name) - } - if pin.PackageVersion != manifest.Version { - t.Fatalf("expected %s packageVersion to match %s version: %q != %q", unityPackageCliPinPath, unityPackageManifestPath, pin.PackageVersion, manifest.Version) - } if pin.ProjectRunnerVersion != ProjectRunnerVersion() { t.Fatalf("expected %s projectRunnerVersion to match cli/contract.json projectRunnerVersion: %q != %q", unityPackageCliPinPath, pin.ProjectRunnerVersion, ProjectRunnerVersion()) } - if pin.RequiredProtocolVersion != ProtocolVersion() { - t.Fatalf("expected %s requiredProtocolVersion to match cli/contract.json protocolVersion: %d != %d", unityPackageCliPinPath, pin.RequiredProtocolVersion, ProtocolVersion()) - } - if pin.RequiredProtocolVersion != readUnityRequiredProtocolVersion(t) { - t.Fatalf("expected %s requiredProtocolVersion to match %s", unityPackageCliPinPath, unityProtocolConstantPath) - } if pin.MinimumDispatcherVersion == "" { t.Fatalf("expected %s minimumDispatcherVersion to be set", unityPackageCliPinPath) } diff --git a/cli/dispatcher/internal/dispatcher/dispatcher_pin.go b/cli/dispatcher/internal/dispatcher/dispatcher_pin.go index 0e2465467c..014eca55dc 100644 --- a/cli/dispatcher/internal/dispatcher/dispatcher_pin.go +++ b/cli/dispatcher/internal/dispatcher/dispatcher_pin.go @@ -13,11 +13,7 @@ import ( var dispatcherProjectRunnerVersionPattern = regexp.MustCompile(`^[0-9]+\.[0-9]+\.[0-9]+(?:-[0-9A-Za-z][0-9A-Za-z.-]*)?(?:\+[0-9A-Za-z][0-9A-Za-z.-]*)?$`) type dispatcherPin struct { - SchemaVersion int `json:"schemaVersion"` - PackageName string `json:"packageName"` - PackageVersion string `json:"packageVersion"` ProjectRunnerVersion string `json:"projectRunnerVersion"` - RequiredProtocolVersion int `json:"requiredProtocolVersion"` MinimumDispatcherVersion string `json:"minimumDispatcherVersion"` SourcePath string `json:"-"` } @@ -96,9 +92,6 @@ func readDispatcherPin(pinPath string) (dispatcherPin, error) { return dispatcherPin{}, fmt.Errorf("%s defines invalid minimumDispatcherVersion: %w", pinPath, err) } } - if pin.SchemaVersion == 0 { - return dispatcherPin{}, fmt.Errorf("%s does not define schemaVersion", pinPath) - } pin.SourcePath = pinPath return pin, nil } diff --git a/cli/dispatcher/internal/dispatcher/dispatcher_test.go b/cli/dispatcher/internal/dispatcher/dispatcher_test.go index 3ea232275a..7c51ea695a 100644 --- a/cli/dispatcher/internal/dispatcher/dispatcher_test.go +++ b/cli/dispatcher/internal/dispatcher/dispatcher_test.go @@ -745,7 +745,7 @@ func TestLoadDispatcherPinRejectsInvalidProjectRunnerVersion(t *testing.T) { if err := os.MkdirAll(filepath.Dir(pinPath), 0o755); err != nil { t.Fatalf("failed to create pin directory: %v", err) } - content := `{"schemaVersion":1,"packageName":"io.github.hatayama.uloopmcp","packageVersion":"3.0.0-beta.1","projectRunnerVersion":"../../payload","requiredProtocolVersion":2,"minimumDispatcherVersion":"3.0.0-beta.39"}` + content := `{"projectRunnerVersion":"../../payload","minimumDispatcherVersion":"3.0.0-beta.39"}` if err := os.WriteFile(pinPath, []byte(content), 0o644); err != nil { t.Fatalf("failed to write pin: %v", err) } @@ -855,9 +855,9 @@ func writeDispatcherPinFileWithMinimum(t *testing.T, pinPath string, projectRunn if err := os.MkdirAll(filepath.Dir(pinPath), 0o755); err != nil { t.Fatalf("failed to create pin directory: %v", err) } - content := `{"schemaVersion":1,"packageName":"io.github.hatayama.uloopmcp","packageVersion":"3.0.0-beta.1","projectRunnerVersion":"` + + content := `{"projectRunnerVersion":"` + projectRunnerVersion + - `","requiredProtocolVersion":2,"minimumDispatcherVersion":"` + + `","minimumDispatcherVersion":"` + minimumDispatcherVersion + `"}` if err := os.WriteFile(pinPath, []byte(content), 0o644); err != nil { diff --git a/cli/release-automation/internal/automation/dispatcher_minimum_version_guard.go b/cli/release-automation/internal/automation/dispatcher_minimum_version_guard.go index 93bd4d5f8e..a611586e1d 100644 --- a/cli/release-automation/internal/automation/dispatcher_minimum_version_guard.go +++ b/cli/release-automation/internal/automation/dispatcher_minimum_version_guard.go @@ -82,11 +82,7 @@ type dispatcherMinimumVersionReleaseContract struct { } type dispatcherMinimumVersionCliPin struct { - SchemaVersion int `json:"schemaVersion"` - PackageName string `json:"packageName"` - PackageVersion string `json:"packageVersion"` ProjectRunnerVersion string `json:"projectRunnerVersion"` - RequiredProtocolVersion int `json:"requiredProtocolVersion"` MinimumDispatcherVersion string `json:"minimumDispatcherVersion"` } diff --git a/cli/release-automation/internal/automation/dispatcher_minimum_version_guard_test.go b/cli/release-automation/internal/automation/dispatcher_minimum_version_guard_test.go index a6b5832ee7..d81fd2d4bf 100644 --- a/cli/release-automation/internal/automation/dispatcher_minimum_version_guard_test.go +++ b/cli/release-automation/internal/automation/dispatcher_minimum_version_guard_test.go @@ -269,9 +269,9 @@ public const string MINIMUM_REQUIRED_DISPATCHER_VERSION = "` + minimumDispatcher } func buildDispatcherMinimumVersionPin(projectRunnerVersion string, minimumDispatcherVersion string) string { - return `{"schemaVersion":1,"packageName":"test.package","packageVersion":"3.0.0-beta.40","projectRunnerVersion":"` + + return `{"projectRunnerVersion":"` + projectRunnerVersion + - `","requiredProtocolVersion":2,"minimumDispatcherVersion":"` + + `","minimumDispatcherVersion":"` + minimumDispatcherVersion + `"}` } diff --git a/release-please-config.json b/release-please-config.json index f7f91462dc..7f76c9d990 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -15,16 +15,6 @@ "type": "json", "path": "package.json", "jsonpath": "$.version" - }, - { - "type": "json", - "path": "project-runner-pin.json", - "jsonpath": "$.packageVersion" - }, - { - "type": "json", - "path": "/.uloop/project-runner-pin.json", - "jsonpath": "$.packageVersion" } ] }, diff --git a/scripts/test-release-please-config.sh b/scripts/test-release-please-config.sh index e796b919b2..50a5c6827a 100755 --- a/scripts/test-release-please-config.sh +++ b/scripts/test-release-please-config.sh @@ -128,13 +128,9 @@ assert_json_value '.packages["Packages/src"].["changelog-path"]' 'CHANGELOG.md' assert_json_value '.packages["Packages/src"].component' 'unity-package' assert_json_value '.packages["Packages/src"].["include-component-in-tag"]' 'false' assert_json_value '.packages["Packages/src"] | has("exclude-paths")' 'false' -assert_json_value '.packages["Packages/src"].["extra-files"] | length' '3' +assert_json_value '.packages["Packages/src"].["extra-files"] | length' '1' assert_json_value '.packages["Packages/src"].["extra-files"][0].path' 'package.json' assert_json_value '.packages["Packages/src"].["extra-files"][0].jsonpath' '$.version' -assert_json_value '.packages["Packages/src"].["extra-files"][1].path' 'project-runner-pin.json' -assert_json_value '.packages["Packages/src"].["extra-files"][1].jsonpath' '$.packageVersion' -assert_json_value '.packages["Packages/src"].["extra-files"][2].path' '/.uloop/project-runner-pin.json' -assert_json_value '.packages["Packages/src"].["extra-files"][2].jsonpath' '$.packageVersion' assert_json_value '.packages["cli/project-runner"].component' 'uloop-project-runner' assert_json_value '.packages["cli/project-runner"].["include-component-in-tag"]' 'true' diff --git a/scripts/test-sync-release-please-package-releases.sh b/scripts/test-sync-release-please-package-releases.sh index a6dec0f31e..552a1be7d9 100755 --- a/scripts/test-sync-release-please-package-releases.sh +++ b/scripts/test-sync-release-please-package-releases.sh @@ -207,11 +207,7 @@ EOF_MANIFEST cat > Packages/src/project-runner-pin.json < Date: Sun, 5 Jul 2026 14:20:31 +0900 Subject: [PATCH 2/2] Address review: portable jq indexing and two-field pin fixtures .["extra-files"] after an expression is rejected by jq 1.6, so the config test only worked on newer jq builds; plain ["extra-files"] indexing parses everywhere. The synchronizer fixtures now carry both pin fields so a sync bug that dropped minimumDispatcherVersion would fail the exact-match assertions. --- .../Tests/Editor/CliPinSynchronizerTests.cs | 14 +++++----- scripts/test-release-please-config.sh | 26 +++++++++---------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/Assets/Tests/Editor/CliPinSynchronizerTests.cs b/Assets/Tests/Editor/CliPinSynchronizerTests.cs index 92a04d38c5..413b9cc976 100644 --- a/Assets/Tests/Editor/CliPinSynchronizerTests.cs +++ b/Assets/Tests/Editor/CliPinSynchronizerTests.cs @@ -26,7 +26,7 @@ public void SyncProjectPinFile_WhenDestinationMissing_ShouldCopyPackagePin() Directory.CreateDirectory(projectRoot); File.WriteAllText( Path.Combine(packageRoot, UnityCliLoopConstants.ULOOP_PROJECT_RUNNER_PIN_FILE_NAME), - "{\"projectRunnerVersion\":\"3.0.0\"}"); + "{\"projectRunnerVersion\":\"3.0.0\",\"minimumDispatcherVersion\":\"3.0.1\"}"); bool changed = CliPinSynchronizer.SyncProjectPinFile(packageRoot, projectRoot); @@ -37,7 +37,7 @@ public void SyncProjectPinFile_WhenDestinationMissing_ShouldCopyPackagePin() projectRoot, UnityCliLoopConstants.ULOOP_DIR, UnityCliLoopConstants.ULOOP_PROJECT_RUNNER_PIN_FILE_NAME)), - Is.EqualTo("{\"projectRunnerVersion\":\"3.0.0\"}")); + Is.EqualTo("{\"projectRunnerVersion\":\"3.0.0\",\"minimumDispatcherVersion\":\"3.0.1\"}")); } finally { @@ -64,8 +64,8 @@ public void SyncProjectPinFile_WhenDestinationMatches_ShouldSkipWrite() string destinationPath = Path.Combine( projectUloopRoot, UnityCliLoopConstants.ULOOP_PROJECT_RUNNER_PIN_FILE_NAME); - File.WriteAllText(sourcePath, "{\"projectRunnerVersion\":\"3.0.0\"}"); - File.WriteAllText(destinationPath, "{\"projectRunnerVersion\":\"3.0.0\"}"); + File.WriteAllText(sourcePath, "{\"projectRunnerVersion\":\"3.0.0\",\"minimumDispatcherVersion\":\"3.0.1\"}"); + File.WriteAllText(destinationPath, "{\"projectRunnerVersion\":\"3.0.0\",\"minimumDispatcherVersion\":\"3.0.1\"}"); DateTime previousWriteTime = File.GetLastWriteTimeUtc(destinationPath); bool changed = CliPinSynchronizer.SyncProjectPinFile(packageRoot, projectRoot); @@ -94,16 +94,16 @@ public void SyncProjectPinFile_WhenPackagePinChanges_ShouldUpdateProjectPin() Directory.CreateDirectory(projectUloopRoot); File.WriteAllText( Path.Combine(packageRoot, UnityCliLoopConstants.ULOOP_PROJECT_RUNNER_PIN_FILE_NAME), - "{\"projectRunnerVersion\":\"3.0.1\"}"); + "{\"projectRunnerVersion\":\"3.0.1\",\"minimumDispatcherVersion\":\"3.0.1\"}"); string destinationPath = Path.Combine( projectUloopRoot, UnityCliLoopConstants.ULOOP_PROJECT_RUNNER_PIN_FILE_NAME); - File.WriteAllText(destinationPath, "{\"projectRunnerVersion\":\"3.0.0\"}"); + File.WriteAllText(destinationPath, "{\"projectRunnerVersion\":\"3.0.0\",\"minimumDispatcherVersion\":\"3.0.1\"}"); bool changed = CliPinSynchronizer.SyncProjectPinFile(packageRoot, projectRoot); Assert.That(changed, Is.True); - Assert.That(File.ReadAllText(destinationPath), Is.EqualTo("{\"projectRunnerVersion\":\"3.0.1\"}")); + Assert.That(File.ReadAllText(destinationPath), Is.EqualTo("{\"projectRunnerVersion\":\"3.0.1\",\"minimumDispatcherVersion\":\"3.0.1\"}")); } finally { diff --git a/scripts/test-release-please-config.sh b/scripts/test-release-please-config.sh index 50a5c6827a..8b8f695a56 100755 --- a/scripts/test-release-please-config.sh +++ b/scripts/test-release-please-config.sh @@ -128,9 +128,9 @@ assert_json_value '.packages["Packages/src"].["changelog-path"]' 'CHANGELOG.md' assert_json_value '.packages["Packages/src"].component' 'unity-package' assert_json_value '.packages["Packages/src"].["include-component-in-tag"]' 'false' assert_json_value '.packages["Packages/src"] | has("exclude-paths")' 'false' -assert_json_value '.packages["Packages/src"].["extra-files"] | length' '1' -assert_json_value '.packages["Packages/src"].["extra-files"][0].path' 'package.json' -assert_json_value '.packages["Packages/src"].["extra-files"][0].jsonpath' '$.version' +assert_json_value '.packages["Packages/src"]["extra-files"] | length' '1' +assert_json_value '.packages["Packages/src"]["extra-files"][0].path' 'package.json' +assert_json_value '.packages["Packages/src"]["extra-files"][0].jsonpath' '$.version' assert_json_value '.packages["cli/project-runner"].component' 'uloop-project-runner' assert_json_value '.packages["cli/project-runner"].["include-component-in-tag"]' 'true' @@ -139,13 +139,13 @@ assert_json_value '.packages["cli/project-runner"].["changelog-path"]' 'CHANGELO # so there is nothing left under cli/project-runner to exclude from # uloop-project-runner releases. assert_json_value '.packages["cli/project-runner"] | has("exclude-paths")' 'false' -assert_json_value '.packages["cli/project-runner"].["extra-files"] | length' '4' -assert_json_value '.packages["cli/project-runner"].["extra-files"][0].path' '/cli/common/tools/default-tools.json' -assert_json_value '.packages["cli/project-runner"].["extra-files"][1].path' '/cli/common/clicontract/contract.json' -assert_json_value '.packages["cli/project-runner"].["extra-files"][2].path' '/Packages/src/project-runner-pin.json' -assert_json_value '.packages["cli/project-runner"].["extra-files"][2].jsonpath' '$.projectRunnerVersion' -assert_json_value '.packages["cli/project-runner"].["extra-files"][3].path' '/.uloop/project-runner-pin.json' -assert_json_value '.packages["cli/project-runner"].["extra-files"][3].jsonpath' '$.projectRunnerVersion' +assert_json_value '.packages["cli/project-runner"]["extra-files"] | length' '4' +assert_json_value '.packages["cli/project-runner"]["extra-files"][0].path' '/cli/common/tools/default-tools.json' +assert_json_value '.packages["cli/project-runner"]["extra-files"][1].path' '/cli/common/clicontract/contract.json' +assert_json_value '.packages["cli/project-runner"]["extra-files"][2].path' '/Packages/src/project-runner-pin.json' +assert_json_value '.packages["cli/project-runner"]["extra-files"][2].jsonpath' '$.projectRunnerVersion' +assert_json_value '.packages["cli/project-runner"]["extra-files"][3].path' '/.uloop/project-runner-pin.json' +assert_json_value '.packages["cli/project-runner"]["extra-files"][3].jsonpath' '$.projectRunnerVersion' # The dispatcher tag format must stay dispatcher-v to continue the # existing tag sequence started before release-please management. @@ -156,9 +156,9 @@ assert_json_value '.packages["cli/dispatcher"].["versioning"]' 'prerelease' assert_json_value '.packages["cli/dispatcher"].["prerelease-type"]' 'beta' assert_json_value '.packages["cli/dispatcher"].["changelog-path"]' 'CHANGELOG.md' assert_json_value '.packages["cli/dispatcher"] | has("exclude-paths")' 'false' -assert_json_value '.packages["cli/dispatcher"].["extra-files"] | length' '1' -assert_json_value '.packages["cli/dispatcher"].["extra-files"][0].path' 'dispatchercontract/dispatcher-contract.json' -assert_json_value '.packages["cli/dispatcher"].["extra-files"][0].jsonpath' '$.dispatcherVersion' +assert_json_value '.packages["cli/dispatcher"]["extra-files"] | length' '1' +assert_json_value '.packages["cli/dispatcher"]["extra-files"][0].path' 'dispatchercontract/dispatcher-contract.json' +assert_json_value '.packages["cli/dispatcher"]["extra-files"][0].jsonpath' '$.dispatcherVersion' assert_file_contains "$RELEASE_WORKFLOW" 'id: package_release_sync' assert_file_contains "$RELEASE_WORKFLOW" "steps.package_release_sync.outputs.ready != 'false'"