@codedependant/semantic-release-docker 3.1.1
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/CHANGELOG.md +90 -0
- package/LICENSE +21 -0
- package/README.md +184 -0
- package/index.js +28 -0
- package/lib/build-config.js +63 -0
- package/lib/build-template-vars.js +28 -0
- package/lib/docker/image.js +127 -0
- package/lib/docker/index.js +5 -0
- package/lib/lang/array/index.js +5 -0
- package/lib/lang/array/to-array.js +9 -0
- package/lib/lang/object/get.js +18 -0
- package/lib/lang/object/has.js +8 -0
- package/lib/lang/object/index.js +6 -0
- package/lib/lang/string/index.js +5 -0
- package/lib/lang/string/template.js +14 -0
- package/lib/parse-pkg-name.js +12 -0
- package/lib/prepare.js +34 -0
- package/lib/publish.js +32 -0
- package/lib/read-pkg.js +12 -0
- package/lib/verify.js +95 -0
- package/package.json +98 -0
- package/test/common/git/add.js +9 -0
- package/test/common/git/commit.js +11 -0
- package/test/common/git/head.js +10 -0
- package/test/common/git/index.js +13 -0
- package/test/common/git/init-origin.js +13 -0
- package/test/common/git/init-remote.js +16 -0
- package/test/common/git/init.js +20 -0
- package/test/common/git/push.js +9 -0
- package/test/common/git/tag.js +13 -0
- package/test/common/git/tags.js +14 -0
- package/test/fixture/docker/Dockerfile.prepare +4 -0
- package/test/fixture/docker/Dockerfile.publish +4 -0
- package/test/fixture/docker/Dockerfile.test +4 -0
- package/test/fixture/package.json +4 -0
- package/test/fixture/pkg/one/package.json +5 -0
- package/test/fixture/pkg/two/package.json +0 -0
- package/test/integration/prepare.js +74 -0
- package/test/integration/publish.js +60 -0
- package/test/integration/release.js +92 -0
- package/test/integration/verify.js +205 -0
- package/test/unit/build-config.js +167 -0
- package/test/unit/build-template-vars.js +63 -0
- package/test/unit/docker/image.js +289 -0
- package/test/unit/lang/array.js +34 -0
- package/test/unit/lang/object.js +45 -0
- package/test/unit/lang/string.js +37 -0
- package/test/unit/parse-pkg-name.js +27 -0
- package/test/unit/read-pkg.js +36 -0
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const os = require('os')
|
|
4
|
+
const path = require('path')
|
|
5
|
+
const crypto = require('crypto')
|
|
6
|
+
const execa = require('execa')
|
|
7
|
+
const {test, threw} = require('tap')
|
|
8
|
+
const docker = require('../../../lib/docker/index.js')
|
|
9
|
+
|
|
10
|
+
function random() {
|
|
11
|
+
return crypto.randomBytes(5).toString('hex')
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const fixturedir = path.join(__dirname, '..', '..', 'fixture')
|
|
15
|
+
test('exports', async (tt) => {
|
|
16
|
+
tt.match(docker, {
|
|
17
|
+
Image: Function
|
|
18
|
+
}, 'expected exports')
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
test('Image', async (t) => {
|
|
22
|
+
const build_id = random()
|
|
23
|
+
t.throws(() => {
|
|
24
|
+
return new docker.Image()
|
|
25
|
+
}, /docker image "name" is required and must be a string/gi)
|
|
26
|
+
|
|
27
|
+
t.test('image defaults', async (tt) => {
|
|
28
|
+
const img = new docker.Image({name: 'test'})
|
|
29
|
+
tt.notOk(img.sha, 'No default sha generated')
|
|
30
|
+
tt.match(img.opts, {
|
|
31
|
+
build_id: String
|
|
32
|
+
, registry: null
|
|
33
|
+
, project: null
|
|
34
|
+
, name: 'test'
|
|
35
|
+
, dockerfile: 'Dockerfile'
|
|
36
|
+
, cwd: process.cwd()
|
|
37
|
+
, args: Map
|
|
38
|
+
}, 'default image options')
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
test('image overrides', async (tt) => {
|
|
42
|
+
const img = new docker.Image({
|
|
43
|
+
name: 'test'
|
|
44
|
+
, build_id: 'abc123'
|
|
45
|
+
, registry: 'quay.io'
|
|
46
|
+
, project: 'esatterwhite'
|
|
47
|
+
, name: 'test'
|
|
48
|
+
, dockerfile: 'Dockerfile.test'
|
|
49
|
+
, cwd: path.join(__dirname, 'build')
|
|
50
|
+
, sha: 'hello'
|
|
51
|
+
})
|
|
52
|
+
tt.equal(img.sha, 'hello')
|
|
53
|
+
tt.match(img.opts, {
|
|
54
|
+
build_id: 'abc123'
|
|
55
|
+
, registry: 'quay.io'
|
|
56
|
+
, project: 'esatterwhite'
|
|
57
|
+
, name: 'test'
|
|
58
|
+
, dockerfile: 'Dockerfile.test'
|
|
59
|
+
, cwd: path.join(__dirname, 'build')
|
|
60
|
+
, args: Map
|
|
61
|
+
}, 'default image options')
|
|
62
|
+
|
|
63
|
+
tt.equal(img.context, '.', 'default image context')
|
|
64
|
+
img.context = __dirname
|
|
65
|
+
tt.equal(img.context, __dirname, 'context override')
|
|
66
|
+
tt.equal(
|
|
67
|
+
img.dockerfile
|
|
68
|
+
, path.join(__dirname, 'build', 'Dockerfile.test')
|
|
69
|
+
, 'docker file path'
|
|
70
|
+
)
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
t.test('dockerfile location resolution', async (t) => {
|
|
74
|
+
t.test('relative location', async (t) => {
|
|
75
|
+
const img = new docker.Image({
|
|
76
|
+
name: 'test'
|
|
77
|
+
, build_id: 'abc123'
|
|
78
|
+
, registry: 'quay.io'
|
|
79
|
+
, project: 'esatterwhite'
|
|
80
|
+
, name: 'test'
|
|
81
|
+
, dockerfile: '../../Dockerfile.test'
|
|
82
|
+
, cwd: path.join(__dirname, 'build')
|
|
83
|
+
, sha: 'hello'
|
|
84
|
+
})
|
|
85
|
+
t.equal(
|
|
86
|
+
img.dockerfile
|
|
87
|
+
, path.join(__dirname, '..', 'Dockerfile.test')
|
|
88
|
+
, 'docker file path'
|
|
89
|
+
)
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
t.test('absolute path', async (t) => {
|
|
93
|
+
const img = new docker.Image({
|
|
94
|
+
name: 'test'
|
|
95
|
+
, build_id: 'abc123'
|
|
96
|
+
, registry: 'quay.io'
|
|
97
|
+
, project: 'esatterwhite'
|
|
98
|
+
, name: 'test'
|
|
99
|
+
, dockerfile: '/var/opt/Dockerfile.test'
|
|
100
|
+
, cwd: path.join(__dirname, 'build')
|
|
101
|
+
, sha: 'hello'
|
|
102
|
+
})
|
|
103
|
+
t.equal(
|
|
104
|
+
img.dockerfile
|
|
105
|
+
, '/var/opt/Dockerfile.test'
|
|
106
|
+
, 'docker file path'
|
|
107
|
+
)
|
|
108
|
+
})
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
t.test('image#id()', async (tt) => {
|
|
112
|
+
{
|
|
113
|
+
const img = new docker.Image({
|
|
114
|
+
name: 'test'
|
|
115
|
+
, build_id: 'abc123'
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
tt.equal(img.id, 'test:abc123')
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
{
|
|
122
|
+
const img = new docker.Image({
|
|
123
|
+
name: 'test'
|
|
124
|
+
, sha: 'abcdefg123456'
|
|
125
|
+
, registry: 'quay.io'
|
|
126
|
+
, project: 'esatterwhite'
|
|
127
|
+
, build_id: 'abacadaba'
|
|
128
|
+
})
|
|
129
|
+
|
|
130
|
+
tt.equal(img.id, 'abcdefg123456', 'sha value used as image id')
|
|
131
|
+
}
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
t.test('image#repo', async (tt) => {
|
|
135
|
+
{
|
|
136
|
+
const img = new docker.Image({
|
|
137
|
+
name: 'test'
|
|
138
|
+
})
|
|
139
|
+
|
|
140
|
+
tt.equal(img.repo, 'test')
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
{
|
|
144
|
+
const img = new docker.Image({
|
|
145
|
+
name: 'foobar'
|
|
146
|
+
, registry: 'us.gcr.io'
|
|
147
|
+
})
|
|
148
|
+
|
|
149
|
+
tt.equal(img.repo, 'us.gcr.io/foobar')
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
{
|
|
153
|
+
const img = new docker.Image({
|
|
154
|
+
name: 'test'
|
|
155
|
+
, registry: 'quay.io'
|
|
156
|
+
, project: 'esatterwhite'
|
|
157
|
+
})
|
|
158
|
+
|
|
159
|
+
tt.equal(img.repo, 'quay.io/esatterwhite/test', 'generated repo name')
|
|
160
|
+
}
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
t.test('image#build_cmd', async (tt) => {
|
|
164
|
+
{
|
|
165
|
+
const img = new docker.Image({
|
|
166
|
+
name: 'test'
|
|
167
|
+
, registry: 'quay.io'
|
|
168
|
+
, project: 'esatterwhite'
|
|
169
|
+
, build_id: 'abacadaba'
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
tt.deepEqual(img.build_cmd, [
|
|
173
|
+
'build'
|
|
174
|
+
, '--quiet'
|
|
175
|
+
, '--tag'
|
|
176
|
+
, 'quay.io/esatterwhite/test:abacadaba'
|
|
177
|
+
, '-f'
|
|
178
|
+
, path.join(process.cwd(), 'Dockerfile')
|
|
179
|
+
, '.'
|
|
180
|
+
], 'build command')
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
{
|
|
184
|
+
const img = new docker.Image({
|
|
185
|
+
name: 'foobar'
|
|
186
|
+
, registry: 'us.gcr.io'
|
|
187
|
+
, project: 'esatterwhite'
|
|
188
|
+
, build_id: '1010101'
|
|
189
|
+
, cwd: __dirname
|
|
190
|
+
, context: path.join(__dirname, 'fake')
|
|
191
|
+
})
|
|
192
|
+
|
|
193
|
+
tt.deepEqual(img.build_cmd, [
|
|
194
|
+
'build'
|
|
195
|
+
, '--quiet'
|
|
196
|
+
, '--tag'
|
|
197
|
+
, 'us.gcr.io/esatterwhite/foobar:1010101'
|
|
198
|
+
, '-f'
|
|
199
|
+
, path.join(__dirname, 'Dockerfile')
|
|
200
|
+
, path.join(__dirname, 'fake')
|
|
201
|
+
], 'build command')
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
{
|
|
205
|
+
const img = new docker.Image({
|
|
206
|
+
name: 'foobar'
|
|
207
|
+
, registry: 'us.gcr.io'
|
|
208
|
+
, project: 'esatterwhite'
|
|
209
|
+
, build_id: '1010101'
|
|
210
|
+
, cwd: __dirname
|
|
211
|
+
, context: path.join(__dirname, 'fake')
|
|
212
|
+
})
|
|
213
|
+
|
|
214
|
+
img.arg('ARG_1', 'yes')
|
|
215
|
+
img.arg('VALUE_FROM_ENV', true)
|
|
216
|
+
tt.deepEqual(img.build_cmd, [
|
|
217
|
+
'build'
|
|
218
|
+
, '--quiet'
|
|
219
|
+
, '--tag'
|
|
220
|
+
, 'us.gcr.io/esatterwhite/foobar:1010101'
|
|
221
|
+
, '--build-arg'
|
|
222
|
+
, 'ARG_1=yes'
|
|
223
|
+
, '--build-arg'
|
|
224
|
+
, 'VALUE_FROM_ENV'
|
|
225
|
+
, '-f'
|
|
226
|
+
, path.join(__dirname, 'Dockerfile')
|
|
227
|
+
, path.join(__dirname, 'fake')
|
|
228
|
+
], 'build command')
|
|
229
|
+
}
|
|
230
|
+
})
|
|
231
|
+
|
|
232
|
+
t.test('image#build()', async (tt) => {
|
|
233
|
+
const img = new docker.Image({
|
|
234
|
+
name: 'test'
|
|
235
|
+
, registry: 'quay.io'
|
|
236
|
+
, project: 'esatterwhite'
|
|
237
|
+
, build_id: build_id
|
|
238
|
+
, cwd: fixturedir
|
|
239
|
+
, dockerfile: path.join('docker', 'Dockerfile.test')
|
|
240
|
+
, context: path.join(fixturedir, 'docker')
|
|
241
|
+
})
|
|
242
|
+
|
|
243
|
+
tt.notOk(img.sha, 'no show before build')
|
|
244
|
+
const sha = await img.build()
|
|
245
|
+
tt.equal(sha, img.sha, 'image sha set after build')
|
|
246
|
+
const {stdout} = await execa('docker', ['run', '--rm', img.name, 'ls', '-1'])
|
|
247
|
+
tt.deepEqual(
|
|
248
|
+
stdout.split(os.EOL).sort()
|
|
249
|
+
, ['Dockerfile.test', 'Dockerfile.publish', 'Dockerfile.prepare'].sort()
|
|
250
|
+
, 'files in image context')
|
|
251
|
+
})
|
|
252
|
+
|
|
253
|
+
t.test('image#tag()', async (tt) => {
|
|
254
|
+
const img = new docker.Image({
|
|
255
|
+
name: 'test'
|
|
256
|
+
, registry: 'quay.io'
|
|
257
|
+
, project: 'esatterwhite'
|
|
258
|
+
, build_id: build_id
|
|
259
|
+
, cwd: __dirname
|
|
260
|
+
, dockerfile: path.join(fixturedir, 'docker', 'Dockerfile.test')
|
|
261
|
+
, context: path.join(__dirname, 'fixture')
|
|
262
|
+
})
|
|
263
|
+
await img.tag('1.0.0', false)
|
|
264
|
+
const {stdout} = await execa('docker', [
|
|
265
|
+
'images', img.repo
|
|
266
|
+
, '-q', '--format={{ .Tag }}'
|
|
267
|
+
])
|
|
268
|
+
const tags = stdout.split(os.EOL)
|
|
269
|
+
tt.deepEqual(tags.sort(), [build_id, '1.0.0'].sort(), 'image tags')
|
|
270
|
+
})
|
|
271
|
+
|
|
272
|
+
t.test('image#clean()', async (tt) => {
|
|
273
|
+
const img = new docker.Image({
|
|
274
|
+
name: 'test'
|
|
275
|
+
, registry: 'quay.io'
|
|
276
|
+
, project: 'esatterwhite'
|
|
277
|
+
, build_id: build_id
|
|
278
|
+
, cwd: __dirname
|
|
279
|
+
, dockerfile: path.join('fixture', 'Dockerfile.test')
|
|
280
|
+
})
|
|
281
|
+
await img.clean()
|
|
282
|
+
const {stdout} = await execa('docker', [
|
|
283
|
+
'images', img.repo
|
|
284
|
+
, '-q', '--format={{ .Tag }}'
|
|
285
|
+
])
|
|
286
|
+
tt.deepEqual(stdout, '', 'all tags removed')
|
|
287
|
+
})
|
|
288
|
+
|
|
289
|
+
}).catch(threw)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const {test, threw} = require('tap')
|
|
4
|
+
const array = require('../../../lib/lang/array/index.js')
|
|
5
|
+
|
|
6
|
+
test('array', async (t) => {
|
|
7
|
+
t.test('toArray', async (t) => {
|
|
8
|
+
const cases = [
|
|
9
|
+
{value: undefined, expected: [], message: 'toArray(undefined) == []'}
|
|
10
|
+
, {value: null, expected: [], message: 'toArray(null) == []'}
|
|
11
|
+
, {value: 1, expected: [1], message: 'toArray(1) == [1]'}
|
|
12
|
+
, {value: '', expected: [], message: 'toArray(\'\') == []'}
|
|
13
|
+
, {value: 'test', expected: ['test']}
|
|
14
|
+
, {value: '1,2,3', expected: ['1', '2', '3']}
|
|
15
|
+
, {value: '1, 2, 3', expected: ['1', '2', '3']}
|
|
16
|
+
, {value: '1, 2, 3', expected: ['1', ' 2', ' 3'], sep: ','}
|
|
17
|
+
, {value: '1|2|3', expected: ['1', '2', '3'], sep: '|'}
|
|
18
|
+
, {value: [1, 2, 3], expected: [1, 2, 3]}
|
|
19
|
+
, {value: new Set([1, null, 'test']), expected: [1, null, 'test']}
|
|
20
|
+
]
|
|
21
|
+
for (const current of cases) {
|
|
22
|
+
const args = [current.value]
|
|
23
|
+
if (current.sep) {
|
|
24
|
+
args.push(current.sep)
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
t.deepEqual(
|
|
28
|
+
array.toArray(...args)
|
|
29
|
+
, current.expected
|
|
30
|
+
, current.message || `toArray(${current.value}) == ${current.expected}`
|
|
31
|
+
)
|
|
32
|
+
}
|
|
33
|
+
})
|
|
34
|
+
}).catch(threw)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const {test, threw} = require('tap')
|
|
4
|
+
const object = require('../../../lib/lang/object/index.js')
|
|
5
|
+
|
|
6
|
+
test('object', async (t) => {
|
|
7
|
+
const obj = {
|
|
8
|
+
foo: {
|
|
9
|
+
bar: {
|
|
10
|
+
baz: {
|
|
11
|
+
key: 'value'
|
|
12
|
+
, test: null
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
, value: 'foobar'
|
|
16
|
+
, array: [1, 2, 3]
|
|
17
|
+
}
|
|
18
|
+
, bar: 0
|
|
19
|
+
, baz: false
|
|
20
|
+
, biff: null
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
t.test('get', async (tt) => {
|
|
24
|
+
tt.match(object.get(obj, 'foo.bar'), {
|
|
25
|
+
baz: {
|
|
26
|
+
key: 'value'
|
|
27
|
+
, test: null
|
|
28
|
+
}
|
|
29
|
+
})
|
|
30
|
+
tt.deepEqual(object.get(obj, 'foo.array'), [1, 2, 3], 'foo.array')
|
|
31
|
+
tt.equal(object.get(obj, 'foo.bar.baz.key'), 'value', 'foo.bar.baz.key')
|
|
32
|
+
tt.equal(object.get(obj, 'foo|bar|baz|key', '|'), 'value', 'foo.bar.baz.key')
|
|
33
|
+
tt.equal(object.get(obj, 'does.not.exist'), undefined, 'does.not.exist')
|
|
34
|
+
tt.strictEqual(object.get(obj, 'foo.bar.baz.test'), null, 'foo.bar.baz.test')
|
|
35
|
+
tt.strictEqual(object.get(null, 'foo.bar.baz'), null, 'null input')
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
t.test('has', async (t) => {
|
|
39
|
+
t.ok(object.has(obj, 'bar'), 'key found')
|
|
40
|
+
t.ok(object.has(obj, 'biff'), 'has key w/ null value')
|
|
41
|
+
t.false(object.has(obj, 'whizbang'), 'key not found')
|
|
42
|
+
t.false(object.has(undefined, 'whizbang'), 'undefined object')
|
|
43
|
+
|
|
44
|
+
})
|
|
45
|
+
}).catch(threw)
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const {test, threw} = require('tap')
|
|
4
|
+
const string = require('../../../lib/lang/string/index.js')
|
|
5
|
+
|
|
6
|
+
test('string', async (t) => {
|
|
7
|
+
t.test('template', async (tt) => {
|
|
8
|
+
const cases = [
|
|
9
|
+
{
|
|
10
|
+
input: 'hello {value}'
|
|
11
|
+
, values: {value: 'world'}
|
|
12
|
+
, expected: 'hello world'
|
|
13
|
+
, message: 'single value lookup'
|
|
14
|
+
}, {
|
|
15
|
+
input: 'hello {value}'
|
|
16
|
+
, values: {}
|
|
17
|
+
, expected: 'hello {value}'
|
|
18
|
+
, message: 'missing imput values'
|
|
19
|
+
}, {
|
|
20
|
+
input: 'hello {place.name}'
|
|
21
|
+
, values: {place: {name: 'boston'}}
|
|
22
|
+
, expected: 'hello boston'
|
|
23
|
+
, message: 'nested values'
|
|
24
|
+
}, {
|
|
25
|
+
input: null
|
|
26
|
+
, values: {place: {name: 'boston'}}
|
|
27
|
+
, expected: null
|
|
28
|
+
, message: 'non string value returns value'
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
for (const tcase of cases) {
|
|
33
|
+
const tpl = string.template(tcase.input)
|
|
34
|
+
tt.equal(tpl(tcase.values), tcase.expected, tcase.message)
|
|
35
|
+
}
|
|
36
|
+
})
|
|
37
|
+
}).catch(threw)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const {test, threw} = require('tap')
|
|
4
|
+
const parsePkgName = require('../../lib/parse-pkg-name.js')
|
|
5
|
+
|
|
6
|
+
test('parsePkgName', async (t) => {
|
|
7
|
+
t.deepEqual(parsePkgName('test'), {
|
|
8
|
+
scope: null
|
|
9
|
+
, name: 'test'
|
|
10
|
+
}, 'non-scoped package name')
|
|
11
|
+
|
|
12
|
+
t.deepEqual(parsePkgName('@namespace/foobar'), {
|
|
13
|
+
scope: 'namespace'
|
|
14
|
+
, name: 'foobar'
|
|
15
|
+
}, 'scoped package name')
|
|
16
|
+
|
|
17
|
+
t.deepEqual(parsePkgName('nampace/foobar'), {
|
|
18
|
+
name: null
|
|
19
|
+
, scope: null
|
|
20
|
+
}, 'invalid package name')
|
|
21
|
+
|
|
22
|
+
t.deepEqual(parsePkgName(), {
|
|
23
|
+
name: null
|
|
24
|
+
, scope: null
|
|
25
|
+
}, 'no package name')
|
|
26
|
+
|
|
27
|
+
}).catch(threw)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
const path = require('path')
|
|
4
|
+
const {test, threw} = require('tap')
|
|
5
|
+
const readPkg = require('../../lib/read-pkg.js')
|
|
6
|
+
|
|
7
|
+
const fixturedir = path.join(__dirname, '..', 'fixture')
|
|
8
|
+
test('read-pkg', async (t) => {
|
|
9
|
+
t.test('reads cwd by default', async (tt) => {
|
|
10
|
+
const pkg = await readPkg()
|
|
11
|
+
tt.match(pkg, {
|
|
12
|
+
name: '@codedependant/semantic-release-docker'
|
|
13
|
+
, version: String
|
|
14
|
+
})
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
t.test('reads specified directories', async (tt) => {
|
|
18
|
+
const cwd = path.join(fixturedir, 'pkg', 'one')
|
|
19
|
+
const pkg = await readPkg({cwd})
|
|
20
|
+
tt.match(pkg, {
|
|
21
|
+
name: '@fixture/one'
|
|
22
|
+
, version: '0.0.0'
|
|
23
|
+
, private: true
|
|
24
|
+
})
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
t.test('throws on invalid json', async (tt) => {
|
|
28
|
+
const cwd = path.join(fixturedir, 'pkg', 'two')
|
|
29
|
+
tt.rejects(readPkg({cwd}), /unexpected end of json input/ig)
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
t.test('throws if no package.json', async (tt) => {
|
|
33
|
+
const cwd = path.join(fixturedir, 'pkg', 'three')
|
|
34
|
+
tt.rejects(readPkg({cwd}), {code: 'ENOENT'})
|
|
35
|
+
})
|
|
36
|
+
}).catch(threw)
|