submodule-version 2.3.0 → 2.3.2

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.
package/README.md CHANGED
@@ -52,7 +52,9 @@ Submodule version helps to
52
52
  }
53
53
  ```
54
54
  - Each submodule has a [version](#versioning) tags, and `sv` use list of this tags to resolve dependencies
55
+ - The installed version of a submodule is the version tag git `HEAD` points at
55
56
  - `Submodule version` creates a graph of whole project and install only possible and actual versions
57
+ - `sv` never switches a submodule version if it has uncommitted changes or unpushed commits — your local work is always kept intact 🧯
56
58
 
57
59
  ## Versioning
58
60
 
@@ -62,14 +64,55 @@ To add new version in submodule:
62
64
  - Specify version in `package.json`
63
65
  - Add and push git tag with the same version (`git tag 1.0.1`)
64
66
 
67
+ Or use the [`publish`](#programmatic-api) API, which bumps the version, commits, tags and pushes in one call.
68
+
65
69
 
66
70
  ## Commands
67
71
 
68
72
  - `npx sv validate` - Validate all dependencis and install missing modules
69
73
  - `npx sv install <git_url> [target_submodule]` - Install new dependency
70
74
  - `npx sv update` - Update all dependencies to the latest possible versions
75
+ - `npx sv publish [module] [--bump release|minor|major] [-m message] [--repo-url git_url]` - Commit, tag and push a new version of a module (or the project itself when `module` is omitted). `--repo-url` is required for the first publish of a module without a git remote
71
76
  - `npx sv help` - Description of all commands
72
77
 
78
+ ## Programmatic API
79
+
80
+ The `SV` class can be used directly from code:
81
+
82
+ ```ts
83
+ import { SV, versionUtil } from 'submodule-version';
84
+
85
+ const sv = new SV(process.cwd(), 'modules');
86
+ ```
87
+
88
+ ### Switching versions
89
+
90
+ - `sv.setVersion(name, version, constraint?)` - Checkout the submodule to a specific version tag and pin the version constraint in the project `package.json`. By default the constraint is an exact pin of the selected version; pass `^<version>` as `constraint` to keep receiving newer versions on update. If the submodule has local changes that cannot be carried over, the switch is aborted without touching the working tree (`GIT_DIRTY_SWITCH_CONFLICT` error)
91
+ - `sv.getConstraint(name)` - Read the current version constraint of a submodule from the project `package.json`
92
+ - `sv.setConstraint(name, constraint)` - Change the version constraint of a submodule without switching the checked-out version
93
+
94
+ ### Inspecting changes and versions
95
+
96
+ - `sv.hasChanges(module?)` - `true` if the module (or the project itself, when `module` is omitted) has uncommitted changes or unpushed commits
97
+ - `sv.hasUncommittedChanges(module?)` - `true` if the working tree has uncommitted changes
98
+ - `sv.currentVersion(module?)` - The version tag `HEAD` points at, or `null` when there is none
99
+ - `sv.latestVersion(module?)` - The latest known version tag (`0.0.0` when there are no tags)
100
+ - `sv.getRemote(module?)` - The `origin` remote URL, or `null`
101
+ - `sv.isPublished(module?)` - `true` if the module is a git repo with a configured remote
102
+
103
+ ### Publishing
104
+
105
+ - `sv.publish({ module?, repoUrl?, message?, bump })` - Commit, tag and push a new version of a module (or the project itself). Returns the published version.
106
+ - `bump: 'release' | 'minor' | 'major'` - How to bump the latest version (`1.2.3` → `1.2.4`, `1.3.0`, `2.0.0`)
107
+ - For a module without a git remote, pass `repoUrl` — `sv` initializes the repo and sets the remote automatically
108
+ - Publishing is only possible from the latest version (`GIT_NOT_LATEST_VERSION` error otherwise)
109
+ - Submodules are checked out on tags (detached `HEAD`) — `publish` creates a local branch bound to the remote branch before committing, and syncs with the remote (`pull --rebase --autostash`) when it is ahead
110
+ - If the working tree is clean and `HEAD` already has a version tag, `publish` just pushes the branch and the tag without bumping
111
+
112
+ ### Version utilities
113
+
114
+ `versionUtil` is also exported and now includes `versionUtil.bump(version, 'release' | 'minor' | 'major')` alongside `compare`, `pick`, `validate` and `latest`.
115
+
73
116
  ## Submodule dependencies
74
117
 
75
118
  Sumbodules can contains their own dependencies specified in `package.json` as `sv` object.
@@ -13,6 +13,15 @@ const handleGitError = (error) => {
13
13
  if (errorMessage === 'GIT_MODULE_CHECKOUT_FAILED') {
14
14
  log_1.log.error('Checkout failded');
15
15
  }
16
+ if (errorMessage === 'GIT_REPO_URL_REQUIRED') {
17
+ log_1.log.error('Module is not published yet - pass --repo-url for the first publish');
18
+ }
19
+ if (errorMessage === 'GIT_NOT_LATEST_VERSION') {
20
+ log_1.log.error('Publish is only possible from the latest version');
21
+ }
22
+ if (errorMessage === 'GIT_SYNC_CONFLICT') {
23
+ log_1.log.error('Sync with remote failed - resolve conflicts manually');
24
+ }
16
25
  };
17
26
  exports.handleGitError = handleGitError;
18
27
  //# sourceMappingURL=handleGitError.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"handleGitError.js","sourceRoot":"","sources":["../../../runner/handleErrors/handleGitError.ts"],"names":[],"mappings":";;;AAAA,uCAAyC;AACzC,gCAA6B;AAEtB,MAAM,cAAc,GAAG,CAAC,KAAY,EAAE,EAAE;IAC7C,IAAI,CAAC,CAAC,KAAK,YAAY,cAAQ,CAAC;QAAE,OAAO;IAEzC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAExC,IAAI,YAAY,KAAK,gBAAgB,EAAE,CAAC;QACtC,SAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,YAAY,KAAK,4BAA4B,EAAE,CAAC;QAClD,SAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAChC,CAAC;AACH,CAAC,CAAC;AAZW,QAAA,cAAc,kBAYzB"}
1
+ {"version":3,"file":"handleGitError.js","sourceRoot":"","sources":["../../../runner/handleErrors/handleGitError.ts"],"names":[],"mappings":";;;AAAA,uCAAyC;AACzC,gCAA6B;AAEtB,MAAM,cAAc,GAAG,CAAC,KAAY,EAAE,EAAE;IAC7C,IAAI,CAAC,CAAC,KAAK,YAAY,cAAQ,CAAC;QAAE,OAAO;IAEzC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAExC,IAAI,YAAY,KAAK,gBAAgB,EAAE,CAAC;QACtC,SAAG,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,YAAY,KAAK,4BAA4B,EAAE,CAAC;QAClD,SAAG,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,YAAY,KAAK,uBAAuB,EAAE,CAAC;QAC7C,SAAG,CAAC,KAAK,CAAC,qEAAqE,CAAC,CAAC;IACnF,CAAC;IAED,IAAI,YAAY,KAAK,wBAAwB,EAAE,CAAC;QAC9C,SAAG,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,YAAY,KAAK,mBAAmB,EAAE,CAAC;QACzC,SAAG,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;IACpE,CAAC;AACH,CAAC,CAAC;AAxBW,QAAA,cAAc,kBAwBzB"}
@@ -33,6 +33,11 @@ const remove = makeEvent(async (sv, arg) => {
33
33
  const { name } = arg;
34
34
  await sv.remove(name);
35
35
  });
36
+ const publish = makeEvent(async (sv, arg) => {
37
+ const { module, bump, message, repoUrl } = arg;
38
+ const version = await sv.publish({ module, bump, message, repoUrl });
39
+ log_1.log.message(chalk_1.default.green.bold('Published'), chalk_1.default.bgGreen.black(` ${module || 'project'} `), chalk_1.default.green.bold('version'), chalk_1.default.bgGreen.black(` ${version} `));
40
+ });
36
41
  const validate = makeEvent(async (sv) => {
37
42
  const result = await sv.buildGraph();
38
43
  Object.entries(result).forEach(([name, entry]) => {
@@ -58,6 +63,22 @@ exports.s = yargs_1.default.scriptName('sv')
58
63
  type: 'string',
59
64
  describe: 'Submodule name',
60
65
  }), remove)
66
+ .command(['publish [module]', 'p'], 'Commit, tag and push a new version', y => y.positional('module', {
67
+ type: 'string',
68
+ describe: 'Module name (project itself when omitted)',
69
+ }).option('bump', {
70
+ type: 'string',
71
+ describe: 'Version bump kind',
72
+ choices: ['release', 'minor', 'major'],
73
+ default: 'release',
74
+ }).option('message', {
75
+ type: 'string',
76
+ alias: 'm',
77
+ describe: 'Commit message',
78
+ }).option('repo-url', {
79
+ type: 'string',
80
+ describe: 'Git repo url (required for the first publish)',
81
+ }), publish)
61
82
  .help()
62
83
  .argv;
63
84
  //# sourceMappingURL=runner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../runner/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../runner/runner.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,kDAA0B;AAC1B,gCAA4B;AAC5B,+BAA4B;AAC5B,iDAA8C;AAE9C,MAAM,QAAQ,GAAG,SAAS,CAAC;AAE3B,MAAM,SAAS,GAAG,CAAC,KAA0C,EAAE,EAAE;IAC/D,MAAM,EAAE,GAAG,IAAI,QAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IAE3C,OAAO,KAAK,EAAE,GAAQ,EAAE,EAAE;QACxB,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,GAAoB,CAAC;QAE7C,IAAI,CAAC;YACH,MAAM,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAA,2BAAY,EAAC,CAAU,EAAE,MAAM,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE;IAC1C,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAqC,CAAC;IACtE,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;IAClC,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE;IACzC,MAAM,EAAE,IAAI,EAAE,GAAG,GAAqB,CAAC;IACvC,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE;IAC1C,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,GAK1C,CAAC;IAEF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAErE,SAAG,CAAC,OAAO,CACT,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAC7B,eAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,IAAI,SAAS,GAAG,CAAC,EAC/C,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAC3B,eAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,GAAG,CAAC,CACpC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;IACpC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,UAAU,EAAE,CAAC;IAErC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;QAC/C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvE,SAAG,CAAC,OAAO,CACT,eAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAChC,eAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,CAAC,EACjC,eAAK,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAClD,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,SAAG,CAAC,OAAO,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;AAC/D,CAAC,CAAC,CAAC;AAEH,oEAAoE;AACvD,QAAA,CAAC,GAAG,eAAK,CAAC,UAAU,CAAC,IAAI,CAAC;KACpC,KAAK,CAAC,iBAAiB,CAAC;KACxB,OAAO,CACN,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,EACvB,8BAA8B,EAC9B,GAAG,EAAE,GAAE,CAAC,EACR,QAAQ,CACT;KACA,OAAO,CACN,CAAC,QAAQ,EAAE,GAAG,CAAC,EACf,uCAAuC,EACvC,GAAG,EAAE,GAAE,CAAC,EACR,MAAM,CACP;KACA,OAAO,CACN,CAAC,wBAAwB,EAAE,GAAG,CAAC,EAC/B,uBAAuB,EACvB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE;IACvB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,mBAAmB;CAC9B,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE;IACtB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,oBAAoB;CAC/B,CAAC,EACF,OAAO,CACR;KACA,OAAO,CACN,CAAC,eAAe,EAAE,GAAG,CAAC,EACtB,0BAA0B,EAC1B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE;IACxB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,gBAAgB;CAC3B,CAAC,EACF,MAAM,CACP;KACA,OAAO,CACN,CAAC,kBAAkB,EAAE,GAAG,CAAC,EACzB,oCAAoC,EACpC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE;IAC1B,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,2CAA2C;CACtD,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE;IAChB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,mBAAmB;IAC7B,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAU;IAC/C,OAAO,EAAE,SAAkB;CAC5B,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE;IACnB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,gBAAgB;CAC3B,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE;IACpB,IAAI,EAAE,QAAQ;IACd,QAAQ,EAAE,+CAA+C;CAC1D,CAAC,EACF,OAAO,CACR;KACA,IAAI,EAAE;KACN,IAAI,CAAC"}
@@ -37,6 +37,11 @@ describe('Compare', () => {
37
37
  expect(versionUtil_1.versionUtil.compare([1, 3, 3], [1, 2, 4], 0)).toBe(false);
38
38
  expect(versionUtil_1.versionUtil.compare([1, 2, 3], [1, 2, 4], 1)).toBe(true);
39
39
  expect(versionUtil_1.versionUtil.compare([1, 2, 4], [1, 2, 3], 1)).toBe(false);
40
+ // Higher minor allows lower patch: 0.3.0 fits ^0.2.6
41
+ expect(versionUtil_1.versionUtil.compare([0, 2, 6], [0, 3, 0], 0)).toBe(true);
42
+ expect(versionUtil_1.versionUtil.compare([0, 2, 6], [0, 2, 5], 0)).toBe(false);
43
+ expect(versionUtil_1.versionUtil.compare([0, 2, 6], [0, 2, 6], 0)).toBe(true);
44
+ expect(versionUtil_1.versionUtil.compare([0, 2, 6], [1, 3, 0], 0)).toBe(false);
40
45
  });
41
46
  it('Minor mode', () => {
42
47
  expect(versionUtil_1.versionUtil.compare([1, 2, 3], [1, 2, 4], 1)).toBe(true);
@@ -48,6 +53,16 @@ describe('Compare', () => {
48
53
  expect(versionUtil_1.versionUtil.compare([1, 2, 3], [1, 2, 4], 2)).toBe(false);
49
54
  });
50
55
  });
56
+ describe('Pick', () => {
57
+ it('Caret range includes higher minors', () => {
58
+ const versions = ['0.2.5', '0.2.6', '0.2.8', '0.3.0', '1.0.0'];
59
+ expect(versionUtil_1.versionUtil.pick(versions, '^0.2.6')).toEqual(['0.2.6', '0.2.8', '0.3.0']);
60
+ });
61
+ it('Tilde range keeps minor pinned', () => {
62
+ const versions = ['1.2.3', '1.2.10', '1.3.0'];
63
+ expect(versionUtil_1.versionUtil.pick(versions, '~1.2.3')).toEqual(['1.2.3', '1.2.10']);
64
+ });
65
+ });
51
66
  describe('Bump', () => {
52
67
  it('Release', () => {
53
68
  expect(versionUtil_1.versionUtil.bump('0.0.0', 'release')).toBe('0.0.1');
@@ -1 +1 @@
1
- {"version":3,"file":"versionUtil.test.js","sourceRoot":"","sources":["../../../src/__tests__/versionUtil.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"versionUtil.test.js","sourceRoot":"","sources":["../../../src/__tests__/versionUtil.test.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@ declare enum ComapreMode {
4
4
  path = 2
5
5
  }
6
6
  export declare const versionUtil: {
7
- compare: (baseVer: number[], actualVer: number[], compareMode: ComapreMode) => any;
7
+ compare: (baseVer: number[], actualVer: number[], compareMode: ComapreMode) => boolean;
8
8
  pick: (allVersions: string[], v: string) => string[];
9
9
  validate: (v: string, relative?: boolean) => boolean;
10
10
  latest: (versions: string[]) => string;
@@ -20,16 +20,18 @@ const mode = (v) => {
20
20
  return ComapreMode.path;
21
21
  };
22
22
  const compare = (baseVer, actualVer, compareMode) => {
23
- const val = new Array(3).fill(null).reduce((acc, _, i) => {
24
- // Alrady is not compatible
25
- if (!acc)
26
- return acc;
27
- // Mode not include comparation, version should be same or hier
28
- if (i > compareMode)
29
- return actualVer[i] >= baseVer[i];
30
- return baseVer[i] === actualVer[i];
31
- }, true);
32
- return val;
23
+ // Components pinned by the mode must match exactly
24
+ for (let i = 0; i <= compareMode; i++) {
25
+ if (baseVer[i] !== actualVer[i])
26
+ return false;
27
+ }
28
+ // The rest must be same or higher, compared from most significant:
29
+ // a higher minor allows any patch (0.3.0 fits ^0.2.6)
30
+ for (let i = compareMode + 1; i < 3; i++) {
31
+ if (actualVer[i] !== baseVer[i])
32
+ return actualVer[i] > baseVer[i];
33
+ }
34
+ return true;
33
35
  };
34
36
  const pick = (allVersions, v) => {
35
37
  if (v === '*')
@@ -1 +1 @@
1
- {"version":3,"file":"versionUtil.js","sourceRoot":"","sources":["../../src/versionUtil.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"versionUtil.js","sourceRoot":"","sources":["../../src/versionUtil.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "submodule-version",
3
3
  "description": "Git <S>ubmodule <V>ersioning tool",
4
- "version": "2.3.0",
4
+ "version": "2.3.2",
5
5
  "repository": "github:guljeny/submodule-version",
6
6
  "main": "dist/src/index.js",
7
7
  "bin": {
@@ -13,4 +13,16 @@ export const handleGitError = (error: Error) => {
13
13
  if (errorMessage === 'GIT_MODULE_CHECKOUT_FAILED') {
14
14
  log.error('Checkout failded');
15
15
  }
16
+
17
+ if (errorMessage === 'GIT_REPO_URL_REQUIRED') {
18
+ log.error('Module is not published yet - pass --repo-url for the first publish');
19
+ }
20
+
21
+ if (errorMessage === 'GIT_NOT_LATEST_VERSION') {
22
+ log.error('Publish is only possible from the latest version');
23
+ }
24
+
25
+ if (errorMessage === 'GIT_SYNC_CONFLICT') {
26
+ log.error('Sync with remote failed - resolve conflicts manually');
27
+ }
16
28
  };
package/runner/runner.ts CHANGED
@@ -34,6 +34,24 @@ const remove = makeEvent(async (sv, arg) => {
34
34
  await sv.remove(name);
35
35
  });
36
36
 
37
+ const publish = makeEvent(async (sv, arg) => {
38
+ const { module, bump, message, repoUrl } = arg as {
39
+ module?: string,
40
+ bump: 'release' | 'minor' | 'major',
41
+ message?: string,
42
+ repoUrl?: string,
43
+ };
44
+
45
+ const version = await sv.publish({ module, bump, message, repoUrl });
46
+
47
+ log.message(
48
+ chalk.green.bold('Published'),
49
+ chalk.bgGreen.black(` ${module || 'project'} `),
50
+ chalk.green.bold('version'),
51
+ chalk.bgGreen.black(` ${version} `),
52
+ );
53
+ });
54
+
37
55
  const validate = makeEvent(async sv => {
38
56
  const result = await sv.buildGraph();
39
57
 
@@ -86,5 +104,26 @@ export const s = yargs.scriptName('sv')
86
104
  }),
87
105
  remove,
88
106
  )
107
+ .command(
108
+ ['publish [module]', 'p'],
109
+ 'Commit, tag and push a new version',
110
+ y => y.positional('module', {
111
+ type: 'string',
112
+ describe: 'Module name (project itself when omitted)',
113
+ }).option('bump', {
114
+ type: 'string',
115
+ describe: 'Version bump kind',
116
+ choices: ['release', 'minor', 'major'] as const,
117
+ default: 'release' as const,
118
+ }).option('message', {
119
+ type: 'string',
120
+ alias: 'm',
121
+ describe: 'Commit message',
122
+ }).option('repo-url', {
123
+ type: 'string',
124
+ describe: 'Git repo url (required for the first publish)',
125
+ }),
126
+ publish,
127
+ )
89
128
  .help()
90
129
  .argv;
@@ -45,6 +45,11 @@ describe('Compare', () => {
45
45
  expect(versionUtil.compare([1, 3, 3], [1, 2, 4], 0)).toBe(false);
46
46
  expect(versionUtil.compare([1, 2, 3], [1, 2, 4], 1)).toBe(true);
47
47
  expect(versionUtil.compare([1, 2, 4], [1, 2, 3], 1)).toBe(false);
48
+ // Higher minor allows lower patch: 0.3.0 fits ^0.2.6
49
+ expect(versionUtil.compare([0, 2, 6], [0, 3, 0], 0)).toBe(true);
50
+ expect(versionUtil.compare([0, 2, 6], [0, 2, 5], 0)).toBe(false);
51
+ expect(versionUtil.compare([0, 2, 6], [0, 2, 6], 0)).toBe(true);
52
+ expect(versionUtil.compare([0, 2, 6], [1, 3, 0], 0)).toBe(false);
48
53
  });
49
54
 
50
55
  it('Minor mode', () => {
@@ -59,6 +64,20 @@ describe('Compare', () => {
59
64
  });
60
65
  });
61
66
 
67
+ describe('Pick', () => {
68
+ it('Caret range includes higher minors', () => {
69
+ const versions = ['0.2.5', '0.2.6', '0.2.8', '0.3.0', '1.0.0'];
70
+
71
+ expect(versionUtil.pick(versions, '^0.2.6')).toEqual(['0.2.6', '0.2.8', '0.3.0']);
72
+ });
73
+
74
+ it('Tilde range keeps minor pinned', () => {
75
+ const versions = ['1.2.3', '1.2.10', '1.3.0'];
76
+
77
+ expect(versionUtil.pick(versions, '~1.2.3')).toEqual(['1.2.3', '1.2.10']);
78
+ });
79
+ });
80
+
62
81
  describe('Bump', () => {
63
82
  it('Release', () => {
64
83
  expect(versionUtil.bump('0.0.0', 'release')).toBe('0.0.1');
@@ -25,16 +25,18 @@ const compare = (
25
25
  actualVer: number[],
26
26
  compareMode: ComapreMode,
27
27
  ) => {
28
- const val = new Array(3).fill(null).reduce((acc, _, i) => {
29
- // Alrady is not compatible
30
- if (!acc) return acc;
31
- // Mode not include comparation, version should be same or hier
32
- if (i > compareMode) return actualVer[i] >= baseVer[i];
28
+ // Components pinned by the mode must match exactly
29
+ for (let i = 0; i <= compareMode; i++) {
30
+ if (baseVer[i] !== actualVer[i]) return false;
31
+ }
33
32
 
34
- return baseVer[i] === actualVer[i];
35
- }, true);
33
+ // The rest must be same or higher, compared from most significant:
34
+ // a higher minor allows any patch (0.3.0 fits ^0.2.6)
35
+ for (let i = compareMode + 1; i < 3; i++) {
36
+ if (actualVer[i] !== baseVer[i]) return actualVer[i] > baseVer[i];
37
+ }
36
38
 
37
- return val;
39
+ return true;
38
40
  };
39
41
 
40
42
  const pick = (allVersions: string[], v: string) => {