diff --git a/__snapshots__/manifest.js b/__snapshots__/manifest.js
index bc4243a7c..f53bd18c8 100644
--- a/__snapshots__/manifest.js
+++ b/__snapshots__/manifest.js
@@ -1,3 +1,110 @@
+exports['Manifest plugins runs the node-workspace plugin: changes'] = `
+
+filename: node/pkg1/CHANGELOG.md
+# Changelog
+
+### [0.123.5](https://www.github.com/fake/repo/compare/pkg1-v0.123.4...pkg1-v0.123.5) (1983-10-10)
+
+
+### Bug Fixes
+
+* **@node/pkg1:** bugfix pkg1 ([43e6f0d](https://www.github.com/fake/repo/commit/43e6f0d178468c33349fe3faac287d4c))
+
+filename: node/pkg1/package.json
+{
+ "name": "@node/pkg1",
+ "version": "0.123.5"
+}
+
+filename: python/CHANGELOG.md
+# Changelog
+
+### [1.2.4](https://www.github.com/fake/repo/compare/foolib-v1.2.3...foolib-v1.2.4) (1983-10-10)
+
+
+### Bug Fixes
+
+* **foolib:** bufix python foolib ([8df9117](https://www.github.com/fake/repo/commit/8df9117959264dc5b7b6c72ff36b8846))
+
+filename: python/setup.cfg
+version=1.2.4
+
+filename: python/setup.py
+version = "1.2.4"
+
+filename: python/src/foolib/version.py
+__version__ = "1.2.4"
+
+filename: node/pkg2/package.json
+{
+ "name": "@node/pkg2",
+ "version": "0.1.3",
+ "dependencies": {
+ "@node/pkg1": "^0.123.5"
+ }
+}
+
+filename: node/pkg2/CHANGELOG.md
+# Changelog
+
+### [0.1.3](https://www.github.com/fake/repo/compare/pkg2-v0.1.2...pkg2-v0.1.3) (1983-10-10)
+
+
+### Dependencies
+
+* The following workspace dependencies were updated
+ * dependencies
+ * @node/pkg1 bumped from ^0.123.4 to ^0.123.5
+
+filename: .release-please-manifest.json
+{
+ "node/pkg1": "0.123.5",
+ "node/pkg2": "0.1.3",
+ "python": "1.2.4"
+}
+
+`
+
+exports['Manifest plugins runs the node-workspace plugin: options'] = `
+
+upstreamOwner: fake
+upstreamRepo: repo
+title: chore: release main
+branch: release-please/branches/main
+description: :robot: I have created a release \\*beep\\* \\*boop\\*
+---
+@node/pkg1: 0.123.5
+
+
+### Bug Fixes
+
+* **@node/pkg1:** bugfix pkg1 ([43e6f0d](https://www.github.com/fake/repo/commit/43e6f0d178468c33349fe3faac287d4c))
+
+foolib: 1.2.4
+
+
+### Bug Fixes
+
+* **foolib:** bufix python foolib ([8df9117](https://www.github.com/fake/repo/commit/8df9117959264dc5b7b6c72ff36b8846))
+
+@node/pkg2: 0.1.3
+
+
+### Dependencies
+
+* The following workspace dependencies were updated
+ * dependencies
+ * @node/pkg1 bumped from ^0.123.4 to ^0.123.5
+
+
+
+This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
+primary: main
+force: true
+fork: false
+message: chore: release main
+`
+
exports['Manifest pullRequest allows root module to be published, via special "." path: changes'] = `
filename: CHANGELOG.md
@@ -64,7 +171,10 @@ filename: node/pkg2/CHANGELOG.md
filename: node/pkg2/package.json
{
"name": "@node/pkg2",
- "version": "2.0.0"
+ "version": "2.0.0",
+ "dependencies": {
+ "@node/pkg1": "^0.123.4"
+ }
}
filename: .release-please-manifest.json
@@ -83,10 +193,8 @@ upstreamRepo: repo
title: chore: release main
branch: release-please/branches/main
description: :robot: I have created a release \\*beep\\* \\*boop\\*
-
---
-googleapis: 3.0.0
-## [3.0.0](https://www.github.com/fake/repo/compare/googleapis-v2.0.0...googleapis-v3.0.0) (1983-10-10)
+googleapis: 3.0.0
### ⚠ BREAKING CHANGES
@@ -103,12 +211,8 @@ googleapis: 3.0.0
### Bug Fixes
* **root:** root only change ([8b55db3](https://www.github.com/fake/repo/commit/8b55db3f6115306cc9c132bec0bb1447))
----
-
-
----
-@node/pkg1: 4.0.0
-## [4.0.0](https://www.github.com/fake/repo/compare/pkg1-v3.2.1...pkg1-v4.0.0) (1983-10-10)
+
+@node/pkg1: 4.0.0
### ⚠ BREAKING CHANGES
@@ -118,12 +222,8 @@ googleapis: 3.0.0
### Features
* **@node/pkg1:** major new feature ([e3ab0ab](https://www.github.com/fake/repo/commit/e3ab0abfd66e66324f685ceeececf35c))
----
-
-
----
-@node/pkg2: 2.0.0
-## [2.0.0](https://www.github.com/fake/repo/compare/pkg2-v1.2.3...pkg2-v2.0.0) (1983-10-10)
+
+@node/pkg2: 2.0.0
### ⚠ BREAKING CHANGES
@@ -133,7 +233,7 @@ googleapis: 3.0.0
### Features
* **@node/pkg2:** major new feature ([72f962d](https://www.github.com/fake/repo/commit/72f962d44ba0bcee15594ea6bdc67d8b))
----
+
This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
@@ -178,7 +278,10 @@ filename: node/pkg2/CHANGELOG.md
filename: node/pkg2/package.json
{
"name": "@node/pkg2",
- "version": "0.2.0"
+ "version": "0.2.0",
+ "dependencies": {
+ "@node/pkg1": "^0.123.4"
+ }
}
filename: python/CHANGELOG.md
@@ -216,10 +319,8 @@ upstreamRepo: repo
title: chore: release main
branch: release-please/branches/main
description: :robot: I have created a release \\*beep\\* \\*boop\\*
-
---
-@node/pkg1: 4.0.0
-## [4.0.0](https://www.github.com/fake/repo/compare/pkg1-v3.2.1...pkg1-v4.0.0) (1983-10-10)
+@node/pkg1: 4.0.0
### ⚠ BREAKING CHANGES
@@ -229,29 +330,21 @@ description: :robot: I have created a release \\*beep\\* \\*boop\\*
### Features
* **@node/pkg1:** major new feature ([e3ab0ab](https://www.github.com/fake/repo/commit/e3ab0abfd66e66324f685ceeececf35c))
----
-
-
----
-@node/pkg2: 0.2.0
-## [0.2.0](https://www.github.com/fake/repo/compare/pkg2-v0.1.2...pkg2-v0.2.0) (1983-10-10)
+
+@node/pkg2: 0.2.0
### Features
* **@node/pkg2:** new feature ([6cefc4f](https://www.github.com/fake/repo/commit/6cefc4f5b1f432a24f7c066c5dd95e68))
----
-
-
----
-foolib: 1.2.4
-### [1.2.4](https://www.github.com/fake/repo/compare/foolib-v1.2.3...foolib-v1.2.4) (1983-10-10)
+
+foolib: 1.2.4
### Bug Fixes
* **foolib:** bufix python foolib ([8df9117](https://www.github.com/fake/repo/commit/8df9117959264dc5b7b6c72ff36b8846))
----
+
This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
@@ -296,7 +389,10 @@ filename: node/pkg2/CHANGELOG.md
filename: node/pkg2/package.json
{
"name": "@node/pkg2",
- "version": "0.2.0"
+ "version": "0.2.0",
+ "dependencies": {
+ "@node/pkg1": "^0.123.4"
+ }
}
filename: python/CHANGELOG.md
@@ -334,10 +430,8 @@ upstreamRepo: repo
title: chore: release main
branch: release-please/branches/main
description: :robot: I have created a release \\*beep\\* \\*boop\\*
-
---
-@node/pkg1: 4.0.0
-## [4.0.0](https://www.github.com/fake/repo/compare/pkg1-v3.2.1...pkg1-v4.0.0) (1983-10-10)
+@node/pkg1: 4.0.0
### ⚠ BREAKING CHANGES
@@ -347,29 +441,21 @@ description: :robot: I have created a release \\*beep\\* \\*boop\\*
### Features
* **@node/pkg1:** major new feature ([e3ab0ab](https://www.github.com/fake/repo/commit/e3ab0abfd66e66324f685ceeececf35c))
----
-
-
----
-@node/pkg2: 0.2.0
-## [0.2.0](https://www.github.com/fake/repo/compare/pkg2-v0.1.2...pkg2-v0.2.0) (1983-10-10)
+
+@node/pkg2: 0.2.0
### Features
* **@node/pkg2:** new feature ([6cefc4f](https://www.github.com/fake/repo/commit/6cefc4f5b1f432a24f7c066c5dd95e68))
----
-
-
----
-foolib: 1.2.4
-### [1.2.4](https://www.github.com/fake/repo/compare/foolib-v1.2.3...foolib-v1.2.4) (1983-10-10)
+
+foolib: 1.2.4
### Bug Fixes
* **foolib:** bufix python foolib ([8df9117](https://www.github.com/fake/repo/commit/8df9117959264dc5b7b6c72ff36b8846))
----
+
This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
@@ -414,7 +500,10 @@ filename: node/pkg2/CHANGELOG.md
filename: node/pkg2/package.json
{
"name": "@node/pkg2",
- "version": "0.2.0"
+ "version": "0.2.0",
+ "dependencies": {
+ "@node/pkg1": "^0.123.4"
+ }
}
filename: python/CHANGELOG.md
@@ -452,10 +541,8 @@ upstreamRepo: repo
title: chore: release main
branch: release-please/branches/main
description: :robot: I have created a release \\*beep\\* \\*boop\\*
-
---
-@node/pkg1: 4.0.0
-## [4.0.0](https://www.github.com/fake/repo/compare/pkg1-v3.2.1...pkg1-v4.0.0) (1983-10-10)
+@node/pkg1: 4.0.0
### ⚠ BREAKING CHANGES
@@ -465,29 +552,21 @@ description: :robot: I have created a release \\*beep\\* \\*boop\\*
### Features
* **@node/pkg1:** major new feature ([e3ab0ab](https://www.github.com/fake/repo/commit/e3ab0abfd66e66324f685ceeececf35c))
----
-
-
----
-@node/pkg2: 0.2.0
-## [0.2.0](https://www.github.com/fake/repo/compare/pkg2-v0.1.2...pkg2-v0.2.0) (1983-10-10)
+
+@node/pkg2: 0.2.0
### Features
* **@node/pkg2:** new feature ([6cefc4f](https://www.github.com/fake/repo/commit/6cefc4f5b1f432a24f7c066c5dd95e68))
----
-
-
----
-foolib: 1.2.4
-### [1.2.4](https://www.github.com/fake/repo/compare/foolib-v1.2.3...foolib-v1.2.4) (1983-10-10)
+
+foolib: 1.2.4
### Bug Fixes
* **foolib:** bufix python foolib ([8df9117](https://www.github.com/fake/repo/commit/8df9117959264dc5b7b6c72ff36b8846))
----
+
This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
@@ -532,7 +611,10 @@ filename: node/pkg2/CHANGELOG.md
filename: node/pkg2/package.json
{
"name": "@node/pkg2",
- "version": "0.2.0"
+ "version": "0.2.0",
+ "dependencies": {
+ "@node/pkg1": "^0.123.4"
+ }
}
filename: python/CHANGELOG.md
@@ -570,10 +652,8 @@ upstreamRepo: repo
title: chore: release main
branch: release-please/branches/main
description: :robot: I have created a release \\*beep\\* \\*boop\\*
-
---
-@node/pkg1: 4.0.0
-## [4.0.0](https://www.github.com/fake/repo/compare/pkg1-v3.2.1...pkg1-v4.0.0) (1983-10-10)
+@node/pkg1: 4.0.0
### ⚠ BREAKING CHANGES
@@ -583,29 +663,21 @@ description: :robot: I have created a release \\*beep\\* \\*boop\\*
### Features
* **@node/pkg1:** major new feature ([e3ab0ab](https://www.github.com/fake/repo/commit/e3ab0abfd66e66324f685ceeececf35c))
----
-
-
----
-@node/pkg2: 0.2.0
-## [0.2.0](https://www.github.com/fake/repo/compare/pkg2-v0.1.2...pkg2-v0.2.0) (1983-10-10)
+
+@node/pkg2: 0.2.0
### Features
* **@node/pkg2:** new feature ([6cefc4f](https://www.github.com/fake/repo/commit/6cefc4f5b1f432a24f7c066c5dd95e68))
----
-
-
----
-foolib: 1.2.4
-### [1.2.4](https://www.github.com/fake/repo/compare/foolib-v1.2.3...foolib-v1.2.4) (1983-10-10)
+
+foolib: 1.2.4
### Bug Fixes
* **foolib:** bufix python foolib ([8df9117](https://www.github.com/fake/repo/commit/8df9117959264dc5b7b6c72ff36b8846))
----
+
This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
@@ -650,7 +722,10 @@ filename: node/pkg2/CHANGELOG.md
filename: node/pkg2/package.json
{
"name": "@node/pkg2",
- "version": "1.0.0"
+ "version": "1.0.0",
+ "dependencies": {
+ "@node/pkg1": "^0.123.4"
+ }
}
filename: python/CHANGELOG.md
@@ -688,10 +763,8 @@ upstreamRepo: repo
title: chore: release main
branch: release-please/branches/main
description: :robot: I have created a release \\*beep\\* \\*boop\\*
-
---
-@node/pkg1: 4.0.0
-## [4.0.0](https://www.github.com/fake/repo/compare/pkg1-v3.2.1...pkg1-v4.0.0) (1983-10-10)
+@node/pkg1: 4.0.0
### ⚠ BREAKING CHANGES
@@ -701,29 +774,21 @@ description: :robot: I have created a release \\*beep\\* \\*boop\\*
### Features
* **@node/pkg1:** major new feature ([e3ab0ab](https://www.github.com/fake/repo/commit/e3ab0abfd66e66324f685ceeececf35c))
----
-
-
----
-@node/pkg2: 1.0.0
-## 1.0.0 (1983-10-10)
+
+@node/pkg2: 1.0.0
### Features
* **@node/pkg2:** new feature ([6cefc4f](https://www.github.com/fake/repo/commit/6cefc4f5b1f432a24f7c066c5dd95e68))
----
-
-
----
-foolib: 1.2.4
-### [1.2.4](https://www.github.com/fake/repo/compare/foolib-v1.2.3...foolib-v1.2.4) (1983-10-10)
+
+foolib: 1.2.4
### Bug Fixes
* **foolib:** bufix python foolib ([8df9117](https://www.github.com/fake/repo/commit/8df9117959264dc5b7b6c72ff36b8846))
----
+
This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
@@ -789,10 +854,8 @@ upstreamRepo: repo
title: chore: release main
branch: release-please/branches/main
description: :robot: I have created a release \\*beep\\* \\*boop\\*
-
---
-@node/pkg1: 4.0.0
-## [4.0.0](https://www.github.com/fake/repo/compare/pkg1-v3.2.1...pkg1-v4.0.0) (1983-10-10)
+@node/pkg1: 4.0.0
### ⚠ BREAKING CHANGES
@@ -802,18 +865,14 @@ description: :robot: I have created a release \\*beep\\* \\*boop\\*
### Features
* **@node/pkg1:** major new feature ([e3ab0ab](https://www.github.com/fake/repo/commit/e3ab0abfd66e66324f685ceeececf35c))
----
-
-
----
-foolib: 1.2.4
-### [1.2.4](https://www.github.com/fake/repo/compare/foolib-v1.2.3...foolib-v1.2.4) (1983-10-10)
+
+foolib: 1.2.4
### Bug Fixes
* **foolib:** bufix python foolib ([8df9117](https://www.github.com/fake/repo/commit/8df9117959264dc5b7b6c72ff36b8846))
----
+
This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
@@ -838,7 +897,10 @@ filename: node/pkg2/CHANGELOG.md
filename: node/pkg2/package.json
{
"name": "@node/pkg2",
- "version": "0.2.0"
+ "version": "0.2.0",
+ "dependencies": {
+ "@node/pkg1": "^0.123.4"
+ }
}
filename: .release-please-manifest.json
@@ -857,16 +919,14 @@ upstreamRepo: repo
title: chore: release main
branch: release-please/branches/main
description: :robot: I have created a release \\*beep\\* \\*boop\\*
-
---
-@node/pkg2: 0.2.0
-## [0.2.0](https://www.github.com/fake/repo/compare/pkg2-v0.1.2...pkg2-v0.2.0) (1983-10-10)
+@node/pkg2: 0.2.0
### Features
* **@node/pkg2:** new feature ([6cefc4f](https://www.github.com/fake/repo/commit/6cefc4f5b1f432a24f7c066c5dd95e68))
----
+
This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
@@ -915,7 +975,10 @@ filename: node/pkg2/CHANGELOG.md
filename: node/pkg2/package.json
{
"name": "@node/pkg2",
- "version": "0.3.0"
+ "version": "0.3.0",
+ "dependencies": {
+ "@node/pkg1": "^0.123.4"
+ }
}
filename: python/CHANGELOG.md
@@ -962,10 +1025,8 @@ upstreamRepo: repo
title: chore: release main
branch: release-please/branches/main
description: :robot: I have created a release \\*beep\\* \\*boop\\*
-
---
-@node/pkg1: 5.5.5
-### [5.5.5](https://www.github.com/fake/repo/compare/pkg1-v0.1.1...pkg1-v5.5.5) (1983-10-10)
+@node/pkg1: 5.5.5
### ⚠ BREAKING CHANGES
@@ -975,12 +1036,8 @@ description: :robot: I have created a release \\*beep\\* \\*boop\\*
### Default Features Section
* **@node/pkg1:** node feature ([8ef6b52](https://www.github.com/fake/repo/commit/8ef6b521e268395ded9b66bb1ff89696))
----
-
-
----
-@node/pkg2: 0.3.0
-## [0.3.0](https://www.github.com/fake/repo/compare/pkg2-v0.2.2...pkg2-v0.3.0) (1983-10-10)
+
+@node/pkg2: 0.3.0
### ⚠ BREAKING CHANGES
@@ -990,12 +1047,8 @@ description: :robot: I have created a release \\*beep\\* \\*boop\\*
### Default Features Section
* **@node/pkg2:** node2 feature ([f3373c7](https://www.github.com/fake/repo/commit/f3373c71ffaf1a67b19ce6a116e861ea))
----
-
-
----
-foolib: 1.0.0
-## [1.0.0](https://www.github.com/fake/repo/compare/foolib-v0.1.1...foolib-v1.0.0) (1983-10-10)
+
+foolib: 1.0.0
### ⚠ BREAKING CHANGES
@@ -1010,7 +1063,7 @@ foolib: 1.0.0
### Python Features Section
* **foolib:** python feature ([33fcc00](https://www.github.com/fake/repo/commit/33fcc0047b2eb3a66854f25c480b5b7e))
----
+
This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
diff --git a/__snapshots__/node-workspace.js b/__snapshots__/node-workspace.js
new file mode 100644
index 000000000..c0644ba5a
--- /dev/null
+++ b/__snapshots__/node-workspace.js
@@ -0,0 +1,1244 @@
+exports['NodeWorkspaceDependencyUpdates run does not update dependencies on preMajor versions with minor bump changes'] = `
+====================
+{
+ "config": {
+ "releaseType": "node",
+ "packageName": "@here/pkgA",
+ "path": "packages/pkgA"
+ },
+ "prData": {
+ "version": "1.1.2",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgA/package.json
+{
+ "name": "@here/pkgA",
+ "version": "1.1.2",
+ "dependencies": {
+ "@there/foo": "^4.1.7"
+ }
+}
+
+filename: packages/pkgA/CHANGELOG.md
+# Changelog
+
+All notable changes to this project will be documented in this file.### [1.1.2](https://www.github.com/fake/repo/compare/pkgA-v1.1.1...pkgA-v1.1.2) (1983-10-10)
+
+
+### Bug Fixes
+
+* We fixed a bug!
+====================
+{
+ "config": {
+ "releaseType": "node",
+ "packageName": "@here/pkgB",
+ "path": "packages/pkgB"
+ },
+ "prData": {
+ "version": "0.3.0",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgB/package.json
+{
+ "name": "@here/pkgB",
+ "version": "0.3.0",
+ "dependencies": {
+ "@here/pkgA": "^1.1.2",
+ "someExternal": "^9.2.3"
+ }
+}
+
+filename: packages/pkgB/CHANGELOG.md
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+### [0.3.0](https://www.github.com/fake/repo/compare/pkgB-v0.2.1...pkgB-v0.3.0) (1983-10-10)
+
+
+### Features
+
+* We added a feature
+
+
+### Dependencies
+
+* The following workspace dependencies were updated
+ * dependencies
+ * @here/pkgA bumped from ^1.1.1 to ^1.1.2
+
+### [0.2.1](https://www.github.com/fake/repo/compare/pkgB-v0.2.0...pkgB-v0.2.1) (1983-10-10)
+
+
+### Bug Fixes
+
+* We fixed a bug
+====================
+{
+ "config": {
+ "path": "packages/pkgC",
+ "releaseType": "node",
+ "packageName": "@here/pkgC"
+ },
+ "prData": {
+ "version": "3.3.4",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgC/package.json
+{
+ "name": "@here/pkgC",
+ "version": "3.3.4",
+ "dependencies": {
+ "@here/pkgA": "^1.1.2",
+ "@here/pkgB": "^0.2.1",
+ "anotherExternal": "^4.3.1"
+ }
+}
+
+filename: packages/pkgC/CHANGELOG.md
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+### [3.3.4](https://www.github.com/fake/repo/compare/pkgC-v3.3.3...pkgC-v3.3.4) (1983-10-10)
+
+
+### Dependencies
+
+* The following workspace dependencies were updated
+ * dependencies
+ * @here/pkgA bumped from ^1.1.1 to ^1.1.2
+
+### [3.3.3](https://www.github.com/fake/repo/compare/pkgC-v3.3.2...pkgC-v3.3.3) (1983-10-10)
+
+
+### Bug Fixes
+
+* We fixed a bug
+
+
+`
+
+exports['NodeWorkspaceDependencyUpdates run does not update dependencies on preMajor versions with minor bump logs'] = [
+ [
+ "node-workspace: found packages/pkgA/package.json in changes",
+ "success"
+ ],
+ [
+ "node-workspace: found packages/pkgB/package.json in changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgA/package.json from existing changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgB/package.json from existing changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgC/package.json from github",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgA/package.json to 1.1.2 from release-please",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgB/package.json to 0.3.0 from release-please",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgC/package.json to 3.3.4 from dependency bump",
+ "success"
+ ],
+ [
+ "node-workspace: @here/pkgB.@here/pkgA updated to ^1.1.2",
+ "success"
+ ],
+ [
+ "node-workspace: @here/pkgC.@here/pkgA updated to ^1.1.2",
+ "success"
+ ]
+]
+
+exports['NodeWorkspaceDependencyUpdates run does not update dependency to pre-release version changes'] = `
+====================
+{
+ "config": {
+ "releaseType": "node",
+ "packageName": "@here/pkgA",
+ "path": "packages/pkgA"
+ },
+ "prData": {
+ "version": "1.1.2-alpha.0",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgA/package.json
+{
+ "name": "@here/pkgA",
+ "version": "1.1.2-alpha.0",
+ "dependencies": {
+ "@there/foo": "^4.1.7"
+ }
+}
+
+filename: packages/pkgA/CHANGELOG.md
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+### [1.1.2-alpha.0](https://www.github.com/fake/repo/compare/pkgA-v1.1.1...pkgA-v1.1.2-alpha.0) (1983-10-10)
+
+
+### Bug Fixes
+
+* We fixed a bug!
+
+`
+
+exports['NodeWorkspaceDependencyUpdates run does not update dependency to pre-release version logs'] = [
+ [
+ "node-workspace: found packages/pkgA/package.json in changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgA/package.json from existing changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgB/package.json from github",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgA/package.json to 1.1.2-alpha.0 from release-please",
+ "success"
+ ]
+]
+
+exports['NodeWorkspaceDependencyUpdates run does not update dependent with invalid version changes'] = `
+====================
+{
+ "config": {
+ "releaseType": "node",
+ "packageName": "@here/pkgA",
+ "path": "packages/pkgA"
+ },
+ "prData": {
+ "version": "1.1.2",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgA/package.json
+{
+ "name": "@here/pkgA",
+ "version": "1.1.2",
+ "dependencies": {
+ "@there/foo": "^4.1.7"
+ }
+}
+
+filename: packages/pkgA/CHANGELOG.md
+# Changelog
+
+All notable changes to this project will be documented in this file.### [1.1.2](https://www.github.com/fake/repo/compare/pkgA-v1.1.1...pkgA-v1.1.2) (1983-10-10)
+
+
+### Bug Fixes
+
+* We fixed a bug!
+====================
+{
+ "config": {
+ "path": "packages/pkgB",
+ "releaseType": "node",
+ "packageName": "@here/pkgB"
+ },
+ "prData": {
+ "version": "some-invalid-version",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgB/package.json
+{
+ "name": "@here/pkgB",
+ "version": "some-invalid-version",
+ "dependencies": {
+ "@here/pkgA": "^1.1.2",
+ "someExternal": "^9.2.3"
+ }
+}
+
+filename: packages/pkgB/CHANGELOG.md
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+## [some-invalid-version](https://www.github.com/fake/repo/compare/pkgB-vsome-invalid-version...pkgB-vsome-invalid-version) (1983-10-10)
+
+
+### Dependencies
+
+* The following workspace dependencies were updated
+ * dependencies
+ * @here/pkgA bumped from ^1.1.1 to ^1.1.2
+
+### [some-invalid-version](https://www.github.com/fake/repo/compare/pkgB-v2.2.1...pkgB-vsome-invalid-version) (1983-10-10)
+
+
+### Bug Fixes
+
+* We fixed a bug and set the version wonky on purpose?
+
+
+`
+
+exports['NodeWorkspaceDependencyUpdates run does not update dependent with invalid version logs'] = [
+ [
+ "node-workspace: found packages/pkgA/package.json in changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgA/package.json from existing changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgB/package.json from github",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgA/package.json to 1.1.2 from release-please",
+ "success"
+ ],
+ [
+ "node-workspace: Don't know how to patch @here/pkgB's version(some-invalid-version)",
+ "failure"
+ ],
+ [
+ "node-workspace: setting packages/pkgB/package.json to some-invalid-version from failed to patch bump",
+ "success"
+ ],
+ [
+ "node-workspace: @here/pkgB.@here/pkgA updated to ^1.1.2",
+ "success"
+ ]
+]
+
+exports['NodeWorkspaceDependencyUpdates run handles a simple chain where root pkg update cascades to dependents changes'] = `
+====================
+{
+ "config": {
+ "releaseType": "node",
+ "packageName": "@here/pkgA",
+ "path": "packages/pkgA"
+ },
+ "prData": {
+ "version": "1.1.2",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgA/package.json
+{
+ "name": "@here/pkgA",
+ "version": "1.1.2",
+ "dependencies": {
+ "@there/foo": "^4.1.7"
+ }
+}
+
+filename: packages/pkgA/CHANGELOG.md
+# Changelog
+
+All notable changes to this project will be documented in this file.### [1.1.2](https://www.github.com/fake/repo/compare/pkgA-v1.1.1...pkgA-v1.1.2) (1983-10-10)
+
+
+### Bug Fixes
+
+* We fixed a bug!
+====================
+{
+ "config": {
+ "releaseType": "python",
+ "path": "py/pkg"
+ },
+ "prData": {
+ "version": "1.1.2",
+ "changes": {}
+ }
+}
+
+filename: py/pkg/setup.py
+some python version content
+====================
+{
+ "config": {
+ "path": "packages/pkgB",
+ "releaseType": "node",
+ "packageName": "@here/pkgB"
+ },
+ "prData": {
+ "version": "2.2.3",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgB/package.json
+{
+ "name": "@here/pkgB",
+ "version": "2.2.3",
+ "dependencies": {
+ "@here/pkgA": "^1.1.2",
+ "someExternal": "^9.2.3"
+ }
+}
+
+filename: packages/pkgB/CHANGELOG.md
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+### [2.2.3](https://www.github.com/fake/repo/compare/pkgB-v2.2.2...pkgB-v2.2.3) (1983-10-10)
+
+
+### Dependencies
+
+* The following workspace dependencies were updated
+ * dependencies
+ * @here/pkgA bumped from ^1.1.1 to ^1.1.2
+
+### [2.2.2](https://www.github.com/fake/repo/compare/pkgB-v2.2.1...pkgB-v2.2.2) (1983-10-10)
+
+
+### Bug Fixes
+
+* We fixed a bug
+
+====================
+{
+ "config": {
+ "path": "packages/pkgC",
+ "releaseType": "node",
+ "packageName": "@here/pkgC"
+ },
+ "prData": {
+ "version": "3.3.4",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgC/package.json
+{
+ "name": "@here/pkgC",
+ "version": "3.3.4",
+ "dependencies": {
+ "@here/pkgB": "^2.2.3",
+ "anotherExternal": "^4.3.1"
+ }
+}
+
+filename: packages/pkgC/CHANGELOG.md
+# Changelog
+
+### [3.3.4](https://www.github.com/fake/repo/compare/pkgC-v3.3.3...pkgC-v3.3.4) (1983-10-10)
+
+
+### Dependencies
+
+* The following workspace dependencies were updated
+ * dependencies
+ * @here/pkgB bumped from ^2.2.2 to ^2.2.3
+
+
+`
+
+exports['NodeWorkspaceDependencyUpdates run handles a simple chain where root pkg update cascades to dependents logs'] = [
+ [
+ "node-workspace: found packages/pkgA/package.json in changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgA/package.json from existing changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgB/package.json from github",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgC/package.json from github",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgA/package.json to 1.1.2 from release-please",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgB/package.json to 2.2.3 from dependency bump",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgC/package.json to 3.3.4 from dependency bump",
+ "success"
+ ],
+ [
+ "node-workspace: @here/pkgB.@here/pkgA updated to ^1.1.2",
+ "success"
+ ],
+ [
+ "node-workspace: @here/pkgC.@here/pkgB updated to ^2.2.3",
+ "success"
+ ]
+]
+
+exports['NodeWorkspaceDependencyUpdates run handles a triangle: root and one leg updates bumps other leg changes'] = `
+====================
+{
+ "config": {
+ "releaseType": "node",
+ "packageName": "@here/pkgA",
+ "path": "packages/pkgA"
+ },
+ "prData": {
+ "version": "1.1.2",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgA/package.json
+{
+ "name": "@here/pkgA",
+ "version": "1.1.2",
+ "dependencies": {
+ "@there/foo": "^4.1.7"
+ }
+}
+
+filename: packages/pkgA/CHANGELOG.md
+# Changelog
+
+All notable changes to this project will be documented in this file.### [1.1.2](https://www.github.com/fake/repo/compare/pkgA-v1.1.1...pkgA-v1.1.2) (1983-10-10)
+
+
+### Bug Fixes
+
+* We fixed a bug!
+====================
+{
+ "config": {
+ "releaseType": "node",
+ "packageName": "@here/pkgB",
+ "path": "packages/pkgB"
+ },
+ "prData": {
+ "version": "2.3.0",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgB/package.json
+{
+ "name": "@here/pkgB",
+ "version": "2.3.0",
+ "dependencies": {
+ "@here/pkgA": "^1.1.2",
+ "someExternal": "^9.2.3"
+ }
+}
+
+filename: packages/pkgB/CHANGELOG.md
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+### [2.3.0](https://www.github.com/fake/repo/compare/pkgB-v2.2.2...pkgB-v2.3.0) (1983-10-10)
+
+
+### Features
+
+* We added a feature
+
+
+### Dependencies
+
+* The following workspace dependencies were updated
+ * dependencies
+ * @here/pkgA bumped from ^1.1.1 to ^1.1.2
+
+### [2.2.2](https://www.github.com/fake/repo/compare/pkgB-v2.2.1...pkgB-v2.2.2) (1983-10-10)
+
+
+### Bug Fixes
+
+* We fixed a bug
+====================
+{
+ "config": {
+ "path": "packages/pkgC",
+ "releaseType": "node",
+ "packageName": "@here/pkgC"
+ },
+ "prData": {
+ "version": "3.3.4",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgC/package.json
+{
+ "name": "@here/pkgC",
+ "version": "3.3.4",
+ "dependencies": {
+ "@here/pkgA": "^1.1.2",
+ "@here/pkgB": "^2.3.0",
+ "anotherExternal": "^4.3.1"
+ }
+}
+
+filename: packages/pkgC/CHANGELOG.md
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+### [3.3.4](https://www.github.com/fake/repo/compare/pkgC-v3.3.3...pkgC-v3.3.4) (1983-10-10)
+
+
+### Dependencies
+
+* The following workspace dependencies were updated
+ * dependencies
+ * @here/pkgA bumped from ^1.1.1 to ^1.1.2
+ * @here/pkgB bumped from ^2.2.2 to ^2.3.0
+
+### [3.3.3](https://www.github.com/fake/repo/compare/pkgC-v3.3.2...pkgC-v3.3.3) (1983-10-10)
+
+
+### Bug Fixes
+
+* We fixed a bug
+
+
+`
+
+exports['NodeWorkspaceDependencyUpdates run handles a triangle: root and one leg updates bumps other leg logs'] = [
+ [
+ "node-workspace: found packages/pkgA/package.json in changes",
+ "success"
+ ],
+ [
+ "node-workspace: found packages/pkgB/package.json in changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgA/package.json from existing changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgB/package.json from existing changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgC/package.json from github",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgA/package.json to 1.1.2 from release-please",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgB/package.json to 2.3.0 from release-please",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgC/package.json to 3.3.4 from dependency bump",
+ "success"
+ ],
+ [
+ "node-workspace: @here/pkgB.@here/pkgA updated to ^1.1.2",
+ "success"
+ ],
+ [
+ "node-workspace: @here/pkgC.@here/pkgA updated to ^1.1.2",
+ "success"
+ ],
+ [
+ "node-workspace: @here/pkgC.@here/pkgB updated to ^2.3.0",
+ "success"
+ ]
+]
+
+exports['NodeWorkspaceDependencyUpdates run handles discontiguous graph changes'] = `
+====================
+{
+ "config": {
+ "releaseType": "node",
+ "packageName": "@here/pkgA",
+ "path": "packages/pkgA"
+ },
+ "prData": {
+ "version": "1.1.2",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgA/package.json
+{
+ "name": "@here/pkgA",
+ "version": "1.1.2",
+ "dependencies": {
+ "@there/foo": "^4.1.7"
+ }
+}
+
+filename: packages/pkgA/CHANGELOG.md
+# Changelog
+
+All notable changes to this project will be documented in this file.### [1.1.2](https://www.github.com/fake/repo/compare/pkgA-v1.1.1...pkgA-v1.1.2) (1983-10-10)
+
+
+### Bug Fixes
+
+* We fixed a bug!
+====================
+{
+ "config": {
+ "releaseType": "node",
+ "packageName": "@here/pkgAA",
+ "path": "packages/pkgAA"
+ },
+ "prData": {
+ "version": "11.2.0",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgAA/package.json
+{
+ "name": "@here/pkgAA",
+ "version": "11.2.0",
+ "dependencies": {
+ "@there/foo": "^4.1.7"
+ }
+}
+
+filename: packages/pkgAA/CHANGELOG.md
+### [11.2.0](https://www.github.com/fake/repo/compare/pkgAA-v11.1.1...pkgAA-v11.2.0) (1983-10-10)
+
+
+### Features
+
+* We added a feature
+====================
+{
+ "config": {
+ "path": "packages/pkgB",
+ "releaseType": "node",
+ "packageName": "@here/pkgB"
+ },
+ "prData": {
+ "version": "2.2.3",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgB/package.json
+{
+ "name": "@here/pkgB",
+ "version": "2.2.3",
+ "dependencies": {
+ "@here/pkgA": "^1.1.2",
+ "someExternal": "^9.2.3"
+ }
+}
+
+filename: packages/pkgB/CHANGELOG.md
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+### [2.2.3](https://www.github.com/fake/repo/compare/pkgB-v2.2.2...pkgB-v2.2.3) (1983-10-10)
+
+
+### Dependencies
+
+* The following workspace dependencies were updated
+ * dependencies
+ * @here/pkgA bumped from ^1.1.1 to ^1.1.2
+
+### [2.2.2](https://www.github.com/fake/repo/compare/pkgB-v2.2.1...pkgB-v2.2.2) (1983-10-10)
+
+
+### Bug Fixes
+
+* We fixed a bug
+
+====================
+{
+ "config": {
+ "path": "packages/pkgBB",
+ "releaseType": "node",
+ "packageName": "@here/pkgBB"
+ },
+ "prData": {
+ "version": "22.2.3",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgBB/package.json
+{
+ "name": "@here/pkgBB",
+ "version": "22.2.3",
+ "dependencies": {
+ "@here/pkgAA": "^11.2.0",
+ "someExternal": "^9.2.3"
+ }
+}
+
+filename: packages/pkgBB/CHANGELOG.md
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+### [22.2.3](https://www.github.com/fake/repo/compare/pkgBB-v22.2.2...pkgBB-v22.2.3) (1983-10-10)
+
+
+### Dependencies
+
+* The following workspace dependencies were updated
+ * dependencies
+ * @here/pkgAA bumped from ^11.1.1 to ^11.2.0
+
+### [22.2.2](https://www.github.com/fake/repo/compare/pkgBB-v22.2.1...pkgBB-v22.2.2) (1983-10-10)
+
+
+### Bug Fixes
+
+* We fixed a bug
+
+
+`
+
+exports['NodeWorkspaceDependencyUpdates run handles discontiguous graph logs'] = [
+ [
+ "node-workspace: found packages/pkgA/package.json in changes",
+ "success"
+ ],
+ [
+ "node-workspace: found packages/pkgAA/package.json in changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgA/package.json from existing changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgB/package.json from github",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgAA/package.json from existing changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgBB/package.json from github",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgA/package.json to 1.1.2 from release-please",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgB/package.json to 2.2.3 from dependency bump",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgAA/package.json to 11.2.0 from release-please",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgBB/package.json to 22.2.3 from dependency bump",
+ "success"
+ ],
+ [
+ "node-workspace: @here/pkgB.@here/pkgA updated to ^1.1.2",
+ "success"
+ ],
+ [
+ "node-workspace: @here/pkgBB.@here/pkgAA updated to ^11.2.0",
+ "success"
+ ]
+]
+
+exports['NodeWorkspaceDependencyUpdates run handles errors retrieving changelogs changes'] = `
+====================
+{
+ "config": {
+ "releaseType": "node",
+ "packageName": "@here/pkgA",
+ "path": "packages/pkgA"
+ },
+ "prData": {
+ "version": "1.1.2",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgA/package.json
+{
+ "name": "@here/pkgA",
+ "version": "1.1.2",
+ "dependencies": {
+ "@there/foo": "^4.1.7"
+ }
+}
+
+filename: packages/pkgA/CHANGELOG.md
+# Changelog
+
+All notable changes to this project will be documented in this file.### [1.1.2](https://www.github.com/fake/repo/compare/pkgA-v1.1.1...pkgA-v1.1.2) (1983-10-10)
+
+
+### Bug Fixes
+
+* We fixed a bug!
+====================
+{
+ "config": {
+ "path": "packages/pkgB",
+ "releaseType": "node",
+ "changelogPath": "CHANGES.md",
+ "packageName": "@here/pkgB"
+ },
+ "prData": {
+ "version": "2.2.3",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgB/package.json
+{
+ "name": "@here/pkgB",
+ "version": "2.2.3",
+ "dependencies": {
+ "@here/pkgA": "^1.1.2",
+ "someExternal": "^9.2.3"
+ }
+}
+
+====================
+{
+ "config": {
+ "path": "packages/pkgC",
+ "releaseType": "node",
+ "packageName": "@here/pkgC"
+ },
+ "prData": {
+ "version": "3.3.4",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgC/package.json
+{
+ "name": "@here/pkgC",
+ "version": "3.3.4",
+ "dependencies": {
+ "@here/pkgB": "^2.2.3",
+ "anotherExternal": "^4.3.1"
+ }
+}
+
+filename: packages/pkgC/CHANGELOG.md
+# Changelog
+
+### [3.3.4](https://www.github.com/fake/repo/compare/pkgC-v3.3.3...pkgC-v3.3.4) (1983-10-10)
+
+
+### Dependencies
+
+* The following workspace dependencies were updated
+ * dependencies
+ * @here/pkgB bumped from ^2.2.2 to ^2.2.3
+
+
+`
+
+exports['NodeWorkspaceDependencyUpdates run handles errors retrieving changelogs logs'] = [
+ [
+ "node-workspace: found packages/pkgA/package.json in changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgA/package.json from existing changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgB/package.json from github",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgC/package.json from github",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgA/package.json to 1.1.2 from release-please",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgB/package.json to 2.2.3 from dependency bump",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgC/package.json to 3.3.4 from dependency bump",
+ "success"
+ ],
+ [
+ "node-workspace: @here/pkgB.@here/pkgA updated to ^1.1.2",
+ "success"
+ ],
+ [
+ "node-workspace: @here/pkgC.@here/pkgB updated to ^2.2.3",
+ "success"
+ ],
+ [
+ "node-workspace: Failed to retrieve packages/pkgB/CHANGES.md: Error: error: 501",
+ "failure"
+ ],
+ [
+ "node-workspace: Creating a new changelog at packages/pkgC/CHANGELOG.md",
+ "success"
+ ]
+]
+
+exports['NodeWorkspaceDependencyUpdates run handles unusual changelog formats changes'] = `
+====================
+{
+ "config": {
+ "releaseType": "node",
+ "packageName": "@here/pkgA",
+ "path": "packages/pkgA"
+ },
+ "prData": {
+ "version": "1.1.2",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgA/package.json
+{
+ "name": "@here/pkgA",
+ "version": "1.1.2",
+ "dependencies": {
+ "@there/foo": "^4.1.7"
+ }
+}
+
+filename: packages/pkgA/CHANGELOG.md
+# Changelog
+
+All notable changes to this project will be documented in this file.### [1.1.2](https://www.github.com/fake/repo/compare/pkgA-v1.1.1...pkgA-v1.1.2) (1983-10-10)
+
+
+### Bug Fixes
+
+* We fixed a bug!
+====================
+{
+ "config": {
+ "releaseType": "node",
+ "packageName": "@here/pkgB",
+ "path": "packages/pkgB"
+ },
+ "prData": {
+ "version": "2.3.0",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgB/package.json
+{
+ "name": "@here/pkgB",
+ "version": "2.3.0",
+ "dependencies": {
+ "@here/pkgA": "^1.1.2",
+ "someExternal": "^9.2.3"
+ }
+}
+
+filename: packages/pkgB/CHANGELOG.md
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+### [2.3.0](https://www.github.com/fake/repo/compare/pkgB-v2.2.2...pkgB-v2.3.0) (1983-10-10)
+
+
+### Features
+
+* We added a feature
+
+### some stuff we did not expect
+
+* and more unexpected stuff
+
+
+### Dependencies
+
+* The following workspace dependencies were updated
+ * dependencies
+ * @here/pkgA bumped from ^1.1.1 to ^1.1.2
+
+`
+
+exports['NodeWorkspaceDependencyUpdates run handles unusual changelog formats logs'] = [
+ [
+ "node-workspace: found packages/pkgA/package.json in changes",
+ "success"
+ ],
+ [
+ "node-workspace: found packages/pkgB/package.json in changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgA/package.json from existing changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgB/package.json from existing changes",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgA/package.json to 1.1.2 from release-please",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgB/package.json to 2.3.0 from release-please",
+ "success"
+ ],
+ [
+ "node-workspace: @here/pkgB.@here/pkgA updated to ^1.1.2",
+ "success"
+ ],
+ [
+ "node-workspace: Appending update notes to end of changelog for @here/pkgB",
+ "failure"
+ ]
+]
+
+exports['NodeWorkspaceDependencyUpdates run updates dependent from pre-release version changes'] = `
+====================
+{
+ "config": {
+ "releaseType": "node",
+ "packageName": "@here/pkgA",
+ "path": "packages/pkgA"
+ },
+ "prData": {
+ "version": "1.1.2",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgA/package.json
+{
+ "name": "@here/pkgA",
+ "version": "1.1.2",
+ "dependencies": {
+ "@there/foo": "^4.1.7"
+ }
+}
+
+filename: packages/pkgA/CHANGELOG.md
+# Changelog
+
+All notable changes to this project will be documented in this file.### [1.1.2](https://www.github.com/fake/repo/compare/pkgA-v1.1.1...pkgA-v1.1.2) (1983-10-10)
+
+
+### Bug Fixes
+
+* We fixed a bug!
+====================
+{
+ "config": {
+ "path": "packages/pkgB",
+ "releaseType": "node",
+ "packageName": "@here/pkgB"
+ },
+ "prData": {
+ "version": "2.2.3",
+ "changes": {}
+ }
+}
+
+filename: packages/pkgB/package.json
+{
+ "name": "@here/pkgB",
+ "version": "2.2.3",
+ "dependencies": {
+ "@here/pkgA": "^1.1.2",
+ "someExternal": "^9.2.3"
+ }
+}
+
+filename: packages/pkgB/CHANGELOG.md
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+### [2.2.3](https://www.github.com/fake/repo/compare/pkgB-v2.2.2...pkgB-v2.2.3) (1983-10-10)
+
+
+### Dependencies
+
+* The following workspace dependencies were updated
+ * dependencies
+ * @here/pkgA bumped from ^1.1.2-alpha.0 to ^1.1.2
+
+### [2.2.2](https://www.github.com/fake/repo/compare/pkgB-v2.2.1...pkgB-v2.2.2) (1983-10-10)
+
+
+### Bug Fixes
+
+* We fixed a bug
+
+
+`
+
+exports['NodeWorkspaceDependencyUpdates run updates dependent from pre-release version logs'] = [
+ [
+ "node-workspace: found packages/pkgA/package.json in changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgA/package.json from existing changes",
+ "success"
+ ],
+ [
+ "node-workspace: loaded packages/pkgB/package.json from github",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgA/package.json to 1.1.2 from release-please",
+ "success"
+ ],
+ [
+ "node-workspace: setting packages/pkgB/package.json to 2.2.3 from dependency bump",
+ "success"
+ ],
+ [
+ "node-workspace: @here/pkgB.@here/pkgA updated to ^1.1.2",
+ "success"
+ ]
+]
diff --git a/docs/manifest-releaser.md b/docs/manifest-releaser.md
index 45c6c5df1..b59cd7c34 100644
--- a/docs/manifest-releaser.md
+++ b/docs/manifest-releaser.md
@@ -100,6 +100,9 @@ documented in comments)
// - only applicable at top-level config.
"bootstrap-sha": "6fc119838885b0cb831e78ddd23ac01cb819e585",
+ // see Plugins section below
+ // absence defaults to [] (i.e. no plugins)
+ "plugins": ["node-workspace"],
// optional top-level defaults that can be overriden per package:
@@ -249,3 +252,72 @@ with a combined version of the library, i.e.,
This functionality can be achieved by using the special `"."` path.
`"."` indicates a release should be created when any changes are made to the
codebase.
+
+## Plugins
+
+Plugins can be added to perform extra release processing that cannot be achieved
+by an individual releaser because that releaser only has the context of a single
+package on which to operate. A plugin operates in the context of all the
+packages in the monorepo after release-please has run individual releasers on
+each package but before the final PR is created or updated.
+
+### Plugin usage
+
+To use a plugin in your manifest based release-please setup, simply add it to
+the array of the `"plugins"` key in your release-please-config.json. (Note: the
+plugin must already be implemented, see below)
+
+### Plugin implementation
+
+A `ManifestPlugin` instance has these resources avilable:
+- `this.gh`: a `GitHub` instance for any API operations it might want to perform
+- `this.config`: a `Config` object representing all the packages configured for the monorepo
+
+It must implement a `run` method which receives two arguments:
+- the latest versions of all packages (ultimately be written to the manifest)
+- an array of the mapping of package-to-currently-proposed-changes
+and makes any modifications, additions, or deletions to either argument (in
+addition to any other out-of-band side effect) and returns both (potentially
+modified) arguments in a tuple.
+
+For example, a very basic plugin that simply logs the number of packages
+currently appearing in the release written as `src/plugins/num-packages.ts`:
+
+```typescript
+import {CheckpointType} from '../util/checkpoint';
+
+export default class LogNumberPkgsReleased extends ManifestPlugin {
+
+ async run(
+ newManifestVersions: VersionsMap,
+ pkgsWithPRData: ManifestPackageWithPRData[]
+ ): Promise<[VersionsMap, ManifestPackageWithPRData[]]> {
+ this.log(
+ `Number of packages to release: ${pkgsWithPRData.length}`,
+ CheckpointType.Success
+ );
+ return [newManifestVersions, pkgsWithPRData];
+ }
+}
+```
+
+The `num-packages` plugin is not very interesting. Also, if it is not last in
+the `"plugins"` configuration array, it might not be accurate (a subsequent
+plugin could add or remove entries to/from `pkgsWithPRData`)
+
+However, one place a plugin has particular value is in a monorepo where local
+packages depend on the latest version of each other (e.g. yarn/npm workspaces
+for Node, or cargo workspaces for Rust).
+
+
+### node-workspace
+
+The `node-workspace` plugin builds a graph of local node packages configured
+in release-please-config.json and the dependency relationships between them.
+It looks at what packages were updated by release-please and updates their
+reference in other packages' dependencies lists. Even when a particular package
+was not updated by release-please, if a dependency did have an update, it will
+be patch bump the package, create a changelog entry, and add it to the list of
+PR changes. Under the hood this plugin adapts specific dependency graph building
+and updating functionality from the popular
+[lerna](https://github.com/lerna/lerna) tool.
diff --git a/package.json b/package.json
index 287cc11f7..18fc895d7 100644
--- a/package.json
+++ b/package.json
@@ -61,9 +61,14 @@
"dependencies": {
"@conventional-commits/parser": "^0.4.1",
"@iarna/toml": "^2.2.5",
+ "@lerna/collect-updates": "^4.0.0",
+ "@lerna/package": "^3.16.0",
+ "@lerna/package-graph": "^3.18.5",
+ "@lerna/run-topologically": "^3.18.5",
"@octokit/graphql": "^4.3.1",
"@octokit/request": "^5.3.4",
"@octokit/rest": "^18.0.4",
+ "@types/npm-package-arg": "^6.1.0",
"chalk": "^4.0.0",
"code-suggester": "^1.4.0",
"conventional-changelog-conventionalcommits": "^4.4.0",
diff --git a/src/github.ts b/src/github.ts
index ab252bb20..79d9e59fe 100644
--- a/src/github.ts
+++ b/src/github.ts
@@ -112,6 +112,7 @@ export interface GitHubPR {
body: string;
updates: Update[];
labels: string[];
+ changes?: Changes;
}
export interface MergedGitHubPR {
@@ -1184,8 +1185,10 @@ export class GitHub {
return undefined;
}
- // Actually update the files for the release:
- const changes = await this.getChangeSet(options.updates, defaultBranch);
+ // Update the files for the release if not already supplied
+ const changes =
+ options.changes ??
+ (await this.getChangeSet(options.updates, defaultBranch));
const prNumber = await createPullRequest(
this.octokit,
changes,
@@ -1225,7 +1228,7 @@ export class GitHub {
}
}
- private async getChangeSet(
+ async getChangeSet(
updates: Update[],
defaultBranch: string
): Promise {
diff --git a/src/index.ts b/src/index.ts
index 58456c958..a859a83ee 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -17,6 +17,7 @@ import {ReleaseType} from './releasers';
import {ReleasePR} from './release-pr';
import {ChangelogSection} from './conventional-commits';
import {Checkpoint} from './util/checkpoint';
+import {Changes} from 'code-suggester';
export {ReleaseCandidate, ReleasePR} from './release-pr';
@@ -80,6 +81,35 @@ export interface ManifestFactoryOptions
extends GitHubFactoryOptions,
ManifestOptions {}
+// allow list of releaser options used to build ReleasePR subclass instances
+// and GitHubRelease instances for each package. Rejected items:
+// 1. `monorepoTags` and `pullRequestTitlePattern` will never apply
+// 2. `lastPackageVersion` and `versionFile` could be supported if/when ruby
+// support in the manifest is made available. However, ideally they'd be
+// factored out of the ruby ReleasePR prior to adding support here.
+// 3. currently unsupported but possible future support:
+// - `snapshot`
+// - `label`
+export type ManifestPackage = Pick<
+ ReleasePROptions & GitHubReleaseOptions,
+ | 'draft'
+ | 'packageName'
+ | 'bumpMinorPreMajor'
+ | 'bumpPatchForMinorPreMajor'
+ | 'releaseAs'
+ | 'changelogSections'
+ | 'changelogPath'
+> & {
+ // these items are not optional in the manifest context.
+ path: string;
+ releaseType: ReleaseType;
+};
+
+export interface ManifestPackageWithPRData {
+ config: ManifestPackage;
+ prData: {version: string; changes: Changes};
+}
+
// ReleasePR Constructor options
export interface ReleasePRConstructorOptions
extends ReleasePROptions,
diff --git a/src/manifest.ts b/src/manifest.ts
index ae14a0af7..73b358209 100644
--- a/src/manifest.ts
+++ b/src/manifest.ts
@@ -14,7 +14,7 @@
import {CommitSplit} from './commit-split';
import {GitHub, GitHubFileContents, ReleaseCreateResponse} from './github';
-import {Update, VersionsMap} from './updaters/update';
+import {VersionsMap} from './updaters/update';
import {ReleaseType} from './releasers';
import {Commit} from './graphql-to-commits';
import {
@@ -27,8 +27,8 @@ import {BranchName} from './util/branch-name';
import {
factory,
ManifestConstructorOptions,
- ReleasePROptions,
- GitHubReleaseOptions,
+ ManifestPackage,
+ ManifestPackageWithPRData,
} from '.';
import {ChangelogSection} from './conventional-commits';
import {ReleasePleaseManifest} from './updaters/release-please-manifest';
@@ -38,8 +38,10 @@ import {
GitHubReleaseResponse,
GITHUB_RELEASE_LABEL,
} from './github-release';
-import {OpenPROptions} from './release-pr';
import {ReleasePR} from './release-pr';
+import {Changes} from 'code-suggester';
+import {getPlugin} from './plugins';
+import {ManifestPlugin} from './plugins/plugin';
interface ReleaserConfigJson {
'release-type'?: ReleaseType;
@@ -57,45 +59,17 @@ interface ReleaserPackageConfig extends ReleaserConfigJson {
export interface Config extends ReleaserConfigJson {
packages: Record;
- parsedPackages: Package[];
+ parsedPackages: ManifestPackage[];
'bootstrap-sha'?: string;
+ plugins?: string[];
}
-// allow list of releaser options used to build ReleasePR subclass instances
-// and GitHubRelease instances for each package. Rejected items:
-// 1. `monorepoTags` and `pullRequestTitlePattern` will never apply
-// 2. `lastPackageVersion` and `versionFile` could be supported if/when ruby
-// support in the manifest is made available. However, ideally they'd be
-// factored out of the ruby ReleasePR prior to adding support here.
-// 3. currently unsupported but possible future support:
-// - `snapshot`
-// - `label`
-type Package = Pick<
- ReleasePROptions & GitHubReleaseOptions,
- | 'draft'
- | 'packageName'
- | 'bumpMinorPreMajor'
- | 'bumpPatchForMinorPreMajor'
- | 'releaseAs'
- | 'changelogSections'
- | 'changelogPath'
-> & {
- // these items are not optional in the manifest context.
- path: string;
- releaseType: ReleaseType;
-};
-
interface PackageForReleaser {
- config: Package;
+ config: ManifestPackage;
commits: Commit[];
lastVersion?: string;
}
-interface PackageWithPRData {
- config: Package;
- openPROptions: OpenPROptions;
-}
-
type ManifestJson = Record;
export type ManifestGitHubReleaseResult =
@@ -428,7 +402,7 @@ export class Manifest {
}
private async getReleasePR(
- pkg: Package
+ pkg: ManifestPackage
): Promise<[ReleasePR, boolean | undefined]> {
const {releaseType, draft, ...options} = pkg;
const releaserOptions = {
@@ -446,9 +420,9 @@ export class Manifest {
private async runReleasers(
packagesForReleasers: PackageForReleaser[],
sha?: string
- ): Promise<[VersionsMap, PackageWithPRData[]]> {
- const manifestUpdates = new Map();
- const openPRPackages = [];
+ ): Promise<[VersionsMap, ManifestPackageWithPRData[]]> {
+ const newManifestVersions = new Map();
+ const pkgsWithChanges = [];
for (const pkg of packagesForReleasers) {
const [releasePR] = await this.getReleasePR(pkg.config);
const pkgName = await releasePR.getPackageName();
@@ -480,30 +454,25 @@ export class Manifest {
);
if (openPROptions) {
pkg.config.packageName = (await releasePR.getPackageName()).name;
- openPRPackages.push({config: pkg.config, openPROptions});
- manifestUpdates.set(pkg.config.path, openPROptions.version);
+ const changes = await this.gh.getChangeSet(
+ openPROptions.updates,
+ await this.gh.getDefaultBranch()
+ );
+ pkgsWithChanges.push({
+ config: pkg.config,
+ prData: {version: openPROptions.version, changes},
+ });
+ newManifestVersions.set(pkg.config.path, openPROptions.version);
}
}
- return [manifestUpdates, openPRPackages];
+ return [newManifestVersions, pkgsWithChanges];
}
- private async buildManifestPR(
- manifestUpdates: VersionsMap,
- openPRPackages: PackageWithPRData[]
- ): Promise<[string, Update[]]> {
- let body = ':robot: I have created a release \\*beep\\* \\*boop\\*';
- const updates: Update[] = [];
- for (const openPRPackage of openPRPackages) {
- body +=
- '\n\n---\n' +
- `${openPRPackage.config.packageName}: ${openPRPackage.openPROptions.version}\n` +
- `${openPRPackage.openPROptions.changelogEntry}`;
- updates.push(...openPRPackage.openPROptions.updates);
- }
-
- // TODO: `Update` interface to supply cached contents for use in
- // GitHub.getChangeSet processing could be simplified to just use a
- // string - no need for a full blown GitHubFileContents
+ private async getManifestChanges(
+ newManifestVersions: VersionsMap
+ ): Promise {
+ // TODO: simplify `Update.contents?` to just be a string - no need to
+ // roundtrip through a GitHubFileContents
const manifestContents: GitHubFileContents = {
sha: '',
parsedContent: '',
@@ -511,21 +480,82 @@ export class Manifest {
JSON.stringify(await this.getManifestJson())
).toString('base64'),
};
- updates.push(
- new ReleasePleaseManifest({
- changelogEntry: '',
- packageName: '',
- path: this.manifestFileName,
- version: '',
- versions: manifestUpdates,
- contents: manifestContents,
- })
+ const manifestUpdate = new ReleasePleaseManifest({
+ changelogEntry: '',
+ packageName: '',
+ path: this.manifestFileName,
+ version: '',
+ versions: newManifestVersions,
+ contents: manifestContents,
+ });
+ return await this.gh.getChangeSet(
+ [manifestUpdate],
+ await this.gh.getDefaultBranch()
);
+ }
+
+ private buildPRBody(pkg: ManifestPackageWithPRData): string {
+ const version = pkg.prData.version;
+ let body =
+ '' +
+ `${pkg.config.packageName}: ${version}` +
+ '
';
+ let changelogPath = pkg.config.changelogPath ?? 'CHANGELOG.md';
+ if (pkg.config.path !== '.') {
+ changelogPath = `${pkg.config.path}/${changelogPath}`;
+ }
+ const changelog = pkg.prData.changes.get(changelogPath)?.content;
+ if (!changelog) {
+ this.checkpoint(
+ `Failed to find ${changelogPath}`,
+ CheckpointType.Failure
+ );
+ } else {
+ const match = changelog.match(
+ // changelog entries start like
+ // ## 1.0.0 (1983...
+ // ## [4.0.0](https...
+ // ### [1.2.4](https...
+ RegExp(
+ `.*###? \\[?${version}\\]?.*?\n(?.*?)` +
+ // either the next changelog or new lines / spaces to the end if
+ // this is the first entry in the changelog
+ '(\n###? [0-9[].*|[\n ]*$)',
+ 's'
+ )
+ );
+ if (!match) {
+ this.checkpoint(
+ `Failed to find entry in changelog for ${version}`,
+ CheckpointType.Failure
+ );
+ } else {
+ const {currentEntry} = match.groups!;
+ body += '\n\n\n' + currentEntry.trim() + '\n';
+ }
+ }
+ body += ' \n';
+ return body;
+ }
+
+ private async buildManifestPR(
+ newManifestVersions: VersionsMap,
+ // using version, changes
+ packages: ManifestPackageWithPRData[]
+ ): Promise<[string, Changes]> {
+ let body = ':robot: I have created a release \\*beep\\* \\*boop\\*\n---\n';
+ let changes = new Map();
+ for (const pkg of packages) {
+ body += this.buildPRBody(pkg);
+ changes = new Map([...changes, ...pkg.prData.changes]);
+ }
+ const manifestChanges = await this.getManifestChanges(newManifestVersions);
+ changes = new Map([...changes, ...manifestChanges]);
body +=
'\n\nThis PR was generated with [Release Please]' +
`(https://github.com/googleapis/${RELEASE_PLEASE}). See [documentation]` +
`(https://github.com/googleapis/${RELEASE_PLEASE}#${RELEASE_PLEASE}).`;
- return [body, updates];
+ return [body, changes];
}
private async commitsSinceSha(sha?: string): Promise {
@@ -536,6 +566,15 @@ export class Manifest {
return this.gh.commitsSinceShaRest(fromSha);
}
+ private async getPlugins(): Promise {
+ const plugins = [];
+ const config = await this.getConfigJson();
+ for (const p of config.plugins ?? []) {
+ plugins.push(await getPlugin(p, this.gh, config));
+ }
+ return plugins;
+ }
+
async pullRequest(): Promise {
const valid = await this.validate();
if (!valid) {
@@ -549,11 +588,11 @@ export class Manifest {
commits,
lastMergedPR?.sha
);
- const [manifestUpdates, openPRPackages] = await this.runReleasers(
+ let [newManifestVersions, pkgsWithChanges] = await this.runReleasers(
packagesForReleasers,
lastMergedPR?.sha
);
- if (openPRPackages.length === 0) {
+ if (pkgsWithChanges.length === 0) {
this.checkpoint(
'No user facing changes to release',
CheckpointType.Success
@@ -561,16 +600,24 @@ export class Manifest {
return;
}
- const [body, updates] = await this.buildManifestPR(
- manifestUpdates,
- openPRPackages
+ for (const plugin of await this.getPlugins()) {
+ [newManifestVersions, pkgsWithChanges] = await plugin.run(
+ newManifestVersions,
+ pkgsWithChanges
+ );
+ }
+
+ const [body, changes] = await this.buildManifestPR(
+ newManifestVersions,
+ pkgsWithChanges
);
const pr = await this.gh.openPR({
branch: branchName,
title: `chore: release ${await this.gh.getDefaultBranch()}`,
body: body,
- updates,
+ updates: [],
labels: DEFAULT_LABELS,
+ changes,
});
if (pr) {
await this.gh.addLabels(DEFAULT_LABELS, pr);
diff --git a/src/plugins/index.ts b/src/plugins/index.ts
new file mode 100644
index 000000000..86af77a04
--- /dev/null
+++ b/src/plugins/index.ts
@@ -0,0 +1,29 @@
+// Copyright 2021 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+import {ManifestPlugin} from './plugin';
+import {GitHub} from '../github';
+import {Config} from '../manifest';
+
+export async function getPlugin(
+ name: string,
+ github: GitHub,
+ config: Config
+): Promise {
+ // the prefixed './' should be sufficient to tell webpack to include all the
+ // plugin files under src/plugins/
+ // https://webpack.js.org/api/module-methods/#dynamic-expressions-in-import
+ const instance = (await import(`./${name}`)).default;
+ return new instance(github, config, name);
+}
diff --git a/src/plugins/node-workspace.ts b/src/plugins/node-workspace.ts
new file mode 100644
index 000000000..0f3f49055
--- /dev/null
+++ b/src/plugins/node-workspace.ts
@@ -0,0 +1,412 @@
+// Copyright 2021 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+import * as semver from 'semver';
+import cu = require('@lerna/collect-updates');
+import Package = require('@lerna/package');
+import {PackageJson} from '@lerna/package';
+import PackageGraph = require('@lerna/package-graph');
+import runTopologically = require('@lerna/run-topologically');
+import {ManifestPlugin} from './plugin';
+import {ManifestPackageWithPRData, ManifestPackage} from '..';
+import {VersionsMap} from '../updaters/update';
+import {packageJsonStringify} from '../util/package-json-stringify';
+import {CheckpointType} from '../util/checkpoint';
+import {RELEASE_PLEASE} from '../constants';
+import {Changes} from 'code-suggester';
+import {ConventionalCommits} from '../conventional-commits';
+import {Changelog} from '../updaters/changelog';
+
+type PathPkgJson = Map;
+
+export default class NodeWorkspaceDependencyUpdates extends ManifestPlugin {
+ // package.json contents already updated by the node releasers.
+ private filterPackages(
+ pkgsWithPRData: ManifestPackageWithPRData[]
+ ): PathPkgJson {
+ const pathPkgs = new Map();
+ for (const pkg of pkgsWithPRData) {
+ if (pkg.config.releaseType === 'node' && pkg.config.path !== '.') {
+ for (const [path, fileData] of pkg.prData.changes) {
+ if (path === `${pkg.config.path}/package.json`) {
+ this.log(`found ${path} in changes`, CheckpointType.Success);
+ pathPkgs.set(path, JSON.parse(fileData.content!) as PackageJson);
+ }
+ }
+ }
+ }
+ return pathPkgs;
+ }
+
+ // all packages' package.json content - both updated by this run as well as
+ // those that did not update (no user facing commits).
+ private async getAllWorkspacePackages(
+ rpUpdatedPkgs: PathPkgJson
+ ): Promise