@cmflow/cli 3.4.0-alpha.1 → 3.4.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/README.md +102 -298
  2. package/dist/bin/cm.mjs +9985 -1348
  3. package/dist/bin/cmrelease.mjs +3875 -1193
  4. package/dist/{cli-truncate-CXNquMRK.mjs → cli-truncate-Bi2MjGwF.mjs} +177 -6
  5. package/dist/cli-truncate-DMcpM5Q7.mjs +2 -0
  6. package/dist/cli-truncate-DMcpM5Q7.mjs.map +1 -0
  7. package/dist/{cli-truncate-BmHD4ngn.mjs → cli-truncate-DsW0mgI_.mjs} +177 -6
  8. package/dist/{common-CwPbT3So.mjs → common-BdfXquG0.mjs} +31 -36
  9. package/dist/common-BdfXquG0.mjs.map +1 -0
  10. package/dist/compile-packages-BB08_q2B.mjs +2 -0
  11. package/dist/compile-packages-BB08_q2B.mjs.map +1 -0
  12. package/dist/docker-Cc30aRzl.mjs +34 -0
  13. package/dist/docker-Cc30aRzl.mjs.map +1 -0
  14. package/dist/docker-clean-tags-EvFdWykP.mjs +2 -0
  15. package/dist/docker-clean-tags-EvFdWykP.mjs.map +1 -0
  16. package/dist/docker-publish-CG0aN9se.mjs +2 -0
  17. package/dist/docker-publish-CG0aN9se.mjs.map +1 -0
  18. package/dist/find-packages-611B-66T.mjs +42 -0
  19. package/dist/find-packages-611B-66T.mjs.map +1 -0
  20. package/dist/get-config-8ivgd1KC.mjs +9 -0
  21. package/dist/get-config-8ivgd1KC.mjs.map +1 -0
  22. package/dist/get-east-asian-width-Tfn8qoqd.mjs.map +1 -1
  23. package/dist/{get-east-asian-width-eFfEkHwo.mjs → get-east-asian-width-wiVWCFXf.mjs} +4 -4
  24. package/dist/log-update-CLbF3iV6.mjs +6 -0
  25. package/dist/log-update-CLbF3iV6.mjs.map +1 -0
  26. package/dist/{log-update-B2GqeeDd.mjs → log-update-CTXRtajW.mjs} +185 -14
  27. package/dist/{log-update-BldA9lkm.mjs → log-update-Dy1vPMGY.mjs} +185 -14
  28. package/dist/npm-VM_GgazT.mjs +2 -0
  29. package/dist/npm-VM_GgazT.mjs.map +1 -0
  30. package/dist/{semver-D8gwMSFO.mjs → semver-DFjVbN1S.mjs} +2 -2
  31. package/dist/semver-DFjVbN1S.mjs.map +1 -0
  32. package/dist/source-CwLcYLzI.mjs +7 -0
  33. package/dist/source-CwLcYLzI.mjs.map +1 -0
  34. package/dist/{wrap-ansi-DsMb4WnZ.mjs → wrap-ansi-9ugahFCy.mjs} +2 -2
  35. package/dist/wrap-ansi-9ugahFCy.mjs.map +1 -0
  36. package/dist/{wrap-ansi-CWIezXNl.mjs → wrap-ansi-BRr0GA6g.mjs} +5 -5
  37. package/dist/{wrap-ansi-T0rz0Urp.mjs → wrap-ansi-Cupoo4Yg.mjs} +5 -5
  38. package/dist/wrap-ansi-dwgEjNWf.mjs +2 -0
  39. package/dist/write-package-cxki9d3K.mjs +8 -0
  40. package/dist/write-package-cxki9d3K.mjs.map +1 -0
  41. package/dist/write-packages-CxCAl_AG.mjs +10 -0
  42. package/dist/write-packages-CxCAl_AG.mjs.map +1 -0
  43. package/package.json +9 -41
  44. package/tsdown.config.ts +5 -14
  45. package/.oxfmtrc.json +0 -11
  46. package/.yarn/install-state.gz +0 -0
  47. package/.yarn/releases/yarn-4.18.0.cjs +0 -1000
  48. package/.yarnrc.yml +0 -10
  49. package/bin/cm-checkfeatures.ts +0 -10
  50. package/bin/cm-clean.ts +0 -10
  51. package/bin/cm-config.ts +0 -10
  52. package/bin/cm-deploy.ts +0 -10
  53. package/bin/cm-expedit.ts +0 -19
  54. package/bin/cm-fetch.ts +0 -10
  55. package/bin/cm-finish.ts +0 -10
  56. package/bin/cm-jira-releases.ts +0 -10
  57. package/bin/cm-merge.ts +0 -10
  58. package/bin/cm-publish.ts +0 -10
  59. package/bin/cm-pull.ts +0 -8
  60. package/bin/cm-push.ts +0 -10
  61. package/bin/cm-rebase.ts +0 -10
  62. package/bin/cm-release.ts +0 -5
  63. package/bin/cm-republish.ts +0 -10
  64. package/bin/cm-start.ts +0 -10
  65. package/bin/cm.ts +0 -40
  66. package/dist/cli-truncate-DbOyuy2e.mjs +0 -2
  67. package/dist/cli-truncate-DbOyuy2e.mjs.map +0 -1
  68. package/dist/common-CwPbT3So.mjs.map +0 -1
  69. package/dist/docker-clean-tags-Cd-E8IqJ.mjs +0 -2
  70. package/dist/docker-clean-tags-Cd-E8IqJ.mjs.map +0 -1
  71. package/dist/docker-publish-B0E0qYYB.mjs +0 -2
  72. package/dist/docker-publish-B0E0qYYB.mjs.map +0 -1
  73. package/dist/get-config-DoOyLztI.mjs +0 -41
  74. package/dist/get-config-DoOyLztI.mjs.map +0 -1
  75. package/dist/log-update-By8Z-mak.mjs +0 -6
  76. package/dist/log-update-By8Z-mak.mjs.map +0 -1
  77. package/dist/semver-D8gwMSFO.mjs.map +0 -1
  78. package/dist/src/index.mjs +0 -18
  79. package/dist/src/index.mjs.map +0 -1
  80. package/dist/src/semantic/core/analyze-commits.mjs +0 -2
  81. package/dist/src/semantic/core/analyze-commits.mjs.map +0 -1
  82. package/dist/src/semantic/core/conditional.mjs +0 -2
  83. package/dist/src/semantic/core/conditional.mjs.map +0 -1
  84. package/dist/src/semantic/core/exit.mjs +0 -2
  85. package/dist/src/semantic/core/exit.mjs.map +0 -1
  86. package/dist/src/semantic/core/prepare/bump-version.mjs +0 -48
  87. package/dist/src/semantic/core/prepare/bump-version.mjs.map +0 -1
  88. package/dist/src/semantic/core/prepare/commit.mjs +0 -2
  89. package/dist/src/semantic/core/prepare/commit.mjs.map +0 -1
  90. package/dist/src/semantic/core/prepare/release-info.mjs +0 -2
  91. package/dist/src/semantic/core/prepare/release-info.mjs.map +0 -1
  92. package/dist/src/semantic/core/run.mjs +0 -2
  93. package/dist/src/semantic/core/run.mjs.map +0 -1
  94. package/dist/src/semantic/core/sync-repository.mjs +0 -2
  95. package/dist/src/semantic/core/sync-repository.mjs.map +0 -1
  96. package/dist/src/semantic/core/verify-conditions.mjs +0 -2
  97. package/dist/src/semantic/core/verify-conditions.mjs.map +0 -1
  98. package/dist/src/semantic/core/verify-release.mjs +0 -2
  99. package/dist/src/semantic/core/verify-release.mjs.map +0 -1
  100. package/dist/src/semantic/docker/publish.mjs +0 -2
  101. package/dist/src/semantic/docker/publish.mjs.map +0 -1
  102. package/dist/src/semantic/docker/success.mjs +0 -2
  103. package/dist/src/semantic/docker/success.mjs.map +0 -1
  104. package/dist/strip-ansi-Aeu5cmZe.mjs +0 -174
  105. package/dist/strip-ansi-Cl0pRo-s.mjs +0 -2
  106. package/dist/strip-ansi-Cl0pRo-s.mjs.map +0 -1
  107. package/dist/wrap-ansi-BeIjar2W.mjs +0 -2
  108. package/dist/wrap-ansi-DsMb4WnZ.mjs.map +0 -1
  109. package/mise.toml +0 -2
  110. package/oxlint.json +0 -25
  111. package/release.config.mjs +0 -39
  112. package/src/commands/checkfeatures.ts +0 -39
  113. package/src/commands/clean.ts +0 -36
  114. package/src/commands/config.ts +0 -31
  115. package/src/commands/deploy.ts +0 -39
  116. package/src/commands/fetch.ts +0 -30
  117. package/src/commands/finish.ts +0 -50
  118. package/src/commands/index.ts +0 -13
  119. package/src/commands/jira-releases.ts +0 -97
  120. package/src/commands/merge.ts +0 -58
  121. package/src/commands/prompts/branches.ts +0 -46
  122. package/src/commands/pull.ts +0 -44
  123. package/src/commands/push.ts +0 -48
  124. package/src/commands/rebase.ts +0 -56
  125. package/src/commands/release.ts +0 -21
  126. package/src/commands/republish.ts +0 -34
  127. package/src/commands/start.ts +0 -123
  128. package/src/commands/tasks/merge-branch.ts +0 -80
  129. package/src/commands/tasks/push-branch.ts +0 -19
  130. package/src/commands/tasks/rebase-all-branches.ts +0 -37
  131. package/src/commands/tasks/refresh-repository.ts +0 -38
  132. package/src/commands/tasks/run-test.ts +0 -28
  133. package/src/commands/tasks/update-branch.ts +0 -49
  134. package/src/commands/tasks/update-dependencies.ts +0 -43
  135. package/src/commands/utils/check-install.ts +0 -31
  136. package/src/common/back/directus/directus-flow.test.ts +0 -63
  137. package/src/common/back/directus/directus-flow.ts +0 -48
  138. package/src/common/back/http/http-proxy.ts +0 -21
  139. package/src/common/back/http/http-request.spec.ts +0 -50
  140. package/src/common/back/http/http-request.ts +0 -74
  141. package/src/common/back/jira/get-sorted-releases.ts +0 -40
  142. package/src/common/back/jira/interfaces/JiraIIssue.d.ts +0 -100
  143. package/src/common/back/jira/jira-releases.ts +0 -47
  144. package/src/common/back/jira/jira-request.spec.ts +0 -59
  145. package/src/common/back/jira/jira-request.ts +0 -29
  146. package/src/common/back/jira/jira-search.spec.ts +0 -44
  147. package/src/common/back/jira/jira-search.ts +0 -17
  148. package/src/common/cli/bun.test.ts +0 -58
  149. package/src/common/cli/bun.ts +0 -33
  150. package/src/common/cli/cli.ts +0 -127
  151. package/src/common/cli/docker.test.ts +0 -141
  152. package/src/common/cli/docker.ts +0 -66
  153. package/src/common/cli/git.test.ts +0 -215
  154. package/src/common/cli/git.ts +0 -121
  155. package/src/common/cli/lerna.test.ts +0 -58
  156. package/src/common/cli/lerna.ts +0 -25
  157. package/src/common/cli/npm.test.ts +0 -58
  158. package/src/common/cli/npm.ts +0 -33
  159. package/src/common/cli/pnpm.test.ts +0 -58
  160. package/src/common/cli/pnpm.ts +0 -34
  161. package/src/common/cli/yarn.test.ts +0 -58
  162. package/src/common/cli/yarn.ts +0 -33
  163. package/src/common/configure-git-workspace.ts +0 -39
  164. package/src/common/get-config.ts +0 -159
  165. package/src/common/get-package-json.ts +0 -15
  166. package/src/common/get-package-manager.ts +0 -13
  167. package/src/common/get-release-config.ts +0 -9
  168. package/src/common/index.ts +0 -14
  169. package/src/common/run-command.test.ts +0 -66
  170. package/src/common/run-command.ts +0 -67
  171. package/src/common/types.ts +0 -26
  172. package/src/common/vendor.d.ts +0 -4
  173. package/src/index.ts +0 -14
  174. package/src/semantic/core/analyze-commits.ts +0 -21
  175. package/src/semantic/core/conditional.ts +0 -62
  176. package/src/semantic/core/exit.ts +0 -15
  177. package/src/semantic/core/prepare/bump-version.ts +0 -41
  178. package/src/semantic/core/prepare/commit.ts +0 -30
  179. package/src/semantic/core/prepare/release-info.ts +0 -6
  180. package/src/semantic/core/run.ts +0 -23
  181. package/src/semantic/core/sync-repository.ts +0 -55
  182. package/src/semantic/core/verify-conditions.ts +0 -41
  183. package/src/semantic/core/verify-release.ts +0 -10
  184. package/src/semantic/define-config.ts +0 -42
  185. package/src/semantic/docker/publish.ts +0 -6
  186. package/src/semantic/docker/success.ts +0 -10
  187. package/src/semantic/utils/__mock__/test1/package.json +0 -7
  188. package/src/semantic/utils/__mock__/test1/packages/a/package.json +0 -9
  189. package/src/semantic/utils/__mock__/test1/packages/b/package.json +0 -7
  190. package/src/semantic/utils/__mock__/test2/package.json +0 -4
  191. package/src/semantic/utils/__mock__/test2/packages/a/package.json +0 -7
  192. package/src/semantic/utils/__mock__/test2/packages/b/package.json +0 -5
  193. package/src/semantic/utils/bump-packages-version.test.ts +0 -76
  194. package/src/semantic/utils/bump-packages-version.ts +0 -53
  195. package/src/semantic/utils/calculate-snapshot-version.test.ts +0 -69
  196. package/src/semantic/utils/calculate-snapshot-version.ts +0 -17
  197. package/src/semantic/utils/display-package-info.ts +0 -12
  198. package/src/semantic/utils/display-release-info.ts +0 -13
  199. package/src/semantic/utils/docker-clean-tags.test.ts +0 -62
  200. package/src/semantic/utils/docker-clean-tags.ts +0 -58
  201. package/src/semantic/utils/docker-publish.test.ts +0 -45
  202. package/src/semantic/utils/docker-publish.ts +0 -24
  203. package/src/semantic/utils/log-section.ts +0 -9
  204. package/src/semantic/utils/release-rules.ts +0 -15
  205. package/src/semantic/utils/transform-writer.ts +0 -101
  206. package/src/workflow/index.ts +0 -42
  207. package/tsconfig.build.json +0 -29
  208. package/tsconfig.json +0 -30
  209. package/vitest.config.mts +0 -9
@@ -1,30 +0,0 @@
1
- import { configureGitWorkspace, getConfig, git } from "../../../common/index.js";
2
- import type { SemanticContext } from "../../../common/types.js";
3
-
4
- export async function prepare(pluginConfig: Record<string, unknown>, context: SemanticContext) {
5
- context.config = getConfig();
6
-
7
- const {
8
- logger,
9
- config: { CI_NAME, BUILD_NUMBER }
10
- } = context;
11
-
12
- logger.info("Prepare release");
13
-
14
- configureGitWorkspace(context);
15
-
16
- logger.info("Adding files to commit");
17
- git.add("-A").sync();
18
-
19
- logger.info("Get commit stage status");
20
- git.status();
21
-
22
- const revisionMessage = `chore: ${CI_NAME} build ${context.branch.name} ${BUILD_NUMBER} ${context.nextRelease?.gitTag} [ci skip]`;
23
-
24
- logger.info("Commit changes with revision message: ");
25
- logger.info(revisionMessage);
26
-
27
- git.commit("-m", revisionMessage, "--no-verify").sync();
28
-
29
- logger.success("Change committed");
30
- }
@@ -1,6 +0,0 @@
1
- import { writeFile } from "node:fs/promises";
2
- import type { SemanticContext } from "../../../common/types.js";
3
-
4
- export function prepare(pluginConfig: { path: string }, context: SemanticContext) {
5
- return writeFile(pluginConfig.path, context.branch.name, { encoding: "utf-8" });
6
- }
@@ -1,23 +0,0 @@
1
- import { getConfig, getPackageManager } from "../../common/index.js";
2
- import type { SemanticContext } from "../../common/types.js";
3
-
4
- /**
5
- * @param pluginConfig {{command: string}}
6
- * @param context
7
- * @return {Promise<void>}
8
- */
9
- export default async function runCommand(pluginConfig: { command: string }, context: SemanticContext) {
10
- context.config = getConfig();
11
- const {
12
- config: { PACKAGE_MANAGER },
13
- logger
14
- } = context;
15
-
16
- const pkgManager = getPackageManager(PACKAGE_MANAGER as string);
17
-
18
- logger.info(`Start ${pluginConfig.command} task`);
19
-
20
- await pkgManager.run(pluginConfig.command);
21
-
22
- logger.info(`${pluginConfig.command} task finished with success...`);
23
- }
@@ -1,55 +0,0 @@
1
- import { getConfig, git } from "../../common/index.js";
2
- import type { SemanticContext } from "../../common/types.js";
3
-
4
- export default async function syncRepository(pluginConfig: Record<string, unknown>, context: SemanticContext) {
5
- context.config = getConfig();
6
-
7
- const {
8
- logger,
9
- config: { PRODUCTION_BRANCH, ORIGIN, DEVELOP_BRANCH }
10
- } = context;
11
-
12
- logger.info("Prepare release");
13
-
14
- async function asyncCatchError(fn: () => unknown) {
15
- try {
16
- return await fn();
17
- } catch (er) {
18
- context.logger.error(String(er), (er as Error).stack);
19
- }
20
- }
21
-
22
- await asyncCatchError(() => git.fetch());
23
-
24
- const branchesOption = context.options?.branches;
25
- const branchesArray = Array.isArray(branchesOption) ? branchesOption : branchesOption ? [branchesOption] : [];
26
- const candidateBranches =
27
- (pluginConfig.includes as string[] | undefined) ||
28
- branchesArray.map((branch: string | { name?: string }) => {
29
- return (branch as { name?: string }).name || (branch as string);
30
- });
31
-
32
- logger.info(`Candidate branches to sync: ${(candidateBranches as string[]).join(", ")}`);
33
-
34
- if ((candidateBranches as string[]).includes(context.branch.name)) {
35
- logger.info(`Push ${context.branch.name}`);
36
-
37
- await asyncCatchError(() => {
38
- logger.info(`git push --quiet --set-upstream ${ORIGIN} ${context.branch.name}`);
39
-
40
- return git.push("--quiet", "--set-upstream", ORIGIN as string, context.branch.name);
41
- });
42
- } else {
43
- logger.info(`Skip push for ${context.branch.name}`);
44
- }
45
-
46
- if (PRODUCTION_BRANCH !== DEVELOP_BRANCH) {
47
- logger.info(`Sync ${DEVELOP_BRANCH} with ${PRODUCTION_BRANCH}`);
48
- logger.info(`git push -f ${ORIGIN} ${PRODUCTION_BRANCH}:refs/heads/${DEVELOP_BRANCH}`);
49
-
50
- await asyncCatchError(async () => {
51
- await git.push("-f", ORIGIN as string, `${PRODUCTION_BRANCH}:refs/heads/${DEVELOP_BRANCH}`);
52
- logger.success(`${ORIGIN}/${DEVELOP_BRANCH} branch correctly updated`);
53
- });
54
- }
55
- }
@@ -1,41 +0,0 @@
1
- import chalk from "chalk";
2
-
3
- import { getConfig, git } from "../../common/index.js";
4
- import type { SemanticContext } from "../../common/types.js";
5
-
6
- export function verifyConditions(pluginConfig: Record<string, unknown>, context: SemanticContext) {
7
- if (pluginConfig.dryRun) {
8
- return;
9
- }
10
-
11
- context.config = getConfig();
12
- const {
13
- branch,
14
- config: { USER, EMAIL, ORIGIN, GIT_FETCH_MAX_DEPTH }
15
- } = context;
16
-
17
- if (USER && EMAIL) {
18
- context.logger.info("Configure git with username");
19
-
20
- git.config("--global", "user.name", USER as string);
21
- git.config("--global", "user.email", EMAIL as string);
22
-
23
- context.logger.info("Configure git branch");
24
- context.logger.success("Workspace is correctly configured");
25
- } else {
26
- context.logger.error(chalk.red("Ignore git configuration (Empty GIT_USER_EMAIL or/and GIT_USER_NAME variables)"));
27
- process.exit(1);
28
- }
29
-
30
- if (GIT_FETCH_MAX_DEPTH !== "false") {
31
- if (GIT_FETCH_MAX_DEPTH) {
32
- git.fetch(`--depth=${GIT_FETCH_MAX_DEPTH}`).sync();
33
- } else {
34
- git.fetch().sync();
35
- }
36
-
37
- git.checkout(branch.name).sync();
38
- }
39
-
40
- git.branch(`--set-upstream-to=${ORIGIN}/${branch.name}`, branch.name).sync();
41
- }
@@ -1,10 +0,0 @@
1
- import { getConfig } from "../../common/index.js";
2
- import { displayPackageInfo } from "../utils/display-package-info.js";
3
- import { displayReleaseInfo } from "../utils/display-release-info.js";
4
- import type { SemanticContext } from "../../common/types.js";
5
-
6
- export function verifyRelease(pluginConfig: Record<string, unknown>, context: SemanticContext) {
7
- context.config = getConfig();
8
- displayPackageInfo(context);
9
- displayReleaseInfo(context);
10
- }
@@ -1,42 +0,0 @@
1
- import { getConfig } from "../common/get-config.js";
2
- import { releaseRules } from "./utils/release-rules.js";
3
- import { transformWriter } from "./utils/transform-writer.js";
4
-
5
- /**
6
- * Define the semantic-release configuration based on the ClubMed API configuration.
7
- * @param {import('semantic-release').GlobalConfig} opts
8
- * @returns {import('semantic-release').GlobalConfig}
9
- */
10
- export function defineConfig(opts = {}) {
11
- const { PRODUCTION_BRANCH: productBranch, BRANCH_NAME: branchName } = getConfig();
12
-
13
- return {
14
- noCi: productBranch !== branchName,
15
- branches: [
16
- {
17
- name: productBranch,
18
- channel: "release"
19
- },
20
- // Use this hack to always run semantic-release (as prerelease for feature/fix branch)
21
- {
22
- name: branchName,
23
- channel: "prerelease",
24
- prerelease: true
25
- }
26
- ],
27
- verifyConditions: ["@cmflow/cli/semantic/verify-conditions"],
28
- analyzeCommits: ["@cmflow/cli/semantic/analyze-commits"],
29
- verifyRelease: ["@cmflow/cli/semantic/verify-release"],
30
- generateNotes: ["@cmflow/cli/semantic/generate-notes"],
31
- prepare: [
32
- "@cmflow/cli/semantic/prepare/bump-version",
33
- "@cmflow/cli/semantif/prepare/post" // need to avoid semantic next step
34
- ],
35
- releaseRules,
36
- parserOpts: {
37
- noteKeywords: ["BREAKING CHANGE", "BREAKING CHANGES"]
38
- },
39
- writerOpts: { transform: transformWriter },
40
- ...opts
41
- };
42
- }
@@ -1,6 +0,0 @@
1
- import { dockerPublish } from "../utils/docker-publish.js";
2
- import type { SemanticContext } from "../../common/types.js";
3
-
4
- export async function publish(pluginConfig: Record<string, unknown>, context: SemanticContext) {
5
- await dockerPublish(context);
6
- }
@@ -1,10 +0,0 @@
1
- import type { CmContext } from "../../common/types.js";
2
- import { dockerCleanTags } from "../utils/docker-clean-tags.js";
3
-
4
- export async function success(_: Record<string, unknown>, context: CmContext) {
5
- try {
6
- await dockerCleanTags(context);
7
- } catch (er) {
8
- context.logger.warn(er);
9
- }
10
- }
@@ -1,7 +0,0 @@
1
- {
2
- "name": "@package/root",
3
- "version": "1.1.0",
4
- "dependencies": {},
5
- "devDependencies": {},
6
- "peerDependencies": {}
7
- }
@@ -1,9 +0,0 @@
1
- {
2
- "name": "@package/a",
3
- "version": "1.1.0",
4
- "dependencies": {
5
- "@package/b": "1.1.0"
6
- },
7
- "devDependencies": {},
8
- "peerDependencies": {}
9
- }
@@ -1,7 +0,0 @@
1
- {
2
- "name": "@package/b",
3
- "version": "1.1.0",
4
- "dependencies": {},
5
- "devDependencies": {},
6
- "peerDependencies": {}
7
- }
@@ -1,4 +0,0 @@
1
- {
2
- "name": "@package/root",
3
- "version": "1.0.0"
4
- }
@@ -1,7 +0,0 @@
1
- {
2
- "name": "@package/a",
3
- "version": "1.0.0",
4
- "dependencies": {
5
- "@package/b": "workspace:*"
6
- }
7
- }
@@ -1,5 +0,0 @@
1
- {
2
- "name": "@package/b",
3
- "version": "1.0.0",
4
- "dependencies": {}
5
- }
@@ -1,76 +0,0 @@
1
- // @ts-nocheck
2
- import fs from "fs-extra";
3
- import path from "path";
4
- import * as url from "url";
5
-
6
- import { bumpPackagesVersion } from "./bump-packages-version.js";
7
-
8
- const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
9
-
10
- describe("bumpPackagesVersion()", () => {
11
- beforeEach(() => {
12
- vi.resetAllMocks();
13
- vi.spyOn(fs, "writeFile").mockResolvedValue();
14
- vi.spyOn(fs, "ensureDirSync").mockResolvedValue();
15
- });
16
-
17
- it("should upgrade dependencies (package manager: npm/yarn)", async () => {
18
- await bumpPackagesVersion("1.1.0", ["packages/*"], path.join(__dirname, "__mock__/test1"));
19
-
20
- const calls = fs.writeFile.mock.calls.sort(([a], [b]) => (a > b ? -1 : 1));
21
-
22
- expect(JSON.parse(calls[0][1])).toEqual({
23
- version: "1.1.0",
24
- name: "@package/b",
25
- dependencies: {},
26
- devDependencies: {},
27
- peerDependencies: {}
28
- });
29
-
30
- expect(JSON.parse(calls[1][1])).toEqual({
31
- name: "@package/a",
32
- version: "1.1.0",
33
- dependencies: { "@package/b": "1.1.0" },
34
- devDependencies: {},
35
- peerDependencies: {}
36
- });
37
-
38
- expect(JSON.parse(calls[2][1])).toEqual({
39
- name: "@package/root",
40
- version: "1.1.0",
41
- dependencies: {},
42
- devDependencies: {},
43
- peerDependencies: {}
44
- });
45
- });
46
- it("should upgrade dependencies (package manager: yarn berry)", async () => {
47
- await bumpPackagesVersion("1.1.0", ["packages/*"], path.join(__dirname, "__mock__/test2"));
48
- const calls = fs.writeFile.mock.calls.sort(([a], [b]) => (a > b ? -1 : 1));
49
-
50
- expect(JSON.parse(calls[0][1])).toEqual({
51
- dependencies: {},
52
- devDependencies: {},
53
- name: "@package/b",
54
- peerDependencies: {},
55
- version: "1.1.0"
56
- });
57
-
58
- expect(JSON.parse(calls[1][1])).toEqual({
59
- dependencies: {
60
- "@package/b": "workspace:*"
61
- },
62
- devDependencies: {},
63
- name: "@package/a",
64
- peerDependencies: {},
65
- version: "1.1.0"
66
- });
67
-
68
- expect(JSON.parse(calls[2][1])).toEqual({
69
- dependencies: {},
70
- devDependencies: {},
71
- name: "@package/root",
72
- peerDependencies: {},
73
- version: "1.1.0"
74
- });
75
- });
76
- });
@@ -1,53 +0,0 @@
1
- import fs from "fs-extra";
2
- import { globby } from "globby";
3
- import { dirname } from "path";
4
-
5
- const PACKAGE_JSON_PROPS = ["dependencies", "devDependencies", "peerDependencies"];
6
-
7
- export async function bumpPackagesVersion(version: string, workspaces: string[], cwd = process.cwd()) {
8
- const patterns = workspaces.map((path) => `${path}/package.json`).concat("package.json");
9
-
10
- const files = await globby(patterns, {
11
- cwd,
12
- absolute: true
13
- });
14
-
15
- const names = new Set<string>();
16
-
17
- const packages = await Promise.all(
18
- files.map(async (file: string) => {
19
- const pkg = (await fs.readJson(file)) as Record<string, unknown>;
20
-
21
- names.add(pkg.name as string);
22
-
23
- return {
24
- file,
25
- pkg
26
- };
27
- })
28
- );
29
-
30
- return Promise.all(
31
- packages.map(({ pkg, file }: { pkg: Record<string, unknown>; file: string }) => {
32
- pkg.version = version;
33
-
34
- PACKAGE_JSON_PROPS.forEach((key) => bumpDependencies(pkg, key, version, names));
35
-
36
- fs.ensureDirSync(dirname(file));
37
- return fs.writeFile(file, JSON.stringify(pkg, null, 2), { encoding: "utf8" });
38
- })
39
- );
40
- }
41
-
42
- function bumpDependencies(pkg: Record<string, unknown>, key: string, version: string, names: Set<string>) {
43
- pkg[key] = pkg[key] || {};
44
-
45
- const deps = pkg[key] as Record<string, string>;
46
- if (deps) {
47
- names.forEach((name) => {
48
- if (deps[name] && !deps[name].startsWith("workspace:")) {
49
- deps[name] = version;
50
- }
51
- });
52
- }
53
- }
@@ -1,69 +0,0 @@
1
- import { git, getConfig } from "../../common/index.js";
2
- import type { CmContext } from "../../common/types";
3
- import { calculateSnapshotVersion } from "./calculate-snapshot-version.js";
4
-
5
- vi.mock("../../common/index.js", () => {
6
- return {
7
- git: {
8
- getCommitTag: vi.fn()
9
- },
10
- getConfig: vi.fn()
11
- };
12
- });
13
-
14
- describe("calculateSnapshotVersion", () => {
15
- beforeEach(() => {
16
- vi.mocked(git.getCommitTag).mockReturnValue("13246u");
17
- vi.mocked(getConfig).mockReturnValue({
18
- DEPLOY_ON_DOCKER: true,
19
- PRODUCTION_BRANCH: "production",
20
- DOCKER_REPOSITORY: "owner",
21
- DOCKER_HUB_ID: "login",
22
- DOCKER_HUB_PWD: "password"
23
- } as unknown as CmContext["config"]);
24
- });
25
- it("should return the snapshot version", () => {
26
- const context = {
27
- nextRelease: { type: "patch" },
28
- lastRelease: {
29
- version: "1.0.0"
30
- }
31
- } as CmContext;
32
-
33
- const version = calculateSnapshotVersion(context);
34
- expect(git.getCommitTag).toHaveBeenCalledWith(context.config.REF_COMMIT);
35
- expect(version).toEqual("1.0.1-beta13246u");
36
- });
37
-
38
- it("should return the snapshot version", () => {
39
- const context = {
40
- nextRelease: { type: "minor" },
41
- lastRelease: {
42
- version: "1.0.0"
43
- },
44
- config: {
45
- REF_COMMIT: "REF_COMMIT"
46
- }
47
- } as CmContext;
48
-
49
- const version = calculateSnapshotVersion(context);
50
- expect(git.getCommitTag).toHaveBeenCalledWith(context.config.REF_COMMIT);
51
- expect(version).toEqual("1.1.0-beta13246u");
52
- });
53
-
54
- it("should return the snapshot version", () => {
55
- const context = {
56
- nextRelease: { type: "major" },
57
- lastRelease: {
58
- version: "1.0.0"
59
- },
60
- config: {
61
- REF_COMMIT: "REF_COMMIT"
62
- }
63
- } as CmContext;
64
-
65
- const version = calculateSnapshotVersion(context);
66
- expect(git.getCommitTag).toHaveBeenCalledWith(context.config.REF_COMMIT);
67
- expect(version).toEqual("2.0.0-beta13246u");
68
- });
69
- });
@@ -1,17 +0,0 @@
1
- import semver from "semver";
2
-
3
- import { getConfig, git } from "../../common/index.js";
4
- import type { SemanticContext } from "../../common/types.js";
5
-
6
- export function calculateSnapshotVersion(context: SemanticContext) {
7
- context.config = getConfig();
8
- const {
9
- nextRelease,
10
- lastRelease,
11
- config: { REF_COMMIT }
12
- } = context;
13
- const parsed = semver.parse(lastRelease?.version ?? "0.0.0");
14
- const { major, minor, patch } = parsed ?? { major: 0, minor: 0, patch: 0 };
15
-
16
- return `${semver.inc(`${major}.${minor}.${patch}`, nextRelease?.type ?? "patch") ?? "0.0.0"}-beta${git.getCommitTag(REF_COMMIT as string)}`;
17
- }
@@ -1,12 +0,0 @@
1
- import { logSection } from "./log-section.js";
2
- import type { SemanticContext } from "../../common/types.js";
3
-
4
- export function displayPackageInfo(context: SemanticContext) {
5
- logSection("Package Info", context);
6
- context.logger.info("Name : " + context.config.PROJECT_NAME);
7
- context.logger.info("Version : " + context.lastRelease?.version);
8
- context.logger.info("Repository : " + context.config.REPOSITORY_URL);
9
- context.logger.info("Branch : " + context.branch.name);
10
- context.logger.info("Tag : " + context.lastRelease?.gitTag);
11
- context.logger.info("GitHead : " + context.lastRelease?.gitHead);
12
- }
@@ -1,13 +0,0 @@
1
- import { logSection } from "./log-section.js";
2
- import type { SemanticContext } from "../../common/types.js";
3
-
4
- export function displayReleaseInfo(context: SemanticContext) {
5
- logSection("Release Info", context);
6
- context.logger.info("Branch : " + context.branch.name);
7
- context.logger.info("Build N° : " + context.config.BUILD_NUMBER);
8
- context.logger.info("Version : " + context.nextRelease?.version);
9
- context.logger.info("Tag : " + context.nextRelease?.gitTag);
10
- context.logger.info("GitHead : " + context.nextRelease?.gitHead);
11
- context.logger.info("Type : " + context.nextRelease?.type);
12
- context.logger.info("Channel : " + context.nextRelease?.channel);
13
- }
@@ -1,62 +0,0 @@
1
- // @ts-nocheck
2
- vi.mock("../../common", () => {
3
- return {
4
- docker: {
5
- getToken: vi.fn(),
6
- getTags: vi.fn(),
7
- deleteTag: vi.fn()
8
- }
9
- };
10
- });
11
- const { docker } = await import("../../common/index.js");
12
- const { dockerCleanTags } = await import("./docker-clean-tags.js");
13
-
14
- describe("dockerCleanTags", () => {
15
- beforeEach(() => {
16
- docker.getToken.mockReturnValue("token");
17
- docker.getTags.mockReturnValue([
18
- {
19
- name: "branch-1",
20
- last_updated: new Date("2020-06-01")
21
- },
22
- {
23
- name: "1.1.0",
24
- last_updated: new Date("2020-05-20")
25
- },
26
- {
27
- name: "branch-2",
28
- last_updated: new Date("2020-05-01")
29
- },
30
- {
31
- name: "1.0.0",
32
- last_updated: new Date("2020-04-01")
33
- }
34
- ]);
35
- });
36
- it("should clean obsolete tags", async () => {
37
- const context = {
38
- logger: {
39
- info: vi.fn(),
40
- warn: vi.fn()
41
- },
42
- config: {
43
- DOCKER_HUB_ID: "DOCKER_HUB_ID",
44
- DOCKER_HUB_PWD: "DOCKER_HUB_PWD",
45
- DOCKER_REPOSITORY: "DOCKER_REPOSITORY"
46
- }
47
- };
48
-
49
- await dockerCleanTags(context);
50
-
51
- expect(docker.getToken).toHaveBeenCalledWith("DOCKER_HUB_ID", "DOCKER_HUB_PWD");
52
- expect(docker.getTags).toHaveBeenCalledWith({
53
- token: "token",
54
- repository: "DOCKER_REPOSITORY"
55
- });
56
- expect(docker.deleteTag).toHaveBeenCalledWith("branch-2", {
57
- token: "token",
58
- repository: "DOCKER_REPOSITORY"
59
- });
60
- expect(docker.deleteTag).toHaveBeenCalledTimes(1);
61
- });
62
- });
@@ -1,58 +0,0 @@
1
- import { docker } from "../../common/index.js";
2
- import type { CmContext } from "../../common/types";
3
-
4
- interface DockerTag {
5
- name: string;
6
- last_updated: string | Date;
7
- date?: number;
8
- }
9
-
10
- function mapTags(tags: DockerTag[]) {
11
- const mapped = tags
12
- .map((tag) => {
13
- return {
14
- name: tag.name,
15
- date: new Date(tag.last_updated).getTime()
16
- };
17
- })
18
- .sort((a, b) => b.date - a.date);
19
-
20
- let tagFound = false;
21
-
22
- return mapped.reduce((result: typeof mapped, tag) => {
23
- if (tag.name.match(/\d+\.\d+\.\d+/)) {
24
- tagFound = true;
25
- } else if (tagFound) {
26
- result.push(tag);
27
- }
28
- return result;
29
- }, []);
30
- }
31
-
32
- export async function dockerCleanTags(context: CmContext) {
33
- const {
34
- logger,
35
- config: { DOCKER_HUB_ID, DOCKER_HUB_PWD, DOCKER_REPOSITORY }
36
- } = context;
37
-
38
- if (DOCKER_HUB_ID && DOCKER_HUB_PWD) {
39
- logger.info("Start clean Docker Hub...");
40
-
41
- const token = await docker.getToken(DOCKER_HUB_ID, DOCKER_HUB_PWD);
42
- const options = {
43
- token,
44
- repository: DOCKER_REPOSITORY
45
- };
46
-
47
- const tags = mapTags(await docker.getTags(options));
48
-
49
- await Promise.all(
50
- tags.map(async (tag) => {
51
- await docker.deleteTag(tag.name, options);
52
- logger.info(`TAG : ${tag.name} deleted`);
53
- })
54
- );
55
-
56
- logger.info("Docker Hub Clean !");
57
- }
58
- }