@cmflow/cli 0.66.2 → 0.67.0
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/package.json +3 -1
- package/src/common/get-config.js +42 -8
- package/src/semantic-release/actions/prepare.js +49 -7
- package/src/semantic-release/utils/__mock__/test1/package.json +1 -0
- package/src/semantic-release/utils/__mock__/test1/packages/a/package.json +1 -0
- package/src/semantic-release/utils/__mock__/test1/packages/b/package.json +1 -0
- package/src/semantic-release/utils/__mock__/test2/package.json +4 -0
- package/src/semantic-release/utils/__mock__/test2/packages/a/package.json +7 -0
- package/src/semantic-release/utils/__mock__/test2/packages/b/package.json +5 -0
- package/src/semantic-release/utils/bump-packages-version.js +49 -0
- package/src/semantic-release/utils/bump-packages-version.test.js +69 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cmflow/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.67.0",
|
|
4
4
|
"description": "An awesome Git Flow",
|
|
5
5
|
"author": "camfou",
|
|
6
6
|
"license": "MIT",
|
|
@@ -35,6 +35,8 @@
|
|
|
35
35
|
"esm": "3.2.25",
|
|
36
36
|
"execa": "5.1.1",
|
|
37
37
|
"figures": "3.2.0",
|
|
38
|
+
"fs-extra": "^10.1.0",
|
|
39
|
+
"globby": "11.1.0",
|
|
38
40
|
"has-yarn": "^2.1.0",
|
|
39
41
|
"inquirer": "7.3.3",
|
|
40
42
|
"listr": "0.14.3",
|
package/src/common/get-config.js
CHANGED
|
@@ -2,6 +2,8 @@ import hasYarn from 'has-yarn'
|
|
|
2
2
|
import { get } from 'lodash'
|
|
3
3
|
import { git } from './cli/git'
|
|
4
4
|
import { getPackageJson } from './get-package-json'
|
|
5
|
+
import fs from 'fs'
|
|
6
|
+
import { join } from 'path'
|
|
5
7
|
|
|
6
8
|
const toBool = (value) => {
|
|
7
9
|
if (value === 'false') return false
|
|
@@ -12,10 +14,18 @@ const toBool = (value) => {
|
|
|
12
14
|
|
|
13
15
|
export function getCI () {
|
|
14
16
|
const { env } = process
|
|
15
|
-
const {
|
|
17
|
+
const {
|
|
18
|
+
GIT_USER_NAME,
|
|
19
|
+
GIT_USER_EMAIL
|
|
20
|
+
} = env
|
|
16
21
|
if (env.CI) {
|
|
17
22
|
if (env.TRAVIS) {
|
|
18
|
-
const {
|
|
23
|
+
const {
|
|
24
|
+
TRAVIS_BUILD_NUMBER,
|
|
25
|
+
TRAVIS_COMMIT,
|
|
26
|
+
TRAVIS_PULL_REQUEST,
|
|
27
|
+
TRAVIS_BRANCH
|
|
28
|
+
} = env
|
|
19
29
|
|
|
20
30
|
return {
|
|
21
31
|
CI_NAME: 'Travis CI',
|
|
@@ -30,7 +40,12 @@ export function getCI () {
|
|
|
30
40
|
}
|
|
31
41
|
|
|
32
42
|
if (env.GITLAB_CI) {
|
|
33
|
-
const {
|
|
43
|
+
const {
|
|
44
|
+
CI_BUILD_ID,
|
|
45
|
+
CI_JOB_ID,
|
|
46
|
+
CI_COMMIT_SHA,
|
|
47
|
+
CI_COMMIT_BRANCH
|
|
48
|
+
} = env
|
|
34
49
|
|
|
35
50
|
return {
|
|
36
51
|
CI_NAME: 'GitLab CI',
|
|
@@ -45,7 +60,12 @@ export function getCI () {
|
|
|
45
60
|
}
|
|
46
61
|
|
|
47
62
|
if (env.CIRCLECI) {
|
|
48
|
-
const {
|
|
63
|
+
const {
|
|
64
|
+
CIRCLE_BUILD_NUM,
|
|
65
|
+
CIRCLE_SHA1,
|
|
66
|
+
CIRCLE_PULL_REQUEST,
|
|
67
|
+
CIRCLE_BRANCH
|
|
68
|
+
} = env
|
|
49
69
|
return {
|
|
50
70
|
CI_NAME: 'Circle CI',
|
|
51
71
|
USER: GIT_USER_NAME || 'Circle CI',
|
|
@@ -92,15 +112,23 @@ export function getConfig () {
|
|
|
92
112
|
GIT_USER_EMAIL
|
|
93
113
|
} = process.env
|
|
94
114
|
|
|
95
|
-
const
|
|
115
|
+
const HAS_YARN = hasYarn()
|
|
116
|
+
const E2E_CMD = pkg.scripts.test_e2e ? 'test_e2e' : pkg.scripts['test:e2e'] ? 'test:e2e' : undefined
|
|
117
|
+
const IS_YARN_BERRY = HAS_YARN ? fs.existsSync(join(process.cwd(), '.yamlrc.yml')) : false
|
|
118
|
+
let BUMP_METHOD = get(pkg, 'flow.bumpMethod', 'default')
|
|
119
|
+
|
|
120
|
+
if (IS_YARN_BERRY && ['native', 'default'].includes(BUMP_METHOD)) {
|
|
121
|
+
BUMP_METHOD = 'cmflow'
|
|
122
|
+
}
|
|
96
123
|
|
|
97
124
|
return {
|
|
98
125
|
PROJECT_NAME: PROJECT_NAME || projectName,
|
|
99
126
|
HAS_YARN: hasYarn(),
|
|
127
|
+
IS_YARN_BERRY,
|
|
100
128
|
HAS_LERNA: pkg.dependencies.lerna || pkg.devDependencies.lerna,
|
|
101
129
|
HAS_BUILD: pkg.scripts.build,
|
|
102
|
-
HAS_E2E: !!
|
|
103
|
-
E2E_CMD:
|
|
130
|
+
HAS_E2E: !!E2E_CMD,
|
|
131
|
+
E2E_CMD: E2E_CMD,
|
|
104
132
|
HAS_BUILD_CHANGELOG: pkg.scripts.build_changelog,
|
|
105
133
|
get DEPLOY_ON_DOCKER () {
|
|
106
134
|
return toBool(process.env.DEPLOY_ON_DOCKER) && DOCKER_HUB_ID && DOCKER_HUB_PWD
|
|
@@ -119,7 +147,11 @@ export function getConfig () {
|
|
|
119
147
|
return process.env.OWNER || owner
|
|
120
148
|
},
|
|
121
149
|
get DOCKER_REPOSITORY () {
|
|
122
|
-
const {
|
|
150
|
+
const {
|
|
151
|
+
DOCKER_REPOSITORY,
|
|
152
|
+
OWNER,
|
|
153
|
+
PROJECT_NAME
|
|
154
|
+
} = process.env
|
|
123
155
|
return DOCKER_REPOSITORY || `${OWNER || owner}/${PROJECT_NAME || projectName}`
|
|
124
156
|
},
|
|
125
157
|
DOCKER_HUB_ID,
|
|
@@ -133,6 +165,8 @@ export function getConfig () {
|
|
|
133
165
|
GITHUB_PAGES_PATH,
|
|
134
166
|
GIT_USER_NAME,
|
|
135
167
|
GIT_USER_EMAIL,
|
|
168
|
+
BUMP_METHOD,
|
|
169
|
+
WORKSPACES: pkg.workspaces || [],
|
|
136
170
|
...getCI()
|
|
137
171
|
}
|
|
138
172
|
}
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import { dockerPublish } from '../utils/docker-publish'
|
|
2
|
-
import { git, lerna, npm, yarn
|
|
2
|
+
import { configureGitWorkspace, git, lerna, npm, yarn } from '../../common'
|
|
3
|
+
import { bumpPackagesVersion } from '../utils/bump-packages-version'
|
|
3
4
|
|
|
4
5
|
async function gitPrepareRelease (pluginConfig, context) {
|
|
5
|
-
const {
|
|
6
|
+
const {
|
|
7
|
+
logger,
|
|
8
|
+
config: {
|
|
9
|
+
CI_NAME,
|
|
10
|
+
BUILD_NUMBER
|
|
11
|
+
}
|
|
12
|
+
} = context
|
|
6
13
|
|
|
7
14
|
logger.info('Adding files to commit')
|
|
8
15
|
git.add('-A').sync()
|
|
@@ -21,15 +28,50 @@ async function gitPrepareRelease (pluginConfig, context) {
|
|
|
21
28
|
}
|
|
22
29
|
|
|
23
30
|
export async function prepare (pluginConfig, context) {
|
|
24
|
-
const {
|
|
25
|
-
|
|
31
|
+
const {
|
|
32
|
+
branch,
|
|
33
|
+
config: {
|
|
34
|
+
RELEASE_CANDIDATE_TAG,
|
|
35
|
+
HAS_BUILD,
|
|
36
|
+
HAS_E2E,
|
|
37
|
+
E2E_CMD,
|
|
38
|
+
SKIP_DEPLOY,
|
|
39
|
+
SKIP_GITHUB_PUBLISH,
|
|
40
|
+
HAS_YARN,
|
|
41
|
+
HAS_LERNA,
|
|
42
|
+
BUMP_METHOD,
|
|
43
|
+
WORKSPACES
|
|
44
|
+
},
|
|
45
|
+
logger
|
|
46
|
+
} = context
|
|
47
|
+
const pkgManager = HAS_YARN ? yarn : npm
|
|
48
|
+
|
|
49
|
+
logger.info(`Start bump version for all packages using method: ${BUMP_METHOD}`)
|
|
26
50
|
|
|
27
|
-
|
|
51
|
+
switch (BUMP_METHOD) {
|
|
52
|
+
case 'native':
|
|
53
|
+
logger.info('Using package manager')
|
|
54
|
+
pkgManager.newVersion(context.nextRelease.version)
|
|
55
|
+
break
|
|
56
|
+
case 'lerna':
|
|
57
|
+
if (HAS_LERNA) {
|
|
58
|
+
await lerna.newVersion(context.nextRelease.version)
|
|
59
|
+
}
|
|
60
|
+
break
|
|
61
|
+
case 'cmflow':
|
|
62
|
+
await bumpPackagesVersion(WORKSPACES)
|
|
63
|
+
break
|
|
64
|
+
case 'native:lerna':
|
|
65
|
+
default:
|
|
66
|
+
pkgManager.newVersion(context.nextRelease.version)
|
|
28
67
|
|
|
29
|
-
|
|
30
|
-
|
|
68
|
+
if (HAS_LERNA) {
|
|
69
|
+
await lerna.newVersion(context.nextRelease.version)
|
|
70
|
+
}
|
|
31
71
|
}
|
|
32
72
|
|
|
73
|
+
logger.info('Bump version finished with success...')
|
|
74
|
+
|
|
33
75
|
if (HAS_BUILD && !SKIP_DEPLOY) {
|
|
34
76
|
logger.info('Start build task')
|
|
35
77
|
await pkgManager.run('build')
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"name":"@package/root","version":"1.1.0","dependencies":{},"devDependencies":{},"peerDependencies":{}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"name":"@package/a","version":"1.1.0","dependencies":{"@package/b":"1.1.0"},"devDependencies":{},"peerDependencies":{}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"name":"@package/b","version":"1.1.0","dependencies":{},"devDependencies":{},"peerDependencies":{}}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import globby from 'globby'
|
|
2
|
+
import fs from 'fs-extra'
|
|
3
|
+
|
|
4
|
+
const PACKAGE_JSON_PROPS = ['dependencies', 'devDependencies', 'peerDependencies']
|
|
5
|
+
|
|
6
|
+
export async function bumpPackagesVersion (version, workspaces, cwd = process.cwd()) {
|
|
7
|
+
const patterns = workspaces.map((path) => `${path}/package.json`).concat('package.json')
|
|
8
|
+
|
|
9
|
+
const files = await globby(patterns, {
|
|
10
|
+
cwd,
|
|
11
|
+
absolute: true
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
const names = new Set()
|
|
15
|
+
|
|
16
|
+
const packages = await Promise.all(files.map(async (file) => {
|
|
17
|
+
const pkg = await fs.readJson(file)
|
|
18
|
+
|
|
19
|
+
names.add(pkg.name)
|
|
20
|
+
|
|
21
|
+
return {
|
|
22
|
+
file,
|
|
23
|
+
pkg
|
|
24
|
+
}
|
|
25
|
+
}))
|
|
26
|
+
|
|
27
|
+
packages.map(({
|
|
28
|
+
pkg,
|
|
29
|
+
file
|
|
30
|
+
}) => {
|
|
31
|
+
pkg.version = version
|
|
32
|
+
|
|
33
|
+
PACKAGE_JSON_PROPS.forEach((key) => bumpDependencies(pkg, key, version, names))
|
|
34
|
+
|
|
35
|
+
return fs.writeJson(file, pkg)
|
|
36
|
+
})
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function bumpDependencies (pkg, key, version, names) {
|
|
40
|
+
pkg[key] = pkg[key] || {}
|
|
41
|
+
|
|
42
|
+
if (pkg[key]) {
|
|
43
|
+
names.forEach((name) => {
|
|
44
|
+
if (pkg[key][name] && !pkg[key][name].startsWith('workspace:')) {
|
|
45
|
+
pkg[key][name] = version
|
|
46
|
+
}
|
|
47
|
+
})
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { bumpPackagesVersion } from './bump-packages-version'
|
|
2
|
+
import path from 'path'
|
|
3
|
+
import fs from 'fs-extra'
|
|
4
|
+
|
|
5
|
+
describe('bumpPackagesVersion()', () => {
|
|
6
|
+
beforeEach(() => {
|
|
7
|
+
jest.resetAllMocks()
|
|
8
|
+
jest.spyOn(fs, 'writeJson')
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
it('should upgrade dependencies (package manager: npm/yarn)', async () => {
|
|
12
|
+
await bumpPackagesVersion('1.1.0', [
|
|
13
|
+
'packages/*'
|
|
14
|
+
], path.join(__dirname, '__mock__/test1'))
|
|
15
|
+
|
|
16
|
+
expect(fs.writeJson).toHaveBeenCalledWith(expect.any(String), {
|
|
17
|
+
dependencies: { '@package/b': '1.1.0' },
|
|
18
|
+
devDependencies: {},
|
|
19
|
+
name: '@package/a',
|
|
20
|
+
peerDependencies: {},
|
|
21
|
+
version: '1.1.0'
|
|
22
|
+
})
|
|
23
|
+
|
|
24
|
+
expect(fs.writeJson).toHaveBeenCalledWith(expect.any(String), {
|
|
25
|
+
dependencies: {},
|
|
26
|
+
devDependencies: {},
|
|
27
|
+
name: '@package/b',
|
|
28
|
+
peerDependencies: {},
|
|
29
|
+
version: '1.1.0'
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
expect(fs.writeJson).toHaveBeenCalledWith(expect.any(String), {
|
|
33
|
+
dependencies: {},
|
|
34
|
+
devDependencies: {},
|
|
35
|
+
name: '@package/root',
|
|
36
|
+
peerDependencies: {},
|
|
37
|
+
version: '1.1.0'
|
|
38
|
+
})
|
|
39
|
+
})
|
|
40
|
+
it('should upgrade dependencies (package manager: yarn berry)', async () => {
|
|
41
|
+
await bumpPackagesVersion('1.1.0', [
|
|
42
|
+
'packages/*'
|
|
43
|
+
], path.join(__dirname, '__mock__/test2'))
|
|
44
|
+
|
|
45
|
+
expect(fs.writeJson).toHaveBeenCalledWith(expect.any(String), {
|
|
46
|
+
dependencies: { '@package/b': 'workspace:*' },
|
|
47
|
+
devDependencies: {},
|
|
48
|
+
name: '@package/a',
|
|
49
|
+
peerDependencies: {},
|
|
50
|
+
version: '1.1.0'
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
expect(fs.writeJson).toHaveBeenCalledWith(expect.any(String), {
|
|
54
|
+
dependencies: {},
|
|
55
|
+
devDependencies: {},
|
|
56
|
+
name: '@package/b',
|
|
57
|
+
peerDependencies: {},
|
|
58
|
+
version: '1.1.0'
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
expect(fs.writeJson).toHaveBeenCalledWith(expect.any(String), {
|
|
62
|
+
dependencies: {},
|
|
63
|
+
devDependencies: {},
|
|
64
|
+
name: '@package/root',
|
|
65
|
+
peerDependencies: {},
|
|
66
|
+
version: '1.1.0'
|
|
67
|
+
})
|
|
68
|
+
})
|
|
69
|
+
})
|