test(index): forced plugins to use semantic-release beta
which deduped env-ci to the esm-only version, allowing test double to stub properly
This commit is contained in:
		
							parent
							
								
									9eab1adb9d
								
							
						
					
					
						commit
						f7c85e3fff
					
				
							
								
								
									
										4
									
								
								index.js
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								index.js
									
									
									
									
									
								
							| @ -36,8 +36,8 @@ async function terminalOutput(text) { | |||||||
| 
 | 
 | ||||||
| /* eslint complexity: off */ | /* eslint complexity: off */ | ||||||
| async function run(context, plugins) { | async function run(context, plugins) { | ||||||
|   const {cwd, env, options, logger} = context; |   const {cwd, env, options, logger, envCi} = context; | ||||||
|   const {isCi, branch, prBranch, isPr} = context.envCi; |   const {isCi, branch, prBranch, isPr} = envCi; | ||||||
|   const ciBranch = isPr ? prBranch : branch; |   const ciBranch = isPr ? prBranch : branch; | ||||||
| 
 | 
 | ||||||
|   if (!isCi && !options.dryRun && !options.noCi) { |   if (!isCi && !options.dryRun && !options.noCi) { | ||||||
|  | |||||||
							
								
								
									
										540
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										540
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| @ -6114,26 +6114,6 @@ | |||||||
|         "safe-buffer": "~5.1.0" |         "safe-buffer": "~5.1.0" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "node_modules/fromentries": { |  | ||||||
|       "version": "1.3.2", |  | ||||||
|       "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", |  | ||||||
|       "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", |  | ||||||
|       "funding": [ |  | ||||||
|         { |  | ||||||
|           "type": "github", |  | ||||||
|           "url": "https://github.com/sponsors/feross" |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|           "type": "patreon", |  | ||||||
|           "url": "https://www.patreon.com/feross" |  | ||||||
|         }, |  | ||||||
|         { |  | ||||||
|           "type": "consulting", |  | ||||||
|           "url": "https://feross.org/support" |  | ||||||
|         } |  | ||||||
|       ], |  | ||||||
|       "peer": true |  | ||||||
|     }, |  | ||||||
|     "node_modules/fs-constants": { |     "node_modules/fs-constants": { | ||||||
|       "version": "1.0.0", |       "version": "1.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", |       "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", | ||||||
| @ -12430,9 +12410,9 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "node_modules/semantic-release": { |     "node_modules/semantic-release": { | ||||||
|       "version": "19.0.3", |       "version": "20.0.0-beta.1", | ||||||
|       "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-19.0.3.tgz", |       "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-20.0.0-beta.1.tgz", | ||||||
|       "integrity": "sha512-HaFbydST1cDKZHuFZxB8DTrBLJVK/AnDExpK0s3EqLIAAUAHUgnd+VSJCUtTYQKkAkauL8G9CucODrVCc7BuAA==", |       "integrity": "sha512-lpk+KQ1dFBcqviuGopQ8YEmLJVRMTQYMUJykCRq0CqYpDyUP5+go9FSU60niJmj1FFxXIMxa2Lo3C7AaPYBskg==", | ||||||
|       "peer": true, |       "peer": true, | ||||||
|       "dependencies": { |       "dependencies": { | ||||||
|         "@semantic-release/commit-analyzer": "^9.0.2", |         "@semantic-release/commit-analyzer": "^9.0.2", | ||||||
| @ -12440,29 +12420,29 @@ | |||||||
|         "@semantic-release/github": "^8.0.0", |         "@semantic-release/github": "^8.0.0", | ||||||
|         "@semantic-release/npm": "^9.0.0", |         "@semantic-release/npm": "^9.0.0", | ||||||
|         "@semantic-release/release-notes-generator": "^10.0.0", |         "@semantic-release/release-notes-generator": "^10.0.0", | ||||||
|         "aggregate-error": "^3.0.0", |         "aggregate-error": "^4.0.1", | ||||||
|         "cosmiconfig": "^7.0.0", |         "cosmiconfig": "^7.0.0", | ||||||
|         "debug": "^4.0.0", |         "debug": "^4.0.0", | ||||||
|         "env-ci": "^5.0.0", |         "env-ci": "8.0.0-beta.1", | ||||||
|         "execa": "^5.0.0", |         "execa": "^6.1.0", | ||||||
|         "figures": "^3.0.0", |         "figures": "^5.0.0", | ||||||
|         "find-versions": "^4.0.0", |         "find-versions": "^5.1.0", | ||||||
|         "get-stream": "^6.0.0", |         "get-stream": "^6.0.0", | ||||||
|         "git-log-parser": "^1.2.0", |         "git-log-parser": "^1.2.0", | ||||||
|         "hook-std": "^2.0.0", |         "hook-std": "^3.0.0", | ||||||
|         "hosted-git-info": "^4.0.0", |         "hosted-git-info": "^5.1.0", | ||||||
|         "lodash": "^4.17.21", |         "lodash-es": "^4.17.21", | ||||||
|         "marked": "^4.0.10", |         "marked": "^4.1.0", | ||||||
|         "marked-terminal": "^5.0.0", |         "marked-terminal": "^5.1.1", | ||||||
|         "micromatch": "^4.0.2", |         "micromatch": "^4.0.2", | ||||||
|         "p-each-series": "^2.1.0", |         "p-each-series": "^3.0.0", | ||||||
|         "p-reduce": "^2.0.0", |         "p-reduce": "^3.0.0", | ||||||
|         "read-pkg-up": "^7.0.0", |         "read-pkg-up": "^9.1.0", | ||||||
|         "resolve-from": "^5.0.0", |         "resolve-from": "^5.0.0", | ||||||
|         "semver": "^7.3.2", |         "semver": "^7.3.2", | ||||||
|         "semver-diff": "^3.1.1", |         "semver-diff": "^3.1.1", | ||||||
|         "signale": "^1.2.1", |         "signale": "^1.2.1", | ||||||
|         "yargs": "^16.2.0" |         "yargs": "^17.5.1" | ||||||
|       }, |       }, | ||||||
|       "bin": { |       "bin": { | ||||||
|         "semantic-release": "bin/semantic-release.js" |         "semantic-release": "bin/semantic-release.js" | ||||||
| @ -12471,270 +12451,6 @@ | |||||||
|         "node": ">=16 || ^14.17" |         "node": ">=16 || ^14.17" | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "node_modules/semantic-release/node_modules/aggregate-error": { |  | ||||||
|       "version": "3.1.0", |  | ||||||
|       "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", |  | ||||||
|       "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", |  | ||||||
|       "peer": true, |  | ||||||
|       "dependencies": { |  | ||||||
|         "clean-stack": "^2.0.0", |  | ||||||
|         "indent-string": "^4.0.0" |  | ||||||
|       }, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=8" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/clean-stack": { |  | ||||||
|       "version": "2.2.0", |  | ||||||
|       "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", |  | ||||||
|       "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", |  | ||||||
|       "peer": true, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=6" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/cliui": { |  | ||||||
|       "version": "7.0.4", |  | ||||||
|       "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", |  | ||||||
|       "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", |  | ||||||
|       "peer": true, |  | ||||||
|       "dependencies": { |  | ||||||
|         "string-width": "^4.2.0", |  | ||||||
|         "strip-ansi": "^6.0.0", |  | ||||||
|         "wrap-ansi": "^7.0.0" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/env-ci": { |  | ||||||
|       "version": "5.5.0", |  | ||||||
|       "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-5.5.0.tgz", |  | ||||||
|       "integrity": "sha512-o0JdWIbOLP+WJKIUt36hz1ImQQFuN92nhsfTkHHap+J8CiI8WgGpH/a9jEGHh4/TU5BUUGjlnKXNoDb57+ne+A==", |  | ||||||
|       "peer": true, |  | ||||||
|       "dependencies": { |  | ||||||
|         "execa": "^5.0.0", |  | ||||||
|         "fromentries": "^1.3.2", |  | ||||||
|         "java-properties": "^1.0.0" |  | ||||||
|       }, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=10.17" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/execa": { |  | ||||||
|       "version": "5.1.1", |  | ||||||
|       "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", |  | ||||||
|       "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", |  | ||||||
|       "peer": true, |  | ||||||
|       "dependencies": { |  | ||||||
|         "cross-spawn": "^7.0.3", |  | ||||||
|         "get-stream": "^6.0.0", |  | ||||||
|         "human-signals": "^2.1.0", |  | ||||||
|         "is-stream": "^2.0.0", |  | ||||||
|         "merge-stream": "^2.0.0", |  | ||||||
|         "npm-run-path": "^4.0.1", |  | ||||||
|         "onetime": "^5.1.2", |  | ||||||
|         "signal-exit": "^3.0.3", |  | ||||||
|         "strip-final-newline": "^2.0.0" |  | ||||||
|       }, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=10" |  | ||||||
|       }, |  | ||||||
|       "funding": { |  | ||||||
|         "url": "https://github.com/sindresorhus/execa?sponsor=1" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/figures": { |  | ||||||
|       "version": "3.2.0", |  | ||||||
|       "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", |  | ||||||
|       "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", |  | ||||||
|       "peer": true, |  | ||||||
|       "dependencies": { |  | ||||||
|         "escape-string-regexp": "^1.0.5" |  | ||||||
|       }, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=8" |  | ||||||
|       }, |  | ||||||
|       "funding": { |  | ||||||
|         "url": "https://github.com/sponsors/sindresorhus" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/find-versions": { |  | ||||||
|       "version": "4.0.0", |  | ||||||
|       "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz", |  | ||||||
|       "integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==", |  | ||||||
|       "peer": true, |  | ||||||
|       "dependencies": { |  | ||||||
|         "semver-regex": "^3.1.2" |  | ||||||
|       }, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=10" |  | ||||||
|       }, |  | ||||||
|       "funding": { |  | ||||||
|         "url": "https://github.com/sponsors/sindresorhus" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/hook-std": { |  | ||||||
|       "version": "2.0.0", |  | ||||||
|       "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-2.0.0.tgz", |  | ||||||
|       "integrity": "sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g==", |  | ||||||
|       "peer": true, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=8" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/hosted-git-info": { |  | ||||||
|       "version": "4.1.0", |  | ||||||
|       "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", |  | ||||||
|       "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", |  | ||||||
|       "peer": true, |  | ||||||
|       "dependencies": { |  | ||||||
|         "lru-cache": "^6.0.0" |  | ||||||
|       }, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=10" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/human-signals": { |  | ||||||
|       "version": "2.1.0", |  | ||||||
|       "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", |  | ||||||
|       "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", |  | ||||||
|       "peer": true, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=10.17.0" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/is-stream": { |  | ||||||
|       "version": "2.0.1", |  | ||||||
|       "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", |  | ||||||
|       "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", |  | ||||||
|       "peer": true, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=8" |  | ||||||
|       }, |  | ||||||
|       "funding": { |  | ||||||
|         "url": "https://github.com/sponsors/sindresorhus" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/mimic-fn": { |  | ||||||
|       "version": "2.1.0", |  | ||||||
|       "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", |  | ||||||
|       "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", |  | ||||||
|       "peer": true, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=6" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/npm-run-path": { |  | ||||||
|       "version": "4.0.1", |  | ||||||
|       "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", |  | ||||||
|       "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", |  | ||||||
|       "peer": true, |  | ||||||
|       "dependencies": { |  | ||||||
|         "path-key": "^3.0.0" |  | ||||||
|       }, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=8" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/onetime": { |  | ||||||
|       "version": "5.1.2", |  | ||||||
|       "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", |  | ||||||
|       "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", |  | ||||||
|       "peer": true, |  | ||||||
|       "dependencies": { |  | ||||||
|         "mimic-fn": "^2.1.0" |  | ||||||
|       }, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=6" |  | ||||||
|       }, |  | ||||||
|       "funding": { |  | ||||||
|         "url": "https://github.com/sponsors/sindresorhus" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/p-each-series": { |  | ||||||
|       "version": "2.2.0", |  | ||||||
|       "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", |  | ||||||
|       "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", |  | ||||||
|       "peer": true, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=8" |  | ||||||
|       }, |  | ||||||
|       "funding": { |  | ||||||
|         "url": "https://github.com/sponsors/sindresorhus" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/p-reduce": { |  | ||||||
|       "version": "2.1.0", |  | ||||||
|       "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", |  | ||||||
|       "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", |  | ||||||
|       "peer": true, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=8" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/read-pkg-up": { |  | ||||||
|       "version": "7.0.1", |  | ||||||
|       "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", |  | ||||||
|       "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", |  | ||||||
|       "peer": true, |  | ||||||
|       "dependencies": { |  | ||||||
|         "find-up": "^4.1.0", |  | ||||||
|         "read-pkg": "^5.2.0", |  | ||||||
|         "type-fest": "^0.8.1" |  | ||||||
|       }, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=8" |  | ||||||
|       }, |  | ||||||
|       "funding": { |  | ||||||
|         "url": "https://github.com/sponsors/sindresorhus" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/semver-regex": { |  | ||||||
|       "version": "3.1.4", |  | ||||||
|       "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.4.tgz", |  | ||||||
|       "integrity": "sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==", |  | ||||||
|       "peer": true, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=8" |  | ||||||
|       }, |  | ||||||
|       "funding": { |  | ||||||
|         "url": "https://github.com/sponsors/sindresorhus" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/strip-final-newline": { |  | ||||||
|       "version": "2.0.0", |  | ||||||
|       "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", |  | ||||||
|       "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", |  | ||||||
|       "peer": true, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=6" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/type-fest": { |  | ||||||
|       "version": "0.8.1", |  | ||||||
|       "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", |  | ||||||
|       "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", |  | ||||||
|       "peer": true, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=8" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semantic-release/node_modules/yargs": { |  | ||||||
|       "version": "16.2.0", |  | ||||||
|       "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", |  | ||||||
|       "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", |  | ||||||
|       "peer": true, |  | ||||||
|       "dependencies": { |  | ||||||
|         "cliui": "^7.0.2", |  | ||||||
|         "escalade": "^3.1.1", |  | ||||||
|         "get-caller-file": "^2.0.5", |  | ||||||
|         "require-directory": "^2.1.1", |  | ||||||
|         "string-width": "^4.2.0", |  | ||||||
|         "y18n": "^5.0.5", |  | ||||||
|         "yargs-parser": "^20.2.2" |  | ||||||
|       }, |  | ||||||
|       "engines": { |  | ||||||
|         "node": ">=10" |  | ||||||
|       } |  | ||||||
|     }, |  | ||||||
|     "node_modules/semver": { |     "node_modules/semver": { | ||||||
|       "version": "7.3.5", |       "version": "7.3.5", | ||||||
|       "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", |       "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", | ||||||
| @ -20333,12 +20049,6 @@ | |||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "fromentries": { |  | ||||||
|       "version": "1.3.2", |  | ||||||
|       "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", |  | ||||||
|       "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", |  | ||||||
|       "peer": true |  | ||||||
|     }, |  | ||||||
|     "fs-constants": { |     "fs-constants": { | ||||||
|       "version": "1.0.0", |       "version": "1.0.0", | ||||||
|       "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", |       "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", | ||||||
| @ -24844,9 +24554,9 @@ | |||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "semantic-release": { |     "semantic-release": { | ||||||
|       "version": "19.0.3", |       "version": "20.0.0-beta.1", | ||||||
|       "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-19.0.3.tgz", |       "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-20.0.0-beta.1.tgz", | ||||||
|       "integrity": "sha512-HaFbydST1cDKZHuFZxB8DTrBLJVK/AnDExpK0s3EqLIAAUAHUgnd+VSJCUtTYQKkAkauL8G9CucODrVCc7BuAA==", |       "integrity": "sha512-lpk+KQ1dFBcqviuGopQ8YEmLJVRMTQYMUJykCRq0CqYpDyUP5+go9FSU60niJmj1FFxXIMxa2Lo3C7AaPYBskg==", | ||||||
|       "peer": true, |       "peer": true, | ||||||
|       "requires": { |       "requires": { | ||||||
|         "@semantic-release/commit-analyzer": "^9.0.2", |         "@semantic-release/commit-analyzer": "^9.0.2", | ||||||
| @ -24854,211 +24564,29 @@ | |||||||
|         "@semantic-release/github": "^8.0.0", |         "@semantic-release/github": "^8.0.0", | ||||||
|         "@semantic-release/npm": "^9.0.0", |         "@semantic-release/npm": "^9.0.0", | ||||||
|         "@semantic-release/release-notes-generator": "^10.0.0", |         "@semantic-release/release-notes-generator": "^10.0.0", | ||||||
|         "aggregate-error": "^3.0.0", |         "aggregate-error": "^4.0.1", | ||||||
|         "cosmiconfig": "^7.0.0", |         "cosmiconfig": "^7.0.0", | ||||||
|         "debug": "^4.0.0", |         "debug": "^4.0.0", | ||||||
|         "env-ci": "^5.0.0", |         "env-ci": "8.0.0-beta.1", | ||||||
|         "execa": "^5.0.0", |         "execa": "^6.1.0", | ||||||
|         "figures": "^3.0.0", |         "figures": "^5.0.0", | ||||||
|         "find-versions": "^4.0.0", |         "find-versions": "^5.1.0", | ||||||
|         "get-stream": "^6.0.0", |         "get-stream": "^6.0.0", | ||||||
|         "git-log-parser": "^1.2.0", |         "git-log-parser": "^1.2.0", | ||||||
|         "hook-std": "^2.0.0", |         "hook-std": "^3.0.0", | ||||||
|         "hosted-git-info": "^4.0.0", |         "hosted-git-info": "^5.1.0", | ||||||
|         "lodash": "^4.17.21", |         "lodash-es": "^4.17.21", | ||||||
|         "marked": "^4.0.10", |         "marked": "^4.1.0", | ||||||
|         "marked-terminal": "^5.0.0", |         "marked-terminal": "^5.1.1", | ||||||
|         "micromatch": "^4.0.2", |         "micromatch": "^4.0.2", | ||||||
|         "p-each-series": "^2.1.0", |         "p-each-series": "^3.0.0", | ||||||
|         "p-reduce": "^2.0.0", |         "p-reduce": "^3.0.0", | ||||||
|         "read-pkg-up": "^7.0.0", |         "read-pkg-up": "^9.1.0", | ||||||
|         "resolve-from": "^5.0.0", |         "resolve-from": "^5.0.0", | ||||||
|         "semver": "^7.3.2", |         "semver": "^7.3.2", | ||||||
|         "semver-diff": "^3.1.1", |         "semver-diff": "^3.1.1", | ||||||
|         "signale": "^1.2.1", |         "signale": "^1.2.1", | ||||||
|         "yargs": "^16.2.0" |         "yargs": "^17.5.1" | ||||||
|       }, |  | ||||||
|       "dependencies": { |  | ||||||
|         "aggregate-error": { |  | ||||||
|           "version": "3.1.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", |  | ||||||
|           "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", |  | ||||||
|           "peer": true, |  | ||||||
|           "requires": { |  | ||||||
|             "clean-stack": "^2.0.0", |  | ||||||
|             "indent-string": "^4.0.0" |  | ||||||
|           } |  | ||||||
|         }, |  | ||||||
|         "clean-stack": { |  | ||||||
|           "version": "2.2.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", |  | ||||||
|           "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", |  | ||||||
|           "peer": true |  | ||||||
|         }, |  | ||||||
|         "cliui": { |  | ||||||
|           "version": "7.0.4", |  | ||||||
|           "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", |  | ||||||
|           "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", |  | ||||||
|           "peer": true, |  | ||||||
|           "requires": { |  | ||||||
|             "string-width": "^4.2.0", |  | ||||||
|             "strip-ansi": "^6.0.0", |  | ||||||
|             "wrap-ansi": "^7.0.0" |  | ||||||
|           } |  | ||||||
|         }, |  | ||||||
|         "env-ci": { |  | ||||||
|           "version": "5.5.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-5.5.0.tgz", |  | ||||||
|           "integrity": "sha512-o0JdWIbOLP+WJKIUt36hz1ImQQFuN92nhsfTkHHap+J8CiI8WgGpH/a9jEGHh4/TU5BUUGjlnKXNoDb57+ne+A==", |  | ||||||
|           "peer": true, |  | ||||||
|           "requires": { |  | ||||||
|             "execa": "^5.0.0", |  | ||||||
|             "fromentries": "^1.3.2", |  | ||||||
|             "java-properties": "^1.0.0" |  | ||||||
|           } |  | ||||||
|         }, |  | ||||||
|         "execa": { |  | ||||||
|           "version": "5.1.1", |  | ||||||
|           "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", |  | ||||||
|           "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", |  | ||||||
|           "peer": true, |  | ||||||
|           "requires": { |  | ||||||
|             "cross-spawn": "^7.0.3", |  | ||||||
|             "get-stream": "^6.0.0", |  | ||||||
|             "human-signals": "^2.1.0", |  | ||||||
|             "is-stream": "^2.0.0", |  | ||||||
|             "merge-stream": "^2.0.0", |  | ||||||
|             "npm-run-path": "^4.0.1", |  | ||||||
|             "onetime": "^5.1.2", |  | ||||||
|             "signal-exit": "^3.0.3", |  | ||||||
|             "strip-final-newline": "^2.0.0" |  | ||||||
|           } |  | ||||||
|         }, |  | ||||||
|         "figures": { |  | ||||||
|           "version": "3.2.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", |  | ||||||
|           "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", |  | ||||||
|           "peer": true, |  | ||||||
|           "requires": { |  | ||||||
|             "escape-string-regexp": "^1.0.5" |  | ||||||
|           } |  | ||||||
|         }, |  | ||||||
|         "find-versions": { |  | ||||||
|           "version": "4.0.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz", |  | ||||||
|           "integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==", |  | ||||||
|           "peer": true, |  | ||||||
|           "requires": { |  | ||||||
|             "semver-regex": "^3.1.2" |  | ||||||
|           } |  | ||||||
|         }, |  | ||||||
|         "hook-std": { |  | ||||||
|           "version": "2.0.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-2.0.0.tgz", |  | ||||||
|           "integrity": "sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g==", |  | ||||||
|           "peer": true |  | ||||||
|         }, |  | ||||||
|         "hosted-git-info": { |  | ||||||
|           "version": "4.1.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", |  | ||||||
|           "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", |  | ||||||
|           "peer": true, |  | ||||||
|           "requires": { |  | ||||||
|             "lru-cache": "^6.0.0" |  | ||||||
|           } |  | ||||||
|         }, |  | ||||||
|         "human-signals": { |  | ||||||
|           "version": "2.1.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", |  | ||||||
|           "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", |  | ||||||
|           "peer": true |  | ||||||
|         }, |  | ||||||
|         "is-stream": { |  | ||||||
|           "version": "2.0.1", |  | ||||||
|           "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", |  | ||||||
|           "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", |  | ||||||
|           "peer": true |  | ||||||
|         }, |  | ||||||
|         "mimic-fn": { |  | ||||||
|           "version": "2.1.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", |  | ||||||
|           "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", |  | ||||||
|           "peer": true |  | ||||||
|         }, |  | ||||||
|         "npm-run-path": { |  | ||||||
|           "version": "4.0.1", |  | ||||||
|           "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", |  | ||||||
|           "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", |  | ||||||
|           "peer": true, |  | ||||||
|           "requires": { |  | ||||||
|             "path-key": "^3.0.0" |  | ||||||
|           } |  | ||||||
|         }, |  | ||||||
|         "onetime": { |  | ||||||
|           "version": "5.1.2", |  | ||||||
|           "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", |  | ||||||
|           "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", |  | ||||||
|           "peer": true, |  | ||||||
|           "requires": { |  | ||||||
|             "mimic-fn": "^2.1.0" |  | ||||||
|           } |  | ||||||
|         }, |  | ||||||
|         "p-each-series": { |  | ||||||
|           "version": "2.2.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", |  | ||||||
|           "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", |  | ||||||
|           "peer": true |  | ||||||
|         }, |  | ||||||
|         "p-reduce": { |  | ||||||
|           "version": "2.1.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", |  | ||||||
|           "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", |  | ||||||
|           "peer": true |  | ||||||
|         }, |  | ||||||
|         "read-pkg-up": { |  | ||||||
|           "version": "7.0.1", |  | ||||||
|           "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", |  | ||||||
|           "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", |  | ||||||
|           "peer": true, |  | ||||||
|           "requires": { |  | ||||||
|             "find-up": "^4.1.0", |  | ||||||
|             "read-pkg": "^5.2.0", |  | ||||||
|             "type-fest": "^0.8.1" |  | ||||||
|           } |  | ||||||
|         }, |  | ||||||
|         "semver-regex": { |  | ||||||
|           "version": "3.1.4", |  | ||||||
|           "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.4.tgz", |  | ||||||
|           "integrity": "sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==", |  | ||||||
|           "peer": true |  | ||||||
|         }, |  | ||||||
|         "strip-final-newline": { |  | ||||||
|           "version": "2.0.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", |  | ||||||
|           "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", |  | ||||||
|           "peer": true |  | ||||||
|         }, |  | ||||||
|         "type-fest": { |  | ||||||
|           "version": "0.8.1", |  | ||||||
|           "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", |  | ||||||
|           "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", |  | ||||||
|           "peer": true |  | ||||||
|         }, |  | ||||||
|         "yargs": { |  | ||||||
|           "version": "16.2.0", |  | ||||||
|           "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", |  | ||||||
|           "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", |  | ||||||
|           "peer": true, |  | ||||||
|           "requires": { |  | ||||||
|             "cliui": "^7.0.2", |  | ||||||
|             "escalade": "^3.1.1", |  | ||||||
|             "get-caller-file": "^2.0.5", |  | ||||||
|             "require-directory": "^2.1.1", |  | ||||||
|             "string-width": "^4.2.0", |  | ||||||
|             "y18n": "^5.0.5", |  | ||||||
|             "yargs-parser": "^20.2.2" |  | ||||||
|           } |  | ||||||
|         } |  | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|     "semver": { |     "semver": { | ||||||
|  | |||||||
| @ -75,6 +75,9 @@ | |||||||
|     "testdouble": "3.16.6", |     "testdouble": "3.16.6", | ||||||
|     "xo": "0.32.1" |     "xo": "0.32.1" | ||||||
|   }, |   }, | ||||||
|  |   "overrides": { | ||||||
|  |     "semantic-release": "20.0.0-beta.1" | ||||||
|  |   }, | ||||||
|   "engines": { |   "engines": { | ||||||
|     "node": ">=16 || ^14.17" |     "node": ">=16 || ^14.17" | ||||||
|   }, |   }, | ||||||
|  | |||||||
| @ -125,7 +125,7 @@ test('Plugins are called with expected values', async (t) => { | |||||||
|     publish: [publish, pluginNoop], |     publish: [publish, pluginNoop], | ||||||
|     success, |     success, | ||||||
|   }; |   }; | ||||||
|   const envCi = {branch: 'master', isCi: true, isPr: false}; |   const envCiResults = {branch: 'master', isCi: true, isPr: false}; | ||||||
| 
 | 
 | ||||||
|   const releases = [ |   const releases = [ | ||||||
|     { |     { | ||||||
| @ -143,7 +143,8 @@ test('Plugins are called with expected values', async (t) => { | |||||||
|   ]; |   ]; | ||||||
| 
 | 
 | ||||||
|   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); |   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); | ||||||
|   await td.replaceEsm('env-ci', null, () => envCi); |   const envCi = (await td.replaceEsm('env-ci')).default; | ||||||
|  |   td.when(envCi({env, cwd})).thenReturn(envCiResults); | ||||||
|   const semanticRelease = (await import('../index.js')).default; |   const semanticRelease = (await import('../index.js')).default; | ||||||
|   const result = await semanticRelease(options, { |   const result = await semanticRelease(options, { | ||||||
|     cwd, |     cwd, | ||||||
| @ -159,7 +160,7 @@ test('Plugins are called with expected values', async (t) => { | |||||||
|   t.deepEqual(verifyConditions1.args[0][1].branch, branch); |   t.deepEqual(verifyConditions1.args[0][1].branch, branch); | ||||||
|   t.deepEqual(verifyConditions1.args[0][1].branches, branches); |   t.deepEqual(verifyConditions1.args[0][1].branches, branches); | ||||||
|   t.deepEqual(verifyConditions1.args[0][1].logger, t.context.logger); |   t.deepEqual(verifyConditions1.args[0][1].logger, t.context.logger); | ||||||
|   t.deepEqual(verifyConditions1.args[0][1].envCi, envCi); |   t.deepEqual(verifyConditions1.args[0][1].envCi, envCiResults); | ||||||
|   t.is(verifyConditions2.callCount, 1); |   t.is(verifyConditions2.callCount, 1); | ||||||
|   t.deepEqual(verifyConditions2.args[0][0], config); |   t.deepEqual(verifyConditions2.args[0][0], config); | ||||||
|   t.deepEqual(verifyConditions2.args[0][1].cwd, cwd); |   t.deepEqual(verifyConditions2.args[0][1].cwd, cwd); | ||||||
| @ -167,7 +168,7 @@ test('Plugins are called with expected values', async (t) => { | |||||||
|   t.deepEqual(verifyConditions2.args[0][1].branch, branch); |   t.deepEqual(verifyConditions2.args[0][1].branch, branch); | ||||||
|   t.deepEqual(verifyConditions2.args[0][1].branches, branches); |   t.deepEqual(verifyConditions2.args[0][1].branches, branches); | ||||||
|   t.deepEqual(verifyConditions2.args[0][1].logger, t.context.logger); |   t.deepEqual(verifyConditions2.args[0][1].logger, t.context.logger); | ||||||
|   t.deepEqual(verifyConditions2.args[0][1].envCi, envCi); |   t.deepEqual(verifyConditions2.args[0][1].envCi, envCiResults); | ||||||
| 
 | 
 | ||||||
|   t.is(generateNotes1.callCount, 2); |   t.is(generateNotes1.callCount, 2); | ||||||
|   t.is(generateNotes2.callCount, 2); |   t.is(generateNotes2.callCount, 2); | ||||||
| @ -189,7 +190,7 @@ test('Plugins are called with expected values', async (t) => { | |||||||
|     gitTag: 'v1.0.0', |     gitTag: 'v1.0.0', | ||||||
|     name: 'v1.0.0', |     name: 'v1.0.0', | ||||||
|   }); |   }); | ||||||
|   t.deepEqual(generateNotes2.args[0][1].envCi, envCi); |   t.deepEqual(generateNotes2.args[0][1].envCi, envCiResults); | ||||||
| 
 | 
 | ||||||
|   t.deepEqual(generateNotes2.args[0][0], config); |   t.deepEqual(generateNotes2.args[0][0], config); | ||||||
|   t.deepEqual(generateNotes2.args[0][1].options, options); |   t.deepEqual(generateNotes2.args[0][1].options, options); | ||||||
| @ -208,7 +209,7 @@ test('Plugins are called with expected values', async (t) => { | |||||||
|     name: 'v1.0.0', |     name: 'v1.0.0', | ||||||
|     notes: notes1, |     notes: notes1, | ||||||
|   }); |   }); | ||||||
|   t.deepEqual(generateNotes2.args[0][1].envCi, envCi); |   t.deepEqual(generateNotes2.args[0][1].envCi, envCiResults); | ||||||
| 
 | 
 | ||||||
|   t.deepEqual(generateNotes3.args[0][0], config); |   t.deepEqual(generateNotes3.args[0][0], config); | ||||||
|   t.deepEqual(generateNotes3.args[0][1].options, options); |   t.deepEqual(generateNotes3.args[0][1].options, options); | ||||||
| @ -227,7 +228,7 @@ test('Plugins are called with expected values', async (t) => { | |||||||
|     name: 'v1.0.0', |     name: 'v1.0.0', | ||||||
|     notes: `${notes1}\n\n${notes2}`, |     notes: `${notes1}\n\n${notes2}`, | ||||||
|   }); |   }); | ||||||
|   t.deepEqual(generateNotes3.args[0][1].envCi, envCi); |   t.deepEqual(generateNotes3.args[0][1].envCi, envCiResults); | ||||||
| 
 | 
 | ||||||
|   branch.tags.push({ |   branch.tags.push({ | ||||||
|     version: '1.0.0', |     version: '1.0.0', | ||||||
| @ -255,7 +256,7 @@ test('Plugins are called with expected values', async (t) => { | |||||||
|   }); |   }); | ||||||
|   t.deepEqual(addChannel.args[0][1].commits[0].hash, commits[1].hash); |   t.deepEqual(addChannel.args[0][1].commits[0].hash, commits[1].hash); | ||||||
|   t.deepEqual(addChannel.args[0][1].commits[0].message, commits[1].message); |   t.deepEqual(addChannel.args[0][1].commits[0].message, commits[1].message); | ||||||
|   t.deepEqual(addChannel.args[0][1].envCi, envCi); |   t.deepEqual(addChannel.args[0][1].envCi, envCiResults); | ||||||
| 
 | 
 | ||||||
|   t.is(analyzeCommits.callCount, 1); |   t.is(analyzeCommits.callCount, 1); | ||||||
|   t.deepEqual(analyzeCommits.args[0][0], config); |   t.deepEqual(analyzeCommits.args[0][0], config); | ||||||
| @ -266,7 +267,7 @@ test('Plugins are called with expected values', async (t) => { | |||||||
|   t.deepEqual(analyzeCommits.args[0][1].lastRelease, lastRelease); |   t.deepEqual(analyzeCommits.args[0][1].lastRelease, lastRelease); | ||||||
|   t.deepEqual(analyzeCommits.args[0][1].commits[0].hash, commits[0].hash); |   t.deepEqual(analyzeCommits.args[0][1].commits[0].hash, commits[0].hash); | ||||||
|   t.deepEqual(analyzeCommits.args[0][1].commits[0].message, commits[0].message); |   t.deepEqual(analyzeCommits.args[0][1].commits[0].message, commits[0].message); | ||||||
|   t.deepEqual(analyzeCommits.args[0][1].envCi, envCi); |   t.deepEqual(analyzeCommits.args[0][1].envCi, envCiResults); | ||||||
| 
 | 
 | ||||||
|   t.is(verifyRelease.callCount, 1); |   t.is(verifyRelease.callCount, 1); | ||||||
|   t.deepEqual(verifyRelease.args[0][0], config); |   t.deepEqual(verifyRelease.args[0][0], config); | ||||||
| @ -278,7 +279,7 @@ test('Plugins are called with expected values', async (t) => { | |||||||
|   t.deepEqual(verifyRelease.args[0][1].commits[0].hash, commits[0].hash); |   t.deepEqual(verifyRelease.args[0][1].commits[0].hash, commits[0].hash); | ||||||
|   t.deepEqual(verifyRelease.args[0][1].commits[0].message, commits[0].message); |   t.deepEqual(verifyRelease.args[0][1].commits[0].message, commits[0].message); | ||||||
|   t.deepEqual(verifyRelease.args[0][1].nextRelease, nextRelease); |   t.deepEqual(verifyRelease.args[0][1].nextRelease, nextRelease); | ||||||
|   t.deepEqual(verifyRelease.args[0][1].envCi, envCi); |   t.deepEqual(verifyRelease.args[0][1].envCi, envCiResults); | ||||||
| 
 | 
 | ||||||
|   t.deepEqual(generateNotes1.args[1][0], config); |   t.deepEqual(generateNotes1.args[1][0], config); | ||||||
|   t.deepEqual(generateNotes1.args[1][1].options, options); |   t.deepEqual(generateNotes1.args[1][1].options, options); | ||||||
| @ -289,7 +290,7 @@ test('Plugins are called with expected values', async (t) => { | |||||||
|   t.deepEqual(generateNotes1.args[1][1].commits[0].hash, commits[0].hash); |   t.deepEqual(generateNotes1.args[1][1].commits[0].hash, commits[0].hash); | ||||||
|   t.deepEqual(generateNotes1.args[1][1].commits[0].message, commits[0].message); |   t.deepEqual(generateNotes1.args[1][1].commits[0].message, commits[0].message); | ||||||
|   t.deepEqual(generateNotes1.args[1][1].nextRelease, nextRelease); |   t.deepEqual(generateNotes1.args[1][1].nextRelease, nextRelease); | ||||||
|   t.deepEqual(generateNotes1.args[1][1].envCi, envCi); |   t.deepEqual(generateNotes1.args[1][1].envCi, envCiResults); | ||||||
| 
 | 
 | ||||||
|   t.deepEqual(generateNotes2.args[1][0], config); |   t.deepEqual(generateNotes2.args[1][0], config); | ||||||
|   t.deepEqual(generateNotes2.args[1][1].options, options); |   t.deepEqual(generateNotes2.args[1][1].options, options); | ||||||
| @ -300,7 +301,7 @@ test('Plugins are called with expected values', async (t) => { | |||||||
|   t.deepEqual(generateNotes2.args[1][1].commits[0].hash, commits[0].hash); |   t.deepEqual(generateNotes2.args[1][1].commits[0].hash, commits[0].hash); | ||||||
|   t.deepEqual(generateNotes2.args[1][1].commits[0].message, commits[0].message); |   t.deepEqual(generateNotes2.args[1][1].commits[0].message, commits[0].message); | ||||||
|   t.deepEqual(generateNotes2.args[1][1].nextRelease, {...nextRelease, notes: notes1}); |   t.deepEqual(generateNotes2.args[1][1].nextRelease, {...nextRelease, notes: notes1}); | ||||||
|   t.deepEqual(generateNotes2.args[1][1].envCi, envCi); |   t.deepEqual(generateNotes2.args[1][1].envCi, envCiResults); | ||||||
| 
 | 
 | ||||||
|   t.deepEqual(generateNotes3.args[1][0], config); |   t.deepEqual(generateNotes3.args[1][0], config); | ||||||
|   t.deepEqual(generateNotes3.args[1][1].options, options); |   t.deepEqual(generateNotes3.args[1][1].options, options); | ||||||
| @ -311,7 +312,7 @@ test('Plugins are called with expected values', async (t) => { | |||||||
|   t.deepEqual(generateNotes3.args[1][1].commits[0].hash, commits[0].hash); |   t.deepEqual(generateNotes3.args[1][1].commits[0].hash, commits[0].hash); | ||||||
|   t.deepEqual(generateNotes3.args[1][1].commits[0].message, commits[0].message); |   t.deepEqual(generateNotes3.args[1][1].commits[0].message, commits[0].message); | ||||||
|   t.deepEqual(generateNotes3.args[1][1].nextRelease, {...nextRelease, notes: `${notes1}\n\n${notes2}`}); |   t.deepEqual(generateNotes3.args[1][1].nextRelease, {...nextRelease, notes: `${notes1}\n\n${notes2}`}); | ||||||
|   t.deepEqual(generateNotes3.args[1][1].envCi, envCi); |   t.deepEqual(generateNotes3.args[1][1].envCi, envCiResults); | ||||||
| 
 | 
 | ||||||
|   t.is(prepare.callCount, 1); |   t.is(prepare.callCount, 1); | ||||||
|   t.deepEqual(prepare.args[0][0], config); |   t.deepEqual(prepare.args[0][0], config); | ||||||
| @ -323,7 +324,7 @@ test('Plugins are called with expected values', async (t) => { | |||||||
|   t.deepEqual(prepare.args[0][1].commits[0].hash, commits[0].hash); |   t.deepEqual(prepare.args[0][1].commits[0].hash, commits[0].hash); | ||||||
|   t.deepEqual(prepare.args[0][1].commits[0].message, commits[0].message); |   t.deepEqual(prepare.args[0][1].commits[0].message, commits[0].message); | ||||||
|   t.deepEqual(prepare.args[0][1].nextRelease, {...nextRelease, notes: `${notes1}\n\n${notes2}\n\n${notes3}`}); |   t.deepEqual(prepare.args[0][1].nextRelease, {...nextRelease, notes: `${notes1}\n\n${notes2}\n\n${notes3}`}); | ||||||
|   t.deepEqual(prepare.args[0][1].envCi, envCi); |   t.deepEqual(prepare.args[0][1].envCi, envCiResults); | ||||||
| 
 | 
 | ||||||
|   t.is(publish.callCount, 1); |   t.is(publish.callCount, 1); | ||||||
|   t.deepEqual(publish.args[0][0], config); |   t.deepEqual(publish.args[0][0], config); | ||||||
| @ -335,7 +336,7 @@ test('Plugins are called with expected values', async (t) => { | |||||||
|   t.deepEqual(publish.args[0][1].commits[0].hash, commits[0].hash); |   t.deepEqual(publish.args[0][1].commits[0].hash, commits[0].hash); | ||||||
|   t.deepEqual(publish.args[0][1].commits[0].message, commits[0].message); |   t.deepEqual(publish.args[0][1].commits[0].message, commits[0].message); | ||||||
|   t.deepEqual(publish.args[0][1].nextRelease, {...nextRelease, notes: `${notes1}\n\n${notes2}\n\n${notes3}`}); |   t.deepEqual(publish.args[0][1].nextRelease, {...nextRelease, notes: `${notes1}\n\n${notes2}\n\n${notes3}`}); | ||||||
|   t.deepEqual(publish.args[0][1].envCi, envCi); |   t.deepEqual(publish.args[0][1].envCi, envCiResults); | ||||||
| 
 | 
 | ||||||
|   t.is(success.callCount, 2); |   t.is(success.callCount, 2); | ||||||
|   t.deepEqual(success.args[0][0], config); |   t.deepEqual(success.args[0][0], config); | ||||||
| @ -356,7 +357,7 @@ test('Plugins are called with expected values', async (t) => { | |||||||
|     notes: `${notes1}\n\n${notes2}\n\n${notes3}`, |     notes: `${notes1}\n\n${notes2}\n\n${notes3}`, | ||||||
|   }); |   }); | ||||||
|   t.deepEqual(success.args[0][1].releases, [releases[0]]); |   t.deepEqual(success.args[0][1].releases, [releases[0]]); | ||||||
|   t.deepEqual(success.args[0][1].envCi, envCi); |   t.deepEqual(success.args[0][1].envCi, envCiResults); | ||||||
| 
 | 
 | ||||||
|   t.deepEqual(success.args[1][0], config); |   t.deepEqual(success.args[1][0], config); | ||||||
|   t.deepEqual(success.args[1][1].options, options); |   t.deepEqual(success.args[1][1].options, options); | ||||||
| @ -368,7 +369,7 @@ test('Plugins are called with expected values', async (t) => { | |||||||
|   t.deepEqual(success.args[1][1].commits[0].message, commits[0].message); |   t.deepEqual(success.args[1][1].commits[0].message, commits[0].message); | ||||||
|   t.deepEqual(success.args[1][1].nextRelease, {...nextRelease, notes: `${notes1}\n\n${notes2}\n\n${notes3}`}); |   t.deepEqual(success.args[1][1].nextRelease, {...nextRelease, notes: `${notes1}\n\n${notes2}\n\n${notes3}`}); | ||||||
|   t.deepEqual(success.args[1][1].releases, [releases[1], releases[2]]); |   t.deepEqual(success.args[1][1].releases, [releases[1], releases[2]]); | ||||||
|   t.deepEqual(success.args[1][1].envCi, envCi); |   t.deepEqual(success.args[1][1].envCi, envCiResults); | ||||||
| 
 | 
 | ||||||
|   t.deepEqual(result, { |   t.deepEqual(result, { | ||||||
|     lastRelease, |     lastRelease, | ||||||
| @ -388,7 +389,7 @@ test('Plugins are called with expected values', async (t) => { | |||||||
|   t.is(env.GIT_COMMITTER_EMAIL, COMMIT_EMAIL); |   t.is(env.GIT_COMMITTER_EMAIL, COMMIT_EMAIL); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Use custom tag format', async (t) => { | test.serial('Use custom tag format', async (t) => { | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   await gitCommits(['First'], {cwd}); |   await gitCommits(['First'], {cwd}); | ||||||
|   await gitTagVersion('test-1.0.0', undefined, {cwd}); |   await gitTagVersion('test-1.0.0', undefined, {cwd}); | ||||||
| @ -434,7 +435,7 @@ test('Use custom tag format', async (t) => { | |||||||
|   t.is(await gitRemoteTagHead(repositoryUrl, nextRelease.gitTag, {cwd}), nextRelease.gitHead); |   t.is(await gitRemoteTagHead(repositoryUrl, nextRelease.gitTag, {cwd}), nextRelease.gitHead); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Use new gitHead, and recreate release notes if a prepare plugin create a commit', async (t) => { | test.serial('Use new gitHead, and recreate release notes if a prepare plugin create a commit', async (t) => { | ||||||
|   // Create a git repository, set the current working directory at the root of the repo
 |   // Create a git repository, set the current working directory at the root of the repo
 | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   // Add commits to the master branch
 |   // Add commits to the master branch
 | ||||||
| @ -507,7 +508,7 @@ test('Use new gitHead, and recreate release notes if a prepare plugin create a c | |||||||
|   t.is(await gitRemoteTagHead(repositoryUrl, nextRelease.gitTag, {cwd}), commits[0].hash); |   t.is(await gitRemoteTagHead(repositoryUrl, nextRelease.gitTag, {cwd}), commits[0].hash); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Make a new release when a commit is forward-ported to an upper branch', async (t) => { | test.serial('Make a new release when a commit is forward-ported to an upper branch', async (t) => { | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   await gitCommits(['feat: initial release'], {cwd}); |   await gitCommits(['feat: initial release'], {cwd}); | ||||||
|   await gitTagVersion('v1.0.0', undefined, {cwd}); |   await gitTagVersion('v1.0.0', undefined, {cwd}); | ||||||
| @ -553,7 +554,7 @@ test('Make a new release when a commit is forward-ported to an upper branch', as | |||||||
|   t.is(success.callCount, 1); |   t.is(success.callCount, 1); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Publish a pre-release version', async (t) => { | test.serial('Publish a pre-release version', async (t) => { | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   await gitCommits(['feat: initial commit'], {cwd}); |   await gitCommits(['feat: initial commit'], {cwd}); | ||||||
|   await gitTagVersion('v1.0.0', undefined, {cwd}); |   await gitTagVersion('v1.0.0', undefined, {cwd}); | ||||||
| @ -575,8 +576,10 @@ test('Publish a pre-release version', async (t) => { | |||||||
|     fail: stub().resolves(), |     fail: stub().resolves(), | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  |   const env = {}; | ||||||
|   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); |   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); | ||||||
|   await td.replaceEsm('env-ci', null, () => ({isCi: true, branch: 'beta', isPr: false})); |   const envCi = (await td.replaceEsm('env-ci')).default; | ||||||
|  |   td.when(envCi({env, cwd})).thenReturn({isCi: true, branch: 'beta', isPr: false}); | ||||||
|   const semanticRelease = (await import('../index.js')).default; |   const semanticRelease = (await import('../index.js')).default; | ||||||
|   let {releases} = await semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}); |   let {releases} = await semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}); | ||||||
| 
 | 
 | ||||||
| @ -588,7 +591,7 @@ test('Publish a pre-release version', async (t) => { | |||||||
|   await gitCommits(['fix: a fix'], {cwd}); |   await gitCommits(['fix: a fix'], {cwd}); | ||||||
|   ({releases} = await semanticRelease(options, { |   ({releases} = await semanticRelease(options, { | ||||||
|     cwd, |     cwd, | ||||||
|     env: {}, |     env, | ||||||
|     stdout: {write: () => {}}, |     stdout: {write: () => {}}, | ||||||
|     stderr: {write: () => {}}, |     stderr: {write: () => {}}, | ||||||
|   })); |   })); | ||||||
| @ -599,7 +602,7 @@ test('Publish a pre-release version', async (t) => { | |||||||
|   t.is(await gitGetNote('v1.1.0-beta.2', {cwd}), '{"channels":["beta"]}'); |   t.is(await gitGetNote('v1.1.0-beta.2', {cwd}), '{"channels":["beta"]}'); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Publish releases from different branch on the same channel', async (t) => { | test.serial('Publish releases from different branch on the same channel', async (t) => { | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   await gitCommits(['feat: initial commit'], {cwd}); |   await gitCommits(['feat: initial commit'], {cwd}); | ||||||
|   await gitTagVersion('v1.0.0', undefined, {cwd}); |   await gitTagVersion('v1.0.0', undefined, {cwd}); | ||||||
| @ -627,10 +630,12 @@ test('Publish releases from different branch on the same channel', async (t) => | |||||||
|     fail: stub().resolves(), |     fail: stub().resolves(), | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  |   const env = {}; | ||||||
|   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); |   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); | ||||||
|   await td.replaceEsm('env-ci', null, () => ({isCi: true, branch: 'next', isPr: false})); |   const envCi = (await td.replaceEsm('env-ci')).default; | ||||||
|  |   td.when(envCi({env, cwd})).thenReturn({isCi: true, branch: 'next', isPr: false}); | ||||||
|   let semanticRelease = (await import('../index.js')).default; |   let semanticRelease = (await import('../index.js')).default; | ||||||
|   let {releases} = await semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}); |   let {releases} = await semanticRelease(options, {cwd, env, stdout: {write: () => {}}, stderr: {write: () => {}}}); | ||||||
| 
 | 
 | ||||||
|   t.is(releases.length, 1); |   t.is(releases.length, 1); | ||||||
|   t.is(releases[0].version, '1.1.0'); |   t.is(releases[0].version, '1.1.0'); | ||||||
| @ -639,7 +644,7 @@ test('Publish releases from different branch on the same channel', async (t) => | |||||||
|   await gitCommits(['fix: a fix'], {cwd}); |   await gitCommits(['fix: a fix'], {cwd}); | ||||||
|   ({releases} = await semanticRelease(options, { |   ({releases} = await semanticRelease(options, { | ||||||
|     cwd, |     cwd, | ||||||
|     env: {}, |     env, | ||||||
|     stdout: {write: () => {}}, |     stdout: {write: () => {}}, | ||||||
|     stderr: {write: () => {}}, |     stderr: {write: () => {}}, | ||||||
|   })); |   })); | ||||||
| @ -660,7 +665,7 @@ test('Publish releases from different branch on the same channel', async (t) => | |||||||
|   t.is(addChannel.callCount, 0); |   t.is(addChannel.callCount, 0); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Publish pre-releases the same channel as regular releases', async (t) => { | test.serial('Publish pre-releases the same channel as regular releases', async (t) => { | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   await gitCommits(['feat: initial commit'], {cwd}); |   await gitCommits(['feat: initial commit'], {cwd}); | ||||||
|   await gitTagVersion('v1.0.0', undefined, {cwd}); |   await gitTagVersion('v1.0.0', undefined, {cwd}); | ||||||
| @ -685,10 +690,12 @@ test('Publish pre-releases the same channel as regular releases', async (t) => { | |||||||
|     fail: stub().resolves(), |     fail: stub().resolves(), | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  |   const env = {}; | ||||||
|   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); |   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); | ||||||
|   await td.replaceEsm('env-ci', null, () => ({isCi: true, branch: 'beta', isPr: false})); |   const envCi = (await td.replaceEsm('env-ci')).default; | ||||||
|  |   td.when(envCi({cwd, env})).thenReturn({isCi: true, branch: 'beta', isPr: false}); | ||||||
|   const semanticRelease = (await import('../index.js')).default; |   const semanticRelease = (await import('../index.js')).default; | ||||||
|   let {releases} = await semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}); |   let {releases} = await semanticRelease(options, {cwd, env, stdout: {write: () => {}}, stderr: {write: () => {}}}); | ||||||
| 
 | 
 | ||||||
|   t.is(releases.length, 1); |   t.is(releases.length, 1); | ||||||
|   t.is(releases[0].version, '1.1.0-beta.1'); |   t.is(releases[0].version, '1.1.0-beta.1'); | ||||||
| @ -697,7 +704,7 @@ test('Publish pre-releases the same channel as regular releases', async (t) => { | |||||||
|   await gitCommits(['fix: a fix'], {cwd}); |   await gitCommits(['fix: a fix'], {cwd}); | ||||||
|   ({releases} = await semanticRelease(options, { |   ({releases} = await semanticRelease(options, { | ||||||
|     cwd, |     cwd, | ||||||
|     env: {}, |     env, | ||||||
|     stdout: {write: () => {}}, |     stdout: {write: () => {}}, | ||||||
|     stderr: {write: () => {}}, |     stderr: {write: () => {}}, | ||||||
|   })); |   })); | ||||||
| @ -707,7 +714,7 @@ test('Publish pre-releases the same channel as regular releases', async (t) => { | |||||||
|   t.is(releases[0].gitTag, 'v1.1.0-beta.2'); |   t.is(releases[0].gitTag, 'v1.1.0-beta.2'); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Do not add pre-releases to a different channel', async (t) => { | test.serial('Do not add pre-releases to a different channel', async (t) => { | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   await gitCommits(['feat: initial release'], {cwd}); |   await gitCommits(['feat: initial release'], {cwd}); | ||||||
|   await gitTagVersion('v1.0.0', undefined, {cwd}); |   await gitTagVersion('v1.0.0', undefined, {cwd}); | ||||||
| @ -750,10 +757,12 @@ test('Do not add pre-releases to a different channel', async (t) => { | |||||||
|     success, |     success, | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  |   const env = {}; | ||||||
|   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); |   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); | ||||||
|   await td.replaceEsm('env-ci', null, () => ({isCi: true, branch: 'master', isPr: false})); |   const envCi = (await td.replaceEsm('env-ci')).default; | ||||||
|  |   td.when(envCi({cwd, env})).thenReturn({isCi: true, branch: 'master', isPr: false}); | ||||||
|   const semanticRelease = (await import('../index.js')).default; |   const semanticRelease = (await import('../index.js')).default; | ||||||
|   t.truthy(await semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}})); |   t.truthy(await semanticRelease(options, {cwd, env, stdout: {write: () => {}}, stderr: {write: () => {}}})); | ||||||
| 
 | 
 | ||||||
|   t.is(addChannel.callCount, 0); |   t.is(addChannel.callCount, 0); | ||||||
| }); | }); | ||||||
| @ -818,10 +827,12 @@ async function addChannelMacro(t, mergeFunction) { | |||||||
|     gitHead: commits[2].hash, |     gitHead: commits[2].hash, | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  |   const env = {}; | ||||||
|   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); |   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); | ||||||
|   await td.replaceEsm('env-ci', null, () => ({isCi: true, branch: 'master', isPr: false})); |   const envCi = (await td.replaceEsm('env-ci')).default; | ||||||
|  |   td.when(envCi({env, cwd})).thenReturn({isCi: true, branch: 'master', isPr: false}); | ||||||
|   const semanticRelease = (await import('../index.js')).default; |   const semanticRelease = (await import('../index.js')).default; | ||||||
|   const result = await semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}); |   const result = await semanticRelease(options, {cwd, env, stdout: {write: () => {}}, stderr: {write: () => {}}}); | ||||||
| 
 | 
 | ||||||
|   t.deepEqual(result.releases, [ |   t.deepEqual(result.releases, [ | ||||||
|     {...nextRelease, ...release1, notes, pluginName: '[Function: functionStub]'}, |     {...nextRelease, ...release1, notes, pluginName: '[Function: functionStub]'}, | ||||||
| @ -835,11 +846,11 @@ async function addChannelMacro(t, mergeFunction) { | |||||||
| 
 | 
 | ||||||
| addChannelMacro.title = (providedTitle) => `Add version to a channel after a merge (${providedTitle})`; | addChannelMacro.title = (providedTitle) => `Add version to a channel after a merge (${providedTitle})`; | ||||||
| 
 | 
 | ||||||
| test('fast-forward', addChannelMacro, mergeFf); | test.serial('fast-forward', addChannelMacro, mergeFf); | ||||||
| test('non fast-forward', addChannelMacro, merge); | test.serial('non fast-forward', addChannelMacro, merge); | ||||||
| test('rebase', addChannelMacro, rebase); | test.serial('rebase', addChannelMacro, rebase); | ||||||
| 
 | 
 | ||||||
| test('Call all "success" plugins even if one errors out', async (t) => { | test.serial('Call all "success" plugins even if one errors out', async (t) => { | ||||||
|   // Create a git repository, set the current working directory at the root of the repo
 |   // Create a git repository, set the current working directory at the root of the repo
 | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   // Add commits to the master branch
 |   // Add commits to the master branch
 | ||||||
| @ -884,12 +895,14 @@ test('Call all "success" plugins even if one errors out', async (t) => { | |||||||
|     success: [success1, success2], |     success: [success1, success2], | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  |   const env = {}; | ||||||
|   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); |   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); | ||||||
|   await td.replaceEsm('env-ci', null, () => ({isCi: true, branch: 'master', isPr: false})); |   const envCi = (await td.replaceEsm('env-ci')).default; | ||||||
|  |   td.when(envCi({cwd, env})).thenReturn({isCi: true, branch: 'master', isPr: false}); | ||||||
|   const semanticRelease = (await import('../index.js')).default; |   const semanticRelease = (await import('../index.js')).default; | ||||||
| 
 | 
 | ||||||
|   await t.throwsAsync( |   await t.throwsAsync( | ||||||
|     semanticRelease(options, {cwd, env: {}, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()}) |     semanticRelease(options, {cwd, env, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()}) | ||||||
|   ); |   ); | ||||||
| 
 | 
 | ||||||
|   t.is(success1.callCount, 1); |   t.is(success1.callCount, 1); | ||||||
| @ -904,7 +917,7 @@ test('Call all "success" plugins even if one errors out', async (t) => { | |||||||
|   ]); |   ]); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Log all "verifyConditions" errors', async (t) => { | test.serial('Log all "verifyConditions" errors', async (t) => { | ||||||
|   // Create a git repository, set the current working directory at the root of the repo
 |   // Create a git repository, set the current working directory at the root of the repo
 | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   // Add commits to the master branch
 |   // Add commits to the master branch
 | ||||||
| @ -934,7 +947,7 @@ test('Log all "verifyConditions" errors', async (t) => { | |||||||
|   const errors = [ |   const errors = [ | ||||||
|     ...(await t.throwsAsync( |     ...(await t.throwsAsync( | ||||||
|       semanticRelease(options, {cwd, env: {}, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()}) |       semanticRelease(options, {cwd, env: {}, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()}) | ||||||
|     )), |     )).errors, | ||||||
|   ]; |   ]; | ||||||
| 
 | 
 | ||||||
|   t.deepEqual(sortBy(errors, ['message']), sortBy([error1, error2, error3], ['message'])); |   t.deepEqual(sortBy(errors, ['message']), sortBy([error1, error2, error3], ['message'])); | ||||||
| @ -949,7 +962,7 @@ test('Log all "verifyConditions" errors', async (t) => { | |||||||
|   t.deepEqual(fail.args[0][1].errors, [error2, error3]); |   t.deepEqual(fail.args[0][1].errors, [error2, error3]); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Log all "verifyRelease" errors', async (t) => { | test.serial('Log all "verifyRelease" errors', async (t) => { | ||||||
|   // Create a git repository, set the current working directory at the root of the repo
 |   // Create a git repository, set the current working directory at the root of the repo
 | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   // Add commits to the master branch
 |   // Add commits to the master branch
 | ||||||
| @ -978,7 +991,7 @@ test('Log all "verifyRelease" errors', async (t) => { | |||||||
|   const errors = [ |   const errors = [ | ||||||
|     ...(await t.throwsAsync( |     ...(await t.throwsAsync( | ||||||
|       semanticRelease(options, {cwd, env: {}, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()}) |       semanticRelease(options, {cwd, env: {}, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()}) | ||||||
|     )), |     )).errors, | ||||||
|   ]; |   ]; | ||||||
| 
 | 
 | ||||||
|   t.deepEqual(sortBy(errors, ['message']), sortBy([error1, error2], ['message'])); |   t.deepEqual(sortBy(errors, ['message']), sortBy([error1, error2], ['message'])); | ||||||
| @ -989,7 +1002,7 @@ test('Log all "verifyRelease" errors', async (t) => { | |||||||
|   t.deepEqual(fail.args[0][1].errors, [error1, error2]); |   t.deepEqual(fail.args[0][1].errors, [error1, error2]); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Dry-run skips addChannel, prepare, publish and success', async (t) => { | test.serial('Dry-run skips addChannel, prepare, publish and success', async (t) => { | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   await gitCommits(['First'], {cwd}); |   await gitCommits(['First'], {cwd}); | ||||||
|   await gitTagVersion('v1.0.0', undefined, {cwd}); |   await gitTagVersion('v1.0.0', undefined, {cwd}); | ||||||
| @ -1054,7 +1067,7 @@ test('Dry-run skips addChannel, prepare, publish and success', async (t) => { | |||||||
|   t.true(t.context.warn.calledWith(`Skip step "success" of plugin "[Function: ${success.name}]" in dry-run mode`)); |   t.true(t.context.warn.calledWith(`Skip step "success" of plugin "[Function: ${success.name}]" in dry-run mode`)); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Dry-run skips fail', async (t) => { | test.serial('Dry-run skips fail', async (t) => { | ||||||
|   // Create a git repository, set the current working directory at the root of the repo
 |   // Create a git repository, set the current working directory at the root of the repo
 | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   // Add commits to the master branch
 |   // Add commits to the master branch
 | ||||||
| @ -1083,7 +1096,7 @@ test('Dry-run skips fail', async (t) => { | |||||||
|   const errors = [ |   const errors = [ | ||||||
|     ...(await t.throwsAsync( |     ...(await t.throwsAsync( | ||||||
|       semanticRelease(options, {cwd, env: {}, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()}) |       semanticRelease(options, {cwd, env: {}, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()}) | ||||||
|     )), |     )).errors, | ||||||
|   ]; |   ]; | ||||||
| 
 | 
 | ||||||
|   t.deepEqual(sortBy(errors, ['message']), sortBy([error1, error2], ['message'])); |   t.deepEqual(sortBy(errors, ['message']), sortBy([error1, error2], ['message'])); | ||||||
| @ -1093,7 +1106,7 @@ test('Dry-run skips fail', async (t) => { | |||||||
|   t.true(t.context.warn.calledWith(`Skip step "fail" of plugin "[Function: ${fail.name}]" in dry-run mode`)); |   t.true(t.context.warn.calledWith(`Skip step "fail" of plugin "[Function: ${fail.name}]" in dry-run mode`)); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Force a dry-run if not on a CI and "noCi" is not explicitly set', async (t) => { | test.serial('Force a dry-run if not on a CI and "noCi" is not explicitly set', async (t) => { | ||||||
|   // Create a git repository, set the current working directory at the root of the repo
 |   // Create a git repository, set the current working directory at the root of the repo
 | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   // Add commits to the master branch
 |   // Add commits to the master branch
 | ||||||
| @ -1157,7 +1170,7 @@ test('Force a dry-run if not on a CI and "noCi" is not explicitly set', async (t | |||||||
|   t.is(success.callCount, 0); |   t.is(success.callCount, 0); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Dry-run does not print changelog if "generateNotes" return "undefined"', async (t) => { | test.serial('Dry-run does not print changelog if "generateNotes" return "undefined"', async (t) => { | ||||||
|   // Create a git repository, set the current working directory at the root of the repo
 |   // Create a git repository, set the current working directory at the root of the repo
 | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   // Add commits to the master branch
 |   // Add commits to the master branch
 | ||||||
| @ -1200,7 +1213,7 @@ test('Dry-run does not print changelog if "generateNotes" return "undefined"', a | |||||||
|   t.deepEqual(t.context.log.args[t.context.log.args.length - 1], ['Release note for version 2.0.0:']); |   t.deepEqual(t.context.log.args[t.context.log.args.length - 1], ['Release note for version 2.0.0:']); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Allow local releases with "noCi" option', async (t) => { | test.serial('Allow local releases with "noCi" option', async (t) => { | ||||||
|   // Create a git repository, set the current working directory at the root of the repo
 |   // Create a git repository, set the current working directory at the root of the repo
 | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   // Add commits to the master branch
 |   // Add commits to the master branch
 | ||||||
| @ -1268,7 +1281,7 @@ test('Allow local releases with "noCi" option', async (t) => { | |||||||
|   t.is(success.callCount, 1); |   t.is(success.callCount, 1); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Accept "undefined" value returned by "generateNotes" and "false" by "publish" and "addChannel"', async (t) => { | test.serial('Accept "undefined" value returned by "generateNotes" and "false" by "publish" and "addChannel"', async (t) => { | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   await gitCommits(['First'], {cwd}); |   await gitCommits(['First'], {cwd}); | ||||||
|   await gitTagVersion('v1.0.0', undefined, {cwd}); |   await gitTagVersion('v1.0.0', undefined, {cwd}); | ||||||
| @ -1336,7 +1349,7 @@ test('Accept "undefined" value returned by "generateNotes" and "false" by "publi | |||||||
|   t.deepEqual(success.args[1][1].releases, [{pluginName: '[Function: functionStub]'}]); |   t.deepEqual(success.args[1][1].releases, [{pluginName: '[Function: functionStub]'}]); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Returns false if triggered by a PR', async (t) => { | test.serial('Returns false if triggered by a PR', async (t) => { | ||||||
|   // Create a git repository, set the current working directory at the root of the repo
 |   // Create a git repository, set the current working directory at the root of the repo
 | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
| 
 | 
 | ||||||
| @ -1356,7 +1369,7 @@ test('Returns false if triggered by a PR', async (t) => { | |||||||
|   ); |   ); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Throws "EINVALIDNEXTVERSION" if next release is out of range of the current maintenance branch', async (t) => { | test.serial('Throws "EINVALIDNEXTVERSION" if next release is out of range of the current maintenance branch', async (t) => { | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   await gitCommits(['feat: initial commit'], {cwd}); |   await gitCommits(['feat: initial commit'], {cwd}); | ||||||
|   await gitTagVersion('v1.0.0', undefined, {cwd}); |   await gitTagVersion('v1.0.0', undefined, {cwd}); | ||||||
| @ -1392,12 +1405,14 @@ test('Throws "EINVALIDNEXTVERSION" if next release is out of range of the curren | |||||||
|     success, |     success, | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  |   const env = {}; | ||||||
|   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); |   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); | ||||||
|   await td.replaceEsm('env-ci', null, () => ({isCi: true, branch: '1.x', isPr: false})); |   const envCi = (await td.replaceEsm('env-ci')).default; | ||||||
|  |   td.when(envCi({cwd, env})).thenReturn({isCi: true, branch: '1.x', isPr: false}); | ||||||
|   const semanticRelease = (await import('../index.js')).default; |   const semanticRelease = (await import('../index.js')).default; | ||||||
| 
 | 
 | ||||||
|   const error = await t.throwsAsync( |   const error = await t.throwsAsync( | ||||||
|     semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}) |     semanticRelease(options, {cwd, env, stdout: {write: () => {}}, stderr: {write: () => {}}}) | ||||||
|   ); |   ); | ||||||
| 
 | 
 | ||||||
|   t.is(error.code, 'EINVALIDNEXTVERSION'); |   t.is(error.code, 'EINVALIDNEXTVERSION'); | ||||||
| @ -1406,7 +1421,7 @@ test('Throws "EINVALIDNEXTVERSION" if next release is out of range of the curren | |||||||
|   t.regex(error.details, /A valid branch could be `master`./); |   t.regex(error.details, /A valid branch could be `master`./); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Throws "EINVALIDNEXTVERSION" if next release is out of range of the current release branch', async (t) => { | test.serial('Throws "EINVALIDNEXTVERSION" if next release is out of range of the current release branch', async (t) => { | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   await gitCommits(['feat: initial commit'], {cwd}); |   await gitCommits(['feat: initial commit'], {cwd}); | ||||||
|   await gitTagVersion('v1.0.0', undefined, {cwd}); |   await gitTagVersion('v1.0.0', undefined, {cwd}); | ||||||
| @ -1457,7 +1472,7 @@ test('Throws "EINVALIDNEXTVERSION" if next release is out of range of the curren | |||||||
|   t.regex(error.details, /A valid branch could be `next` or `next-major`./); |   t.regex(error.details, /A valid branch could be `next` or `next-major`./); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Throws "EINVALIDMAINTENANCEMERGE" if merge an out of range release in a maintenance branch', async (t) => { | test.serial('Throws "EINVALIDMAINTENANCEMERGE" if merge an out of range release in a maintenance branch', async (t) => { | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   await gitCommits(['First'], {cwd}); |   await gitCommits(['First'], {cwd}); | ||||||
|   await gitTagVersion('v1.0.0', undefined, {cwd}); |   await gitTagVersion('v1.0.0', undefined, {cwd}); | ||||||
| @ -1504,11 +1519,11 @@ test('Throws "EINVALIDMAINTENANCEMERGE" if merge an out of range release in a ma | |||||||
| 
 | 
 | ||||||
|   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); |   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); | ||||||
|   await td.replaceEsm('env-ci', null, () => ({isCi: true, branch: '1.1.x', isPr: false})); |   await td.replaceEsm('env-ci', null, () => ({isCi: true, branch: '1.1.x', isPr: false})); | ||||||
|   const semanticRelease = await import('../index.js'); |   const semanticRelease = (await import('../index.js')).default; | ||||||
|   const errors = [ |   const errors = [ | ||||||
|     ...(await t.throwsAsync( |     ...(await t.throwsAsync( | ||||||
|       semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}) |       semanticRelease(options, {cwd, env: {}, stdout: {write: () => {}}, stderr: {write: () => {}}}) | ||||||
|     )), |     )).errors, | ||||||
|   ]; |   ]; | ||||||
| 
 | 
 | ||||||
|   t.is(addChannel.callCount, 0); |   t.is(addChannel.callCount, 0); | ||||||
| @ -1526,7 +1541,7 @@ test('Throws "EINVALIDMAINTENANCEMERGE" if merge an out of range release in a ma | |||||||
|   t.truthy(errors[0].details); |   t.truthy(errors[0].details); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Returns false value if triggered on an outdated clone', async (t) => { | test.serial('Returns false value if triggered on an outdated clone', async (t) => { | ||||||
|   // Create a git repository, set the current working directory at the root of the repo
 |   // Create a git repository, set the current working directory at the root of the repo
 | ||||||
|   let {cwd, repositoryUrl} = await gitRepo(true); |   let {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   const repoDir = cwd; |   const repoDir = cwd; | ||||||
| @ -1553,7 +1568,7 @@ test('Returns false value if triggered on an outdated clone', async (t) => { | |||||||
|   ]); |   ]); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Returns false if not running from the configured branch', async (t) => { | test.serial('Returns false if not running from the configured branch', async (t) => { | ||||||
|   // Create a git repository, set the current working directory at the root of the repo
 |   // Create a git repository, set the current working directory at the root of the repo
 | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   const options = { |   const options = { | ||||||
| @ -1588,7 +1603,7 @@ test('Returns false if not running from the configured branch', async (t) => { | |||||||
|   ); |   ); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Returns false if there is no relevant changes', async (t) => { | test.serial('Returns false if there is no relevant changes', async (t) => { | ||||||
|   // Create a git repository, set the current working directory at the root of the repo
 |   // Create a git repository, set the current working directory at the root of the repo
 | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   // Add commits to the master branch
 |   // Add commits to the master branch
 | ||||||
| @ -1636,7 +1651,7 @@ test('Returns false if there is no relevant changes', async (t) => { | |||||||
|   ); |   ); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Exclude commits with [skip release] or [release skip] from analysis', async (t) => { | test.serial('Exclude commits with [skip release] or [release skip] from analysis', async (t) => { | ||||||
|   // Create a git repository, set the current working directory at the root of the repo
 |   // Create a git repository, set the current working directory at the root of the repo
 | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   // Add commits to the master branch
 |   // Add commits to the master branch
 | ||||||
| @ -1669,12 +1684,14 @@ test('Exclude commits with [skip release] or [release skip] from analysis', asyn | |||||||
|     fail: stub().resolves(), |     fail: stub().resolves(), | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|  |   const env = {}; | ||||||
|   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); |   await td.replaceEsm('../lib/get-logger.js', null, () => t.context.logger); | ||||||
|   await td.replaceEsm('env-ci', null, () => ({isCi: true, branch: 'master', isPr: false})); |   const envCi = (await td.replaceEsm('env-ci')).default; | ||||||
|  |   td.when(envCi({env, cwd})).thenReturn({isCi: true, branch: 'master', isPr: false}); | ||||||
|   const semanticRelease = (await import('../index.js')).default; |   const semanticRelease = (await import('../index.js')).default; | ||||||
|   await semanticRelease(options, { |   await semanticRelease(options, { | ||||||
|     cwd, |     cwd, | ||||||
|     env: {}, |     env, | ||||||
|     stdout: new WritableStreamBuffer(), |     stdout: new WritableStreamBuffer(), | ||||||
|     stderr: new WritableStreamBuffer(), |     stderr: new WritableStreamBuffer(), | ||||||
|   }); |   }); | ||||||
| @ -1684,7 +1701,7 @@ test('Exclude commits with [skip release] or [release skip] from analysis', asyn | |||||||
|   t.deepEqual(analyzeCommits.args[0][1].commits[0], commits[commits.length - 1]); |   t.deepEqual(analyzeCommits.args[0][1].commits[0], commits[commits.length - 1]); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Log both plugins errors and errors thrown by "fail" plugin', async (t) => { | test.serial('Log both plugins errors and errors thrown by "fail" plugin', async (t) => { | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   const pluginError = new SemanticReleaseError('Plugin error', 'ERR'); |   const pluginError = new SemanticReleaseError('Plugin error', 'ERR'); | ||||||
|   const failError1 = new Error('Fail error 1'); |   const failError1 = new Error('Fail error 1'); | ||||||
| @ -1709,7 +1726,7 @@ test('Log both plugins errors and errors thrown by "fail" plugin', async (t) => | |||||||
|   t.is(t.context.error.args[t.context.error.args.length - 2][1], failError2); |   t.is(t.context.error.args[t.context.error.args.length - 2][1], failError2); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Call "fail" only if a plugin returns a SemanticReleaseError', async (t) => { | test.serial('Call "fail" only if a plugin returns a SemanticReleaseError', async (t) => { | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   const pluginError = new Error('Plugin error'); |   const pluginError = new Error('Plugin error'); | ||||||
|   const fail = stub().resolves(); |   const fail = stub().resolves(); | ||||||
| @ -1732,7 +1749,7 @@ test('Call "fail" only if a plugin returns a SemanticReleaseError', async (t) => | |||||||
|   t.is(t.context.error.args[t.context.error.args.length - 1][1], pluginError); |   t.is(t.context.error.args[t.context.error.args.length - 1][1], pluginError); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Throw SemanticReleaseError if repositoryUrl is not set and cannot be found from repo config', async (t) => { | test.serial('Throw SemanticReleaseError if repositoryUrl is not set and cannot be found from repo config', async (t) => { | ||||||
|   // Create a git repository, set the current working directory at the root of the repo
 |   // Create a git repository, set the current working directory at the root of the repo
 | ||||||
|   const {cwd} = await gitRepo(); |   const {cwd} = await gitRepo(); | ||||||
| 
 | 
 | ||||||
| @ -1742,7 +1759,7 @@ test('Throw SemanticReleaseError if repositoryUrl is not set and cannot be found | |||||||
|   const errors = [ |   const errors = [ | ||||||
|     ...(await t.throwsAsync( |     ...(await t.throwsAsync( | ||||||
|       semanticRelease({}, {cwd, env: {}, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()}) |       semanticRelease({}, {cwd, env: {}, stdout: new WritableStreamBuffer(), stderr: new WritableStreamBuffer()}) | ||||||
|     )), |     )).errors, | ||||||
|   ]; |   ]; | ||||||
| 
 | 
 | ||||||
|   // Verify error code and type
 |   // Verify error code and type
 | ||||||
| @ -1752,7 +1769,7 @@ test('Throw SemanticReleaseError if repositoryUrl is not set and cannot be found | |||||||
|   t.truthy(errors[0].details); |   t.truthy(errors[0].details); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Throw an Error if plugin returns an unexpected value', async (t) => { | test.serial('Throw an Error if plugin returns an unexpected value', async (t) => { | ||||||
|   // Create a git repository, set the current working directory at the root of the repo
 |   // Create a git repository, set the current working directory at the root of the repo
 | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   // Add commits to the master branch
 |   // Add commits to the master branch
 | ||||||
| @ -1785,7 +1802,7 @@ test('Throw an Error if plugin returns an unexpected value', async (t) => { | |||||||
|   t.regex(error.details, /string/); |   t.regex(error.details, /string/); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Hide sensitive information passed to "fail" plugin', async (t) => { | test.serial('Hide sensitive information passed to "fail" plugin', async (t) => { | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
| 
 | 
 | ||||||
|   const fail = stub().resolves(); |   const fail = stub().resolves(); | ||||||
| @ -1823,7 +1840,7 @@ test('Hide sensitive information passed to "fail" plugin', async (t) => { | |||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Hide sensitive information passed to "success" plugin', async (t) => { | test.serial('Hide sensitive information passed to "success" plugin', async (t) => { | ||||||
|   const {cwd, repositoryUrl} = await gitRepo(true); |   const {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   await gitCommits(['feat: initial release'], {cwd}); |   await gitCommits(['feat: initial release'], {cwd}); | ||||||
|   await gitTagVersion('v1.0.0', undefined, {cwd}); |   await gitTagVersion('v1.0.0', undefined, {cwd}); | ||||||
| @ -1865,7 +1882,7 @@ test('Hide sensitive information passed to "success" plugin', async (t) => { | |||||||
|   }); |   }); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| test('Get all commits including the ones not in the shallow clone', async (t) => { | test.serial('Get all commits including the ones not in the shallow clone', async (t) => { | ||||||
|   let {cwd, repositoryUrl} = await gitRepo(true); |   let {cwd, repositoryUrl} = await gitRepo(true); | ||||||
|   await gitTagVersion('v1.0.0', undefined, {cwd}); |   await gitTagVersion('v1.0.0', undefined, {cwd}); | ||||||
|   await gitCommits(['First', 'Second', 'Third'], {cwd}); |   await gitCommits(['First', 'Second', 'Third'], {cwd}); | ||||||
|  | |||||||
| @ -659,8 +659,6 @@ test('Hide sensitive environment variable values from the logs', async (t) => { | |||||||
|     extendEnv: false, |     extendEnv: false, | ||||||
|   }); |   }); | ||||||
| 
 | 
 | ||||||
|   console.log({stderr}) |  | ||||||
| 
 |  | ||||||
|   t.regex(stdout, new RegExp(`Console: Exposing token ${escapeRegExp(SECRET_REPLACEMENT)}`)); |   t.regex(stdout, new RegExp(`Console: Exposing token ${escapeRegExp(SECRET_REPLACEMENT)}`)); | ||||||
|   t.regex(stdout, new RegExp(`Log: Exposing token ${escapeRegExp(SECRET_REPLACEMENT)}`)); |   t.regex(stdout, new RegExp(`Log: Exposing token ${escapeRegExp(SECRET_REPLACEMENT)}`)); | ||||||
|   t.regex(stderr, new RegExp(`Error: Console token ${escapeRegExp(SECRET_REPLACEMENT)}`)); |   t.regex(stderr, new RegExp(`Error: Console token ${escapeRegExp(SECRET_REPLACEMENT)}`)); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user