@cmflow/cli 3.3.0 → 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 (165) hide show
  1. package/README.md +102 -298
  2. package/dist/bin/cm.mjs +83622 -0
  3. package/dist/bin/cmrelease.mjs +75079 -0
  4. package/dist/cli-truncate-Bi2MjGwF.mjs +323 -0
  5. package/dist/cli-truncate-DMcpM5Q7.mjs +2 -0
  6. package/dist/cli-truncate-DMcpM5Q7.mjs.map +1 -0
  7. package/dist/cli-truncate-DsW0mgI_.mjs +323 -0
  8. package/dist/common-BdfXquG0.mjs +61 -0
  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 +2 -0
  23. package/dist/get-east-asian-width-Tfn8qoqd.mjs.map +1 -0
  24. package/dist/get-east-asian-width-wiVWCFXf.mjs +682 -0
  25. package/dist/log-update-CLbF3iV6.mjs +6 -0
  26. package/dist/log-update-CLbF3iV6.mjs.map +1 -0
  27. package/dist/log-update-CTXRtajW.mjs +668 -0
  28. package/dist/log-update-Dy1vPMGY.mjs +668 -0
  29. package/dist/npm-VM_GgazT.mjs +2 -0
  30. package/dist/npm-VM_GgazT.mjs.map +1 -0
  31. package/dist/rolldown-runtime-B4iAMlE-.mjs +35 -0
  32. package/dist/semver-DFjVbN1S.mjs +2 -0
  33. package/dist/semver-DFjVbN1S.mjs.map +1 -0
  34. package/dist/source-CwLcYLzI.mjs +7 -0
  35. package/dist/source-CwLcYLzI.mjs.map +1 -0
  36. package/dist/wrap-ansi-9ugahFCy.mjs +9 -0
  37. package/dist/wrap-ansi-9ugahFCy.mjs.map +1 -0
  38. package/dist/wrap-ansi-BRr0GA6g.mjs +330 -0
  39. package/dist/wrap-ansi-Cupoo4Yg.mjs +330 -0
  40. package/dist/wrap-ansi-dwgEjNWf.mjs +2 -0
  41. package/dist/write-package-cxki9d3K.mjs +8 -0
  42. package/dist/write-package-cxki9d3K.mjs.map +1 -0
  43. package/dist/write-packages-CxCAl_AG.mjs +10 -0
  44. package/dist/write-packages-CxCAl_AG.mjs.map +1 -0
  45. package/package.json +40 -63
  46. package/tsdown.config.ts +54 -0
  47. package/.oxfmtrc.json +0 -11
  48. package/.yarn/install-state.gz +0 -0
  49. package/.yarn/releases/yarn-4.7.0.cjs +0 -935
  50. package/.yarnrc.yml +0 -3
  51. package/bin/checkfeatures.js +0 -13
  52. package/bin/cm-clean.js +0 -8
  53. package/bin/cm-config.js +0 -15
  54. package/bin/cm-deploy.js +0 -8
  55. package/bin/cm-expedit.js +0 -19
  56. package/bin/cm-fetch.js +0 -12
  57. package/bin/cm-finish.js +0 -14
  58. package/bin/cm-jira-releases.js +0 -16
  59. package/bin/cm-merge.js +0 -12
  60. package/bin/cm-publish.js +0 -15
  61. package/bin/cm-push.js +0 -15
  62. package/bin/cm-rebase.js +0 -15
  63. package/bin/cm-republish.js +0 -12
  64. package/bin/cm-start.js +0 -21
  65. package/bin/cm.js +0 -27
  66. package/bin/cmpull.js +0 -22
  67. package/bin/cmrelease.js +0 -5
  68. package/mise.toml +0 -2
  69. package/oxlint.json +0 -25
  70. package/release.config.mjs +0 -39
  71. package/src/commands/checkfeatures.js +0 -20
  72. package/src/commands/clean.js +0 -29
  73. package/src/commands/config.js +0 -23
  74. package/src/commands/deploy.js +0 -34
  75. package/src/commands/fetch.js +0 -18
  76. package/src/commands/finish.js +0 -43
  77. package/src/commands/index.js +0 -12
  78. package/src/commands/jira-releases.js +0 -62
  79. package/src/commands/merge.js +0 -41
  80. package/src/commands/prompts/branches.js +0 -38
  81. package/src/commands/pull.js +0 -30
  82. package/src/commands/push.js +0 -23
  83. package/src/commands/rebase.js +0 -35
  84. package/src/commands/release.js +0 -21
  85. package/src/commands/republish.js +0 -21
  86. package/src/commands/start.js +0 -109
  87. package/src/commands/tasks/merge-branch.js +0 -65
  88. package/src/commands/tasks/push-branch.js +0 -10
  89. package/src/commands/tasks/rebase-all-branches.js +0 -29
  90. package/src/commands/tasks/refresh-repository.js +0 -34
  91. package/src/commands/tasks/run-test.js +0 -21
  92. package/src/commands/tasks/update-branch.js +0 -43
  93. package/src/commands/tasks/update-dependencies.js +0 -42
  94. package/src/commands/utils/check-install.js +0 -31
  95. package/src/common/back/directus/directus-flow.js +0 -40
  96. package/src/common/back/directus/directus-flow.test.js +0 -62
  97. package/src/common/back/http/http-proxy.js +0 -15
  98. package/src/common/back/http/http-request.js +0 -77
  99. package/src/common/back/http/http-request.spec.js +0 -49
  100. package/src/common/back/jira/get-sorted-releases.js +0 -40
  101. package/src/common/back/jira/interfaces/JiraIIssue.d.ts +0 -100
  102. package/src/common/back/jira/jira-releases.js +0 -36
  103. package/src/common/back/jira/jira-request.js +0 -21
  104. package/src/common/back/jira/jira-request.spec.js +0 -59
  105. package/src/common/back/jira/jira-search.js +0 -17
  106. package/src/common/back/jira/jira-search.spec.js +0 -44
  107. package/src/common/cli/bun.js +0 -33
  108. package/src/common/cli/bun.test.js +0 -51
  109. package/src/common/cli/cli.js +0 -110
  110. package/src/common/cli/docker.js +0 -66
  111. package/src/common/cli/docker.test.js +0 -133
  112. package/src/common/cli/git.js +0 -121
  113. package/src/common/cli/git.test.js +0 -207
  114. package/src/common/cli/lerna.js +0 -25
  115. package/src/common/cli/lerna.test.js +0 -51
  116. package/src/common/cli/npm.js +0 -33
  117. package/src/common/cli/npm.test.js +0 -51
  118. package/src/common/cli/pnpm.js +0 -34
  119. package/src/common/cli/pnpm.test.js +0 -51
  120. package/src/common/cli/yarn.js +0 -33
  121. package/src/common/cli/yarn.test.js +0 -53
  122. package/src/common/configure-git-workspace.js +0 -26
  123. package/src/common/get-config.js +0 -157
  124. package/src/common/get-package-json.js +0 -14
  125. package/src/common/get-package-manager.js +0 -12
  126. package/src/common/get-release-config.js +0 -8
  127. package/src/common/index.js +0 -13
  128. package/src/common/run-command.js +0 -64
  129. package/src/common/run-command.test.js +0 -65
  130. package/src/index.js +0 -10
  131. package/src/semantic/core/analyze-commits.js +0 -17
  132. package/src/semantic/core/conditional.js +0 -55
  133. package/src/semantic/core/exit.js +0 -14
  134. package/src/semantic/core/prepare/bump-version.js +0 -38
  135. package/src/semantic/core/prepare/commit.js +0 -29
  136. package/src/semantic/core/prepare/release-info.js +0 -5
  137. package/src/semantic/core/run.js +0 -22
  138. package/src/semantic/core/sync-repository.js +0 -52
  139. package/src/semantic/core/verify-conditions.js +0 -40
  140. package/src/semantic/core/verify-release.js +0 -9
  141. package/src/semantic/define-config.js +0 -42
  142. package/src/semantic/docker/publish.js +0 -5
  143. package/src/semantic/docker/success.js +0 -9
  144. package/src/semantic/utils/__mock__/test1/package.json +0 -7
  145. package/src/semantic/utils/__mock__/test1/packages/a/package.json +0 -9
  146. package/src/semantic/utils/__mock__/test1/packages/b/package.json +0 -7
  147. package/src/semantic/utils/__mock__/test2/package.json +0 -4
  148. package/src/semantic/utils/__mock__/test2/packages/a/package.json +0 -7
  149. package/src/semantic/utils/__mock__/test2/packages/b/package.json +0 -5
  150. package/src/semantic/utils/bump-packages-version.js +0 -52
  151. package/src/semantic/utils/bump-packages-version.test.js +0 -75
  152. package/src/semantic/utils/calculate-snapshot-version.js +0 -15
  153. package/src/semantic/utils/calculate-snapshot-version.test.js +0 -67
  154. package/src/semantic/utils/display-package-info.js +0 -11
  155. package/src/semantic/utils/display-release-info.js +0 -12
  156. package/src/semantic/utils/docker-clean-tags.js +0 -51
  157. package/src/semantic/utils/docker-clean-tags.test.js +0 -61
  158. package/src/semantic/utils/docker-publish.js +0 -23
  159. package/src/semantic/utils/docker-publish.test.js +0 -44
  160. package/src/semantic/utils/log-section.js +0 -5
  161. package/src/semantic/utils/release-rules.js +0 -15
  162. package/src/semantic/utils/transform-writer.js +0 -77
  163. package/src/workflow/index.js +0 -42
  164. package/tsconfig.json +0 -37
  165. package/vitest.config.mts +0 -10
@@ -1,29 +0,0 @@
1
- import { configureGitWorkspace, getConfig, git } from "../../../common/index.js";
2
-
3
- export async function prepare(pluginConfig, context) {
4
- context.config = getConfig();
5
-
6
- const {
7
- logger,
8
- config: { CI_NAME, BUILD_NUMBER }
9
- } = context;
10
-
11
- logger.info("Prepare release");
12
-
13
- configureGitWorkspace(context);
14
-
15
- logger.info("Adding files to commit");
16
- git.add("-A").sync();
17
-
18
- logger.info("Get commit stage status");
19
- git.status();
20
-
21
- const revisionMessage = `chore: ${CI_NAME} build ${context.branch.name} ${BUILD_NUMBER} ${context.nextRelease.gitTag} [ci skip]`;
22
-
23
- logger.info("Commit changes with revision message: ");
24
- logger.info(revisionMessage);
25
-
26
- git.commit("-m", revisionMessage, "--no-verify").sync();
27
-
28
- logger.success("Change committed");
29
- }
@@ -1,5 +0,0 @@
1
- import { writeFile } from "node:fs/promises";
2
-
3
- export function prepare(pluginConfig, context) {
4
- return writeFile(pluginConfig.path, context.branch.name, { encoding: "utf-8" });
5
- }
@@ -1,22 +0,0 @@
1
- import { getConfig, getPackageManager } from "../../common/index.js";
2
-
3
- /**
4
- * @param pluginConfig {{command: string}}
5
- * @param context
6
- * @return {Promise<void>}
7
- */
8
- export default async function runCommand(pluginConfig, context) {
9
- context.config = getConfig();
10
- const {
11
- config: { PACKAGE_MANAGER },
12
- logger
13
- } = context;
14
-
15
- const pkgManager = getPackageManager(PACKAGE_MANAGER);
16
-
17
- logger.info(`Start ${pluginConfig.command} task`);
18
-
19
- await pkgManager.run(pluginConfig.command);
20
-
21
- logger.info(`${pluginConfig.command} task finished with success...`);
22
- }
@@ -1,52 +0,0 @@
1
- import { getConfig, git } from "../../common/index.js";
2
-
3
- export default async function syncRepository(pluginConfig, context) {
4
- context.config = getConfig();
5
-
6
- const {
7
- logger,
8
- config: { PRODUCTION_BRANCH, ORIGIN, DEVELOP_BRANCH }
9
- } = context;
10
-
11
- logger.info("Prepare release");
12
-
13
- async function asyncCatchError(fn) {
14
- try {
15
- return await fn();
16
- } catch (er) {
17
- context.logger.error(String(er), er.stack);
18
- }
19
- }
20
-
21
- await asyncCatchError(() => git.fetch());
22
-
23
- const candidateBranches =
24
- pluginConfig.includes ||
25
- context.options.branches?.map((branch) => {
26
- return branch.name || branch;
27
- });
28
-
29
- logger.info(`Candidate branches to sync: ${candidateBranches.join(", ")}`);
30
-
31
- if (candidateBranches.includes(context.branch.name)) {
32
- logger.info(`Push ${context.branch.name}`);
33
-
34
- await asyncCatchError(() => {
35
- logger.info(`git push --quiet --set-upstream ${ORIGIN} ${context.branch.name}`);
36
-
37
- return git.push("--quiet", "--set-upstream", ORIGIN, context.branch.name);
38
- });
39
- } else {
40
- logger.info(`Skip push for ${context.branch.name}`);
41
- }
42
-
43
- if (PRODUCTION_BRANCH !== DEVELOP_BRANCH) {
44
- logger.info(`Sync ${DEVELOP_BRANCH} with ${PRODUCTION_BRANCH}`);
45
- logger.info(`git push -f ${ORIGIN} ${PRODUCTION_BRANCH}:refs/heads/${DEVELOP_BRANCH}`);
46
-
47
- await asyncCatchError(async () => {
48
- await git.push("-f", ORIGIN, `${PRODUCTION_BRANCH}:refs/heads/${DEVELOP_BRANCH}`);
49
- logger.success(`${ORIGIN}/${DEVELOP_BRANCH} branch correctly updated`);
50
- });
51
- }
52
- }
@@ -1,40 +0,0 @@
1
- import chalk from "chalk";
2
-
3
- import { getConfig, git } from "../../common/index.js";
4
-
5
- export function verifyConditions(pluginConfig, context) {
6
- if (pluginConfig.dryRun) {
7
- return;
8
- }
9
-
10
- context.config = getConfig();
11
- const {
12
- branch,
13
- config: { USER, EMAIL, ORIGIN, GIT_FETCH_MAX_DEPTH }
14
- } = context;
15
-
16
- if (USER && EMAIL) {
17
- context.logger.info("Configure git with username");
18
-
19
- git.config("--global", "user.name", USER);
20
- git.config("--global", "user.email", EMAIL);
21
-
22
- context.logger.info("Configure git branch");
23
- context.logger.success("Workspace is correctly configured");
24
- } else {
25
- context.logger.error(chalk.red("Ignore git configuration (Empty GIT_USER_EMAIL or/and GIT_USER_NAME variables)"));
26
- process.exit(1);
27
- }
28
-
29
- if (GIT_FETCH_MAX_DEPTH !== "false") {
30
- if (GIT_FETCH_MAX_DEPTH) {
31
- git.fetch(`--depth=${GIT_FETCH_MAX_DEPTH}`).sync();
32
- } else {
33
- git.fetch().sync();
34
- }
35
-
36
- git.checkout(branch.name).sync();
37
- }
38
-
39
- git.branch(`--set-upstream-to=${ORIGIN}/${branch.name}`, branch.name).sync();
40
- }
@@ -1,9 +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
-
5
- export function verifyRelease(pluginConfig, context) {
6
- context.config = getConfig();
7
- displayPackageInfo(context);
8
- displayReleaseInfo(context);
9
- }
@@ -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,5 +0,0 @@
1
- import { dockerPublish } from "../utils/docker-publish.js";
2
-
3
- export async function publish(pluginConfig, context) {
4
- await dockerPublish(context);
5
- }
@@ -1,9 +0,0 @@
1
- import { dockerCleanTags } from "../utils/docker-clean-tags.js";
2
-
3
- export async function success(pluginConfig, context) {
4
- try {
5
- await dockerCleanTags(context);
6
- } catch (er) {
7
- context.logger.warn(er);
8
- }
9
- }
@@ -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,52 +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, workspaces, 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();
16
-
17
- const packages = await Promise.all(
18
- files.map(async (file) => {
19
- const pkg = await fs.readJson(file);
20
-
21
- names.add(pkg.name);
22
-
23
- return {
24
- file,
25
- pkg
26
- };
27
- })
28
- );
29
-
30
- return Promise.all(
31
- packages.map(({ pkg, file }) => {
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, key, version, names) {
43
- pkg[key] = pkg[key] || {};
44
-
45
- if (pkg[key]) {
46
- names.forEach((name) => {
47
- if (pkg[key][name] && !pkg[key][name].startsWith("workspace:")) {
48
- pkg[key][name] = version;
49
- }
50
- });
51
- }
52
- }
@@ -1,75 +0,0 @@
1
- import fs from "fs-extra";
2
- import path from "path";
3
- import * as url from "url";
4
-
5
- import { bumpPackagesVersion } from "./bump-packages-version.js";
6
-
7
- const __dirname = url.fileURLToPath(new URL(".", import.meta.url));
8
-
9
- describe("bumpPackagesVersion()", () => {
10
- beforeEach(() => {
11
- vi.resetAllMocks();
12
- vi.spyOn(fs, "writeFile").mockResolvedValue();
13
- vi.spyOn(fs, "ensureDirSync").mockResolvedValue();
14
- });
15
-
16
- it("should upgrade dependencies (package manager: npm/yarn)", async () => {
17
- await bumpPackagesVersion("1.1.0", ["packages/*"], path.join(__dirname, "__mock__/test1"));
18
-
19
- const calls = fs.writeFile.mock.calls.sort(([a], [b]) => (a > b ? -1 : 1));
20
-
21
- expect(JSON.parse(calls[0][1])).toEqual({
22
- version: "1.1.0",
23
- name: "@package/b",
24
- dependencies: {},
25
- devDependencies: {},
26
- peerDependencies: {}
27
- });
28
-
29
- expect(JSON.parse(calls[1][1])).toEqual({
30
- name: "@package/a",
31
- version: "1.1.0",
32
- dependencies: { "@package/b": "1.1.0" },
33
- devDependencies: {},
34
- peerDependencies: {}
35
- });
36
-
37
- expect(JSON.parse(calls[2][1])).toEqual({
38
- name: "@package/root",
39
- version: "1.1.0",
40
- dependencies: {},
41
- devDependencies: {},
42
- peerDependencies: {}
43
- });
44
- });
45
- it("should upgrade dependencies (package manager: yarn berry)", async () => {
46
- await bumpPackagesVersion("1.1.0", ["packages/*"], path.join(__dirname, "__mock__/test2"));
47
- const calls = fs.writeFile.mock.calls.sort(([a], [b]) => (a > b ? -1 : 1));
48
-
49
- expect(JSON.parse(calls[0][1])).toEqual({
50
- dependencies: {},
51
- devDependencies: {},
52
- name: "@package/b",
53
- peerDependencies: {},
54
- version: "1.1.0"
55
- });
56
-
57
- expect(JSON.parse(calls[1][1])).toEqual({
58
- dependencies: {
59
- "@package/b": "workspace:*"
60
- },
61
- devDependencies: {},
62
- name: "@package/a",
63
- peerDependencies: {},
64
- version: "1.1.0"
65
- });
66
-
67
- expect(JSON.parse(calls[2][1])).toEqual({
68
- dependencies: {},
69
- devDependencies: {},
70
- name: "@package/root",
71
- peerDependencies: {},
72
- version: "1.1.0"
73
- });
74
- });
75
- });
@@ -1,15 +0,0 @@
1
- import semver from "semver";
2
-
3
- import { getConfig, git } from "../../common/index.js";
4
-
5
- export function calculateSnapshotVersion(context) {
6
- context.config = getConfig();
7
- const {
8
- nextRelease: { type },
9
- lastRelease,
10
- config: { REF_COMMIT }
11
- } = context;
12
- const { major, minor, patch } = semver.parse(lastRelease.version);
13
-
14
- return `${semver.inc(`${major}.${minor}.${patch}`, type)}-beta${git.getCommitTag(REF_COMMIT)}`;
15
- }
@@ -1,67 +0,0 @@
1
- vi.mock("../../common/index.js", () => {
2
- return {
3
- git: {
4
- getCommitTag: vi.fn()
5
- },
6
- getConfig: vi.fn()
7
- };
8
- });
9
- const { git, getConfig } = await import("../../common/index.js");
10
- const { calculateSnapshotVersion } = await import("./calculate-snapshot-version.js");
11
-
12
- describe("calculateSnapshotVersion", () => {
13
- beforeEach(() => {
14
- git.getCommitTag.mockReturnValue("13246u");
15
- getConfig.mockReturnValue({
16
- DEPLOY_ON_DOCKER: true,
17
- PRODUCTION_BRANCH: "production",
18
- DOCKER_REPOSITORY: "owner",
19
- DOCKER_HUB_ID: "login",
20
- DOCKER_HUB_PWD: "password"
21
- });
22
- });
23
- it("should return the snapshot version", () => {
24
- const context = {
25
- nextRelease: { type: "patch" },
26
- lastRelease: {
27
- version: "1.0.0"
28
- }
29
- };
30
-
31
- const version = calculateSnapshotVersion(context);
32
- expect(git.getCommitTag).toHaveBeenCalledWith(context.config.REF_COMMIT);
33
- expect(version).toEqual("1.0.1-beta13246u");
34
- });
35
-
36
- it("should return the snapshot version", () => {
37
- const context = {
38
- nextRelease: { type: "minor" },
39
- lastRelease: {
40
- version: "1.0.0"
41
- },
42
- config: {
43
- REF_COMMIT: "REF_COMMIT"
44
- }
45
- };
46
-
47
- const version = calculateSnapshotVersion(context);
48
- expect(git.getCommitTag).toHaveBeenCalledWith(context.config.REF_COMMIT);
49
- expect(version).toEqual("1.1.0-beta13246u");
50
- });
51
-
52
- it("should return the snapshot version", () => {
53
- const context = {
54
- nextRelease: { type: "major" },
55
- lastRelease: {
56
- version: "1.0.0"
57
- },
58
- config: {
59
- REF_COMMIT: "REF_COMMIT"
60
- }
61
- };
62
-
63
- const version = calculateSnapshotVersion(context);
64
- expect(git.getCommitTag).toHaveBeenCalledWith(context.config.REF_COMMIT);
65
- expect(version).toEqual("2.0.0-beta13246u");
66
- });
67
- });
@@ -1,11 +0,0 @@
1
- import { logSection } from "./log-section.js";
2
-
3
- export function displayPackageInfo(context) {
4
- logSection("Package Info", context);
5
- context.logger.info("Name : " + context.config.PROJECT_NAME);
6
- context.logger.info("Version : " + context.lastRelease.version);
7
- context.logger.info("Repository : " + context.config.REPOSITORY_URL);
8
- context.logger.info("Branch : " + context.branch.name);
9
- context.logger.info("Tag : " + context.lastRelease.gitTag);
10
- context.logger.info("GitHead : " + context.lastRelease.gitHead);
11
- }
@@ -1,12 +0,0 @@
1
- import { logSection } from "./log-section.js";
2
-
3
- export function displayReleaseInfo(context) {
4
- logSection("Release Info", context);
5
- context.logger.info("Branch : " + context.branch.name);
6
- context.logger.info("Build N° : " + context.config.BUILD_NUMBER);
7
- context.logger.info("Version : " + context.nextRelease.version);
8
- context.logger.info("Tag : " + context.nextRelease.gitTag);
9
- context.logger.info("GitHead : " + context.nextRelease.gitHead);
10
- context.logger.info("Type : " + context.nextRelease.type);
11
- context.logger.info("Channel : " + context.nextRelease.channel);
12
- }
@@ -1,51 +0,0 @@
1
- import { docker } from "../../common/index.js";
2
-
3
- function mapTags(tags) {
4
- tags = tags
5
- .map((tag) => {
6
- return {
7
- name: tag.name,
8
- date: new Date(tag.last_updated).getTime()
9
- };
10
- })
11
- .sort((a, b) => b.date - a.date);
12
-
13
- let tagFound = false;
14
-
15
- return tags.reduce((result, tag) => {
16
- if (tag.name.match(/\d+\.\d+\.\d+/)) {
17
- tagFound = true;
18
- } else if (tagFound) {
19
- result.push(tag);
20
- }
21
- return result;
22
- }, []);
23
- }
24
-
25
- export async function dockerCleanTags(context) {
26
- const {
27
- logger,
28
- config: { DOCKER_HUB_ID, DOCKER_HUB_PWD, DOCKER_REPOSITORY }
29
- } = context;
30
-
31
- if (DOCKER_HUB_ID && DOCKER_HUB_PWD) {
32
- logger.info("Start clean Docker Hub...");
33
-
34
- const token = await docker.getToken(DOCKER_HUB_ID, DOCKER_HUB_PWD);
35
- const options = {
36
- token,
37
- repository: DOCKER_REPOSITORY
38
- };
39
-
40
- const tags = mapTags(await docker.getTags(options));
41
-
42
- await Promise.all(
43
- tags.map(async (tag) => {
44
- await docker.deleteTag(tag.name, options);
45
- logger.info(`TAG : ${tag.name} deleted`);
46
- })
47
- );
48
-
49
- logger.info("Docker Hub Clean !");
50
- }
51
- }
@@ -1,61 +0,0 @@
1
- vi.mock("../../common", () => {
2
- return {
3
- docker: {
4
- getToken: vi.fn(),
5
- getTags: vi.fn(),
6
- deleteTag: vi.fn()
7
- }
8
- };
9
- });
10
- const { docker } = await import("../../common/index.js");
11
- const { dockerCleanTags } = await import("./docker-clean-tags.js");
12
-
13
- describe("dockerCleanTags", () => {
14
- beforeEach(() => {
15
- docker.getToken.mockReturnValue("token");
16
- docker.getTags.mockReturnValue([
17
- {
18
- name: "branch-1",
19
- last_updated: new Date("2020-06-01")
20
- },
21
- {
22
- name: "1.1.0",
23
- last_updated: new Date("2020-05-20")
24
- },
25
- {
26
- name: "branch-2",
27
- last_updated: new Date("2020-05-01")
28
- },
29
- {
30
- name: "1.0.0",
31
- last_updated: new Date("2020-04-01")
32
- }
33
- ]);
34
- });
35
- it("should clean obsolete tags", async () => {
36
- const context = {
37
- logger: {
38
- info: vi.fn(),
39
- warn: vi.fn()
40
- },
41
- config: {
42
- DOCKER_HUB_ID: "DOCKER_HUB_ID",
43
- DOCKER_HUB_PWD: "DOCKER_HUB_PWD",
44
- DOCKER_REPOSITORY: "DOCKER_REPOSITORY"
45
- }
46
- };
47
-
48
- await dockerCleanTags(context);
49
-
50
- expect(docker.getToken).toHaveBeenCalledWith("DOCKER_HUB_ID", "DOCKER_HUB_PWD");
51
- expect(docker.getTags).toHaveBeenCalledWith({
52
- token: "token",
53
- repository: "DOCKER_REPOSITORY"
54
- });
55
- expect(docker.deleteTag).toHaveBeenCalledWith("branch-2", {
56
- token: "token",
57
- repository: "DOCKER_REPOSITORY"
58
- });
59
- expect(docker.deleteTag).toHaveBeenCalledTimes(1);
60
- });
61
- });
@@ -1,23 +0,0 @@
1
- import { docker } from "../../common/cli/docker.js";
2
- import { getConfig } from "../../common/get-config.js";
3
-
4
- export async function dockerPublish(context) {
5
- context.config = getConfig();
6
- const {
7
- logger,
8
- config: { PRODUCTION_BRANCH, DOCKER_REPOSITORY, DOCKER_HUB_ID, DOCKER_HUB_PWD }
9
- } = context;
10
-
11
- docker.login("-u", DOCKER_HUB_ID, "-p", DOCKER_HUB_PWD);
12
-
13
- const image =
14
- PRODUCTION_BRANCH === context.branch.name
15
- ? `${DOCKER_REPOSITORY}:${context.nextRelease.version}`
16
- : `${DOCKER_REPOSITORY}:${context.branch.name}`;
17
- logger.info("context.branch.name : ", context.branch.name);
18
- logger.info("context.nextRelease.version : ", context.nextRelease && context.nextRelease.version);
19
- logger.info("PRODUCTION_BRANCH : ", PRODUCTION_BRANCH);
20
- docker.tag(`${DOCKER_REPOSITORY}:latest`, image);
21
-
22
- await docker.push(image);
23
- }