@codedependant/semantic-release-docker 3.1.2 → 4.0.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.
Files changed (48) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +38 -11
  3. package/lib/build-config.js +1 -1
  4. package/lib/handlebars/helpers/endswith.js +10 -0
  5. package/lib/handlebars/helpers/eq.js +7 -0
  6. package/lib/handlebars/helpers/gt.js +7 -0
  7. package/lib/handlebars/helpers/gte.js +7 -0
  8. package/lib/handlebars/helpers/includes.js +9 -0
  9. package/lib/handlebars/helpers/index.js +17 -0
  10. package/lib/handlebars/helpers/lower.js +8 -0
  11. package/lib/handlebars/helpers/lt.js +7 -0
  12. package/lib/handlebars/helpers/lte.js +7 -0
  13. package/lib/handlebars/helpers/neq.js +9 -0
  14. package/lib/handlebars/helpers/pick.js +13 -0
  15. package/lib/handlebars/helpers/split.js +5 -0
  16. package/lib/handlebars/helpers/startswith.js +10 -0
  17. package/lib/handlebars/helpers/upper.js +9 -0
  18. package/lib/handlebars/index.js +10 -0
  19. package/lib/lang/string/template.js +9 -7
  20. package/package.json +18 -31
  21. package/test/common/git/add.js +0 -9
  22. package/test/common/git/commit.js +0 -11
  23. package/test/common/git/head.js +0 -10
  24. package/test/common/git/index.js +0 -13
  25. package/test/common/git/init-origin.js +0 -13
  26. package/test/common/git/init-remote.js +0 -16
  27. package/test/common/git/init.js +0 -20
  28. package/test/common/git/push.js +0 -9
  29. package/test/common/git/tag.js +0 -13
  30. package/test/common/git/tags.js +0 -14
  31. package/test/fixture/docker/Dockerfile.prepare +0 -4
  32. package/test/fixture/docker/Dockerfile.publish +0 -4
  33. package/test/fixture/docker/Dockerfile.test +0 -4
  34. package/test/fixture/package.json +0 -4
  35. package/test/fixture/pkg/one/package.json +0 -5
  36. package/test/fixture/pkg/two/package.json +0 -0
  37. package/test/integration/prepare.js +0 -76
  38. package/test/integration/publish.js +0 -60
  39. package/test/integration/release.js +0 -92
  40. package/test/integration/verify.js +0 -206
  41. package/test/unit/build-config.js +0 -167
  42. package/test/unit/build-template-vars.js +0 -63
  43. package/test/unit/docker/image.js +0 -303
  44. package/test/unit/lang/array.js +0 -34
  45. package/test/unit/lang/object.js +0 -45
  46. package/test/unit/lang/string.js +0 -37
  47. package/test/unit/parse-pkg-name.js +0 -27
  48. package/test/unit/read-pkg.js +0 -36
@@ -1,76 +0,0 @@
1
- 'use strict'
2
-
3
- const path = require('path')
4
- const crypto = require('crypto')
5
- const sinon = require('sinon')
6
- const execa = require('execa')
7
- const {test, threw} = require('tap')
8
- const buildConfig = require('../../lib/build-config.js')
9
- const verify = require('../../lib/verify.js')
10
- const prepare = require('../../lib/prepare.js')
11
- const DOCKER_REGISTRY_HOST = process.env.TEST_DOCKER_REGISTRY || 'localhost:5000'
12
- const fixturedir = path.join(__dirname, '..', 'fixture')
13
- const DATE_REGEX = new RegExp(
14
- '^[\\d]{4}-[\\d]{2}-[\\d]{2}T[\\d]{2}:[\\d]{2}:[\\d]{2}'
15
- + '(\.[\\d]{1,6})?(Z|[\\+\\-][\\d]{2}:[\\d]{2})$' // eslint-disable-line no-useless-escape
16
- )
17
-
18
- test('steps::prepare', async (t) => {
19
- t.test('build image created', async (tt) => {
20
- const build_id = crypto.randomBytes(5).toString('hex')
21
- const context = {
22
- env: {
23
- ...process.env
24
- , DOCKER_REGISTRY_USER: 'iamweasel'
25
- , DOCKER_REGISTRY_PASSWORD: 'secretsquirrel'
26
- }
27
- , cwd: fixturedir
28
- , nextRelease: {
29
- version: '2.1.2'
30
- , gitTag: 'v2.1.2'
31
- , gitHead: 'abacadaba'
32
- }
33
- , logger: {
34
- success: sinon.stub()
35
- , info: sinon.stub()
36
- , debug: sinon.stub()
37
- }
38
- }
39
-
40
- const config = await buildConfig(build_id, {
41
- dockerRegistry: DOCKER_REGISTRY_HOST
42
- , dockerProject: 'docker-prepare'
43
- , dockerImage: 'fake'
44
- , dockerArgs: {
45
- MY_VARIABLE: '1'
46
- , TAG_TEMPLATE: '{git_tag}'
47
- , MAJOR_TEMPLATE: '{major}'
48
- , GIT_REF: '{git_sha}'
49
- , BUILD_DATE: '{now}'
50
- }
51
- , dockerFile: 'docker/Dockerfile.prepare'
52
- , dockerContext: 'docker'
53
- }, context)
54
-
55
- const auth = await verify(config, context)
56
- tt.ok(auth, `authentication to ${DOCKER_REGISTRY_HOST} suceeds`)
57
-
58
- const image = await prepare(config, context)
59
-
60
- tt.on('end', () => {
61
- image.clean()
62
- })
63
-
64
- tt.equal(image.opts.args.get('TAG_TEMPLATE'), 'v2.1.2', 'TAG_TEMPLATE value')
65
- tt.equal(image.opts.args.get('MAJOR_TEMPLATE'), '2', 'MAJOR_TEMPLATE value')
66
- tt.equal(image.opts.args.get('GIT_REF'), 'abacadaba', 'GIT_REF value')
67
- tt.match(image.opts.args.get('BUILD_DATE'), DATE_REGEX, 'BUILD_DATE value')
68
- tt.equal(image.context, path.join(context.cwd, config.context), 'docker context path')
69
-
70
- const {stdout} = await execa('docker', [
71
- 'images', image.name
72
- , '-q', '--format={{ .Tag }}'
73
- ])
74
- tt.equal(stdout, build_id, 'build image fully built')
75
- })
76
- }).catch(threw)
@@ -1,60 +0,0 @@
1
- 'use strict'
2
-
3
- const crypto = require('crypto')
4
- const path = require('path')
5
- const sinon = require('sinon')
6
- const execa = require('execa')
7
- const {test, threw} = require('tap')
8
- const buildConfig = require('../../lib/build-config.js')
9
- const verify = require('../../lib/verify.js')
10
- const prepare = require('../../lib/prepare.js')
11
- const publish = require('../../lib/publish.js')
12
- const DOCKER_REGISTRY_HOST = process.env.TEST_DOCKER_REGISTRY || 'localhost:5000'
13
- const fixturedir = path.join(__dirname, '..', 'fixture')
14
-
15
- test('steps::publish', async (t) => {
16
- t.test('publish multi tags', async (tt) => {
17
- const build_id = crypto.randomBytes(5).toString('hex')
18
- const context = {
19
- env: {
20
- ...process.env
21
- , DOCKER_REGISTRY_USER: 'iamweasel'
22
- , DOCKER_REGISTRY_PASSWORD: 'secretsquirrel'
23
- }
24
- , cwd: fixturedir
25
- , nextRelease: {version: '2.0.0'}
26
- , lastRelease: {version: '1.5.0'}
27
- , logger: {
28
- success: sinon.stub()
29
- , info: sinon.stub()
30
- , debug: sinon.stub()
31
- }
32
- }
33
-
34
- const config = await buildConfig(build_id, {
35
- dockerRegistry: DOCKER_REGISTRY_HOST
36
- , dockerProject: 'docker-publish'
37
- , dockerImage: 'real'
38
- , dockerTags: ['{previous.major}-previous', '{major}-foobar', '{version}']
39
- , dockerFile: 'docker/Dockerfile.publish'
40
- }, context)
41
-
42
- const auth = await verify(config, context)
43
- tt.ok(auth, `authentication to ${DOCKER_REGISTRY_HOST} suceeds`)
44
-
45
- const image = await prepare(config, context)
46
- tt.on('end', () => {
47
- image.clean()
48
- })
49
-
50
- // removes images when done
51
- await publish(config, context)
52
-
53
- const tags = ['1-previous', '2-foobar', '2.0.0']
54
- for (const tag of tags) {
55
- const expected = `${image.repo}:${tag}`
56
- const {stdout} = await execa('docker', ['pull', expected, '-q'])
57
- tt.equal(expected, stdout, `${expected} successfully published`)
58
- }
59
- })
60
- }).catch(threw)
@@ -1,92 +0,0 @@
1
- 'use strict'
2
-
3
- const execa = require('execa')
4
- const {test, threw} = require('tap')
5
- const git = require('../common/git/index.js')
6
- const DOCKER_REGISTRY_HOST = process.env.TEST_DOCKER_REGISTRY || 'localhost:5000'
7
-
8
- const stringify = JSON.stringify
9
-
10
- test('docker release', async (t) => {
11
- const cwd = t.testdir({
12
- 'package.json': stringify({
13
- name: 'service-meta-package'
14
- , version: '0.0.0-development'
15
- , scripts: {
16
- 'test-release': 'semantic-release'
17
- }
18
- , release: {
19
- ci: true
20
- , npmPublish: false
21
- , branches: ['main']
22
- , dockerRegistry: DOCKER_REGISTRY_HOST
23
- , dockerProject: 'docker-release'
24
- , dockerImage: 'fake'
25
- , dockerArgs: {
26
- SAMPLE_THING: '{type}.{version}'
27
- , GIT_REF: '{git_sha}-{git_tag}'
28
- , BUILD_DATE: '{now}'
29
- }
30
- , plugins: [
31
- '@semantic-release/commit-analyzer'
32
- , '@semantic-release/release-notes-generator'
33
- , '@semantic-release/npm'
34
- , '@codedependant/semantic-release-docker'
35
- ]
36
- }
37
- , devDependencies: {
38
- 'semantic-release': '*'
39
- , '@semantic-release/commit-analyzer': '*'
40
- , '@semantic-release/release-notes-generator': '*'
41
- , '@semantic-release/npm': '*'
42
- , '@codedependant/semantic-release-docker': 'file:../../../'
43
- }
44
- })
45
- , Dockerfile: 'FROM debian:buster-slim\n\nRUN ls -alh'
46
- , '.gitignore': 'node_modules/'
47
- })
48
-
49
- await git.init(cwd)
50
- t.comment('git repo initialized')
51
- await git.add(cwd)
52
- await git.commit(cwd, 'feat: initial release')
53
-
54
- const origin = await git.initOrigin(cwd)
55
- t.comment(`repository: ${cwd}`)
56
- t.comment(`origin: ${origin}`)
57
-
58
- {
59
- const stream = execa('npm', [
60
- 'install'
61
- ], {
62
- cwd: cwd
63
- , env: {
64
- BRANCH_NAME: 'main'
65
- , CI_BRANCH: 'main'
66
- , CI: 'true'
67
- , GITHUB_REF: 'refs/heads/main'
68
- , DOCKER_REGISTRY_USER: 'iamweasel'
69
- , DOCKER_REGISTRY_PASSWORD: 'secretsquirrel'
70
- }
71
- })
72
-
73
- stream.stdout.pipe(process.stdout)
74
- await stream
75
- }
76
-
77
- const stream = execa('npm', [
78
- 'run'
79
- , 'test-release'
80
- , `--repositoryUrl=${origin}`], {
81
- cwd: cwd
82
- , env: {
83
- BRANCH_NAME: 'main'
84
- , CI_BRANCH: 'main'
85
- , CI: 'true'
86
- , GITHUB_REF: 'refs/heads/main'
87
- }
88
- })
89
- stream.stdout.pipe(process.stdout)
90
- await stream
91
-
92
- }).catch(threw)
@@ -1,206 +0,0 @@
1
- 'use strict'
2
-
3
- const crypto = require('crypto')
4
- const sinon = require('sinon')
5
- const {test, threw} = require('tap')
6
-
7
- const buildConfig = require('../../lib/build-config.js')
8
- const verify = require('../../lib/verify.js')
9
- const DOCKER_REGISTRY_HOST = process.env.TEST_DOCKER_REGISTRY || 'localhost:5000'
10
-
11
- test('steps::verify', async (t) => {
12
- const build_id = crypto.randomBytes(5).toString('hex')
13
- t.test('docker password, no username', async (tt) => {
14
- const context = {
15
- env: {
16
- ...process.env
17
- , DOCKER_REGISTRY_PASSWORD: 'abc123'
18
- }
19
- , cwd: process.cwd()
20
- , logger: {
21
- success: sinon.stub()
22
- , info: sinon.stub()
23
- }
24
- }
25
- const config = await buildConfig(build_id, {}, context)
26
- await tt.rejects(
27
- verify(config, context)
28
- , {
29
- message: /docker authentication failed/i
30
- , code: 'EAUTH'
31
- , details: /DOCKER_REGISTRY_USER AND DOCKER_REGISTRY_PASSWORD must be set/ig
32
- }
33
- )
34
- })
35
-
36
- t.test('docker password, no username', async (tt) => {
37
- const context = {
38
- env: {
39
- ...process.env
40
- , DOCKER_REGISTRY_USER: 'abc123'
41
- }
42
- , cwd: process.cwd()
43
- , logger: {
44
- success: sinon.stub()
45
- , info: sinon.stub()
46
- }
47
- }
48
- const config = await buildConfig(build_id, {}, context)
49
- await tt.rejects(
50
- verify(config, context)
51
- , {
52
- message: /docker authentication failed/i
53
- , code: 'EAUTH'
54
- , details: /DOCKER_REGISTRY_USER AND DOCKER_REGISTRY_PASSWORD must be set/ig
55
- }
56
- )
57
- })
58
-
59
- t.test('docker USER/PASS succeeds', async (tt) => {
60
- const context = {
61
- env: {
62
- ...process.env
63
- , DOCKER_REGISTRY_USER: 'iamweasel'
64
- , DOCKER_REGISTRY_PASSWORD: 'secretsquirrel'
65
- }
66
- , cwd: process.cwd()
67
- , logger: {
68
- success: sinon.stub()
69
- , info: sinon.stub()
70
- }
71
- }
72
- const config = await buildConfig(build_id, {
73
- dockerRegistry: DOCKER_REGISTRY_HOST
74
- }, context)
75
- tt.resolves(verify(config, context))
76
- })
77
-
78
- t.test('docker USER / GITHUB_TOKEN succeeds', async (tt) => {
79
- const context = {
80
- env: {
81
- ...process.env
82
- , DOCKER_REGISTRY_USER: 'iamweasel'
83
- , GITHUB_TOKEN: 'secretsquirrel'
84
- }
85
- , cwd: process.cwd()
86
- , logger: {
87
- success: sinon.stub()
88
- , info: sinon.stub()
89
- }
90
- }
91
- const config = await buildConfig(build_id, {
92
- dockerRegistry: DOCKER_REGISTRY_HOST
93
- }, context)
94
- tt.resolves(verify(config, context))
95
- })
96
-
97
- t.test('docker no login', async (tt) => {
98
- const context = {
99
- env: {
100
- ...process.env
101
- , DOCKER_REGISTRY_USER: 'iamweasel'
102
- }
103
- , cwd: process.cwd()
104
- , logger: {
105
- success: sinon.stub()
106
- , info: sinon.stub()
107
- }
108
- }
109
- const config = await buildConfig(build_id, {
110
- dockerRegistry: DOCKER_REGISTRY_HOST
111
- , dockerLogin: false
112
- }, context)
113
- tt.resolves(verify(config, context))
114
- })
115
-
116
- t.test('docker password, no username', async (tt) => {
117
- const context = {
118
- env: {
119
- ...process.env
120
- , DOCKER_REGISTRY_PASSWORD: 'abc123'
121
- , DOCKER_REGISTRY_USER: 'abc123'
122
- }
123
- , cwd: process.cwd()
124
- , logger: {
125
- success: sinon.stub()
126
- , info: sinon.stub()
127
- }
128
- }
129
- const config = await buildConfig(build_id, {}, context)
130
- tt.rejects(
131
- verify(config, context)
132
- , {
133
- message: /docker authentication failed/i
134
- , code: 'EAUTH'
135
- , details: /authentication to dockerhub failed/ig
136
- }
137
- )
138
- })
139
-
140
- t.test('No auth provided succeed', async (tt) => {
141
- const context = {
142
- env: {
143
- ...process.env
144
- }
145
- , cwd: process.cwd()
146
- , logger: {
147
- success: sinon.stub()
148
- , info: sinon.stub()
149
- }
150
- }
151
-
152
- const config = await buildConfig(build_id, {}, context)
153
- tt.strictEqual(await verify(config, context), false, 'auth step skipped')
154
- })
155
-
156
- t.test('unable to collect image name', async (tt) => {
157
- const context = {
158
- env: {
159
- ...process.env
160
- }
161
- , cwd: __dirname
162
- , logger: {
163
- success: sinon.stub()
164
- , info: sinon.stub()
165
- }
166
- }
167
-
168
- const config = await buildConfig(build_id, {
169
- dockerRegistry: DOCKER_REGISTRY_HOST
170
- }, context)
171
- tt.rejects(verify(config, context), {
172
- code: 'EINVAL'
173
- , name: 'SemanticReleaseError'
174
- , details: new RegExp(
175
- 'image name parsed from package.json name if possible. '
176
- + 'or via the "dockerImage" option'
177
- , 'gi'
178
- )
179
- })
180
- })
181
-
182
- t.test('invalid docker file location', async (tt) => {
183
- const context = {
184
- env: {
185
- ...process.env
186
- }
187
- , cwd: process.cwd()
188
- , logger: {
189
- success: sinon.stub()
190
- , info: sinon.stub()
191
- }
192
- }
193
-
194
- const config = await buildConfig(build_id, {
195
- dockerRegistry: DOCKER_REGISTRY_HOST
196
- , dockerFile: 'Notafile'
197
- }, context)
198
-
199
- await tt.rejects(verify(config, context), {
200
- code: 'ENOENT'
201
- , name: 'SemanticReleaseError'
202
- , details: /relative to pwd/gi
203
- })
204
-
205
- })
206
- }).catch(threw)
@@ -1,167 +0,0 @@
1
- 'use strict'
2
-
3
- const path = require('path')
4
- const {test, threw} = require('tap')
5
- const buildConfig = require('../../lib/build-config.js')
6
-
7
- test('build-config', async (t) => {
8
- t.testdir({
9
- standard: {
10
- 'package.json': JSON.stringify({name: 'this-is-not-scoped'})
11
- }
12
- , scoped: {
13
- 'package.json': JSON.stringify({name: '@scope/this-is-scoped'})
14
- }
15
- , workspace: {
16
- one: {
17
- 'package.json': JSON.stringify({name: '@internal/package'})
18
- }
19
- }
20
- })
21
-
22
- t.test('standard package', async (tt) => {
23
- const config = await buildConfig('id', {
24
- }, {
25
- cwd: path.join(t.testdirName, 'standard')
26
- })
27
- tt.match(config, {
28
- dockerfile: 'Dockerfile'
29
- , publish: true
30
- , nocache: false
31
- , tags: ['latest', '{major}-latest', '{version}']
32
- , args: {
33
- SRC_DIRECTORY: 'standard'
34
- , TARGET_PATH: '.'
35
- , NPM_PACKAGE_NAME: 'this-is-not-scoped'
36
- , NPM_PACKAGE_SCOPE: null
37
- , CONFIG_NAME: 'this-is-not-scoped'
38
- , CONFIG_PROJECT: null
39
- }
40
- , pkg: Object
41
- , registry: null
42
- , name: 'this-is-not-scoped'
43
- , project: null
44
- , build: 'id'
45
- , context: '.'
46
- })
47
- })
48
-
49
- t.test('nested workspace: target resolution', async (tt) => {
50
- const config = await buildConfig('id', {
51
- }, {
52
- options: {
53
- root: t.testdirName
54
- }
55
- , cwd: path.join(t.testdirName, 'workspace', 'one')
56
- })
57
- tt.match(config, {
58
- dockerfile: 'Dockerfile'
59
- , nocache: false
60
- , publish: true
61
- , tags: ['latest', '{major}-latest', '{version}']
62
- , args: {
63
- SRC_DIRECTORY: 'one'
64
- , TARGET_PATH: 'workspace/one'
65
- , NPM_PACKAGE_NAME: 'package'
66
- , NPM_PACKAGE_SCOPE: 'internal'
67
- , CONFIG_NAME: 'package'
68
- , CONFIG_PROJECT: 'internal'
69
- }
70
- , pkg: Object
71
- , registry: null
72
- , name: 'package'
73
- , project: 'internal'
74
- , build: 'id'
75
- , context: '.'
76
- })
77
- })
78
-
79
- t.test('scoped package', async (tt) => {
80
- {
81
- const config = await buildConfig('id', {
82
- }, {
83
- cwd: path.join(t.testdirName, 'scoped')
84
- })
85
- tt.match(config, {
86
- dockerfile: 'Dockerfile'
87
- , nocache: false
88
- , tags: ['latest', '{major}-latest', '{version}']
89
- , args: {
90
- SRC_DIRECTORY: 'scoped'
91
- , TARGET_PATH: '.'
92
- , NPM_PACKAGE_NAME: '@scope/this-is-scoped'
93
- , NPM_PACKAGE_SCOPE: 'scope'
94
- , CONFIG_NAME: 'this-is-scoped'
95
- , CONFIG_PROJECT: 'scope'
96
- }
97
- , pkg: Object
98
- , registry: null
99
- , name: 'this-is-scoped'
100
- , project: 'scope'
101
- , build: 'id'
102
- , context: '.'
103
- })
104
- }
105
-
106
- {
107
- const config = await buildConfig('id', {
108
- dockerProject: 'kittens'
109
- , dockerImage: 'override'
110
- , dockerFile: 'Dockerfile.test'
111
- , dockerPublish: false
112
- }, {
113
- cwd: path.join(t.testdirName, 'scoped')
114
- })
115
- tt.match(config, {
116
- dockerfile: 'Dockerfile.test'
117
- , publish: false
118
- , nocache: false
119
- , tags: ['latest', '{major}-latest', '{version}']
120
- , args: {
121
- SRC_DIRECTORY: 'scoped'
122
- , TARGET_PATH: '.'
123
- , NPM_PACKAGE_NAME: '@scope/this-is-scoped'
124
- , NPM_PACKAGE_SCOPE: 'scope'
125
- , CONFIG_NAME: 'override'
126
- , CONFIG_PROJECT: 'kittens'
127
- }
128
- , pkg: Object
129
- , registry: null
130
- , name: 'override'
131
- , project: 'kittens'
132
- , build: 'id'
133
- , context: '.'
134
- })
135
- }
136
-
137
- {
138
- const config = await buildConfig('id', {
139
- dockerProject: null
140
- , dockerImage: 'override'
141
- , dockerFile: 'Dockerfile.test'
142
- , dockerTags: 'latest,{major}-latest , fake, {version}'
143
- }, {
144
- cwd: path.join(t.testdirName, 'scoped')
145
- })
146
- tt.match(config, {
147
- dockerfile: 'Dockerfile.test'
148
- , nocache: false
149
- , tags: ['latest', '{major}-latest', 'fake', '{version}']
150
- , args: {
151
- SRC_DIRECTORY: 'scoped'
152
- , TARGET_PATH: '.'
153
- , NPM_PACKAGE_NAME: '@scope/this-is-scoped'
154
- , NPM_PACKAGE_SCOPE: 'scope'
155
- , CONFIG_NAME: 'override'
156
- , CONFIG_PROJECT: null
157
- }
158
- , pkg: Object
159
- , registry: null
160
- , name: 'override'
161
- , project: null
162
- , build: 'id'
163
- , context: '.'
164
- })
165
- }
166
- })
167
- }).catch(threw)
@@ -1,63 +0,0 @@
1
- 'use strict'
2
-
3
- const {test, threw} = require('tap')
4
- const buildConfig = require('../../lib/build-config.js')
5
- const buildTemplateVars = require('../../lib/build-template-vars.js')
6
-
7
- test('buildTemplateVars', async (t) => {
8
- const cwd = t.testdir({
9
- 'package.json': JSON.stringify({
10
- name: 'template-vars'
11
- })
12
- })
13
- const context = {
14
- cwd
15
- , nextRelease: {
16
- version: '1.0.0'
17
- , gitTag: 'v1.0.0'
18
- , gitHead: 'abcdefgh'
19
- , type: 'major'
20
- , notes: 'test it'
21
- }
22
- }
23
- const opts = await buildConfig('abacadaba', {
24
- dockerArgs: {
25
- TEMPLATE_VALUE: '{type}.{version}'
26
- , BOOLEAN_VALUE: true
27
- , NULL_VALUE: null
28
- }
29
- }, context)
30
-
31
- const vars = buildTemplateVars(opts, context)
32
- t.match(vars, {
33
- release_type: 'major'
34
- , release_notes: 'test it'
35
- , version: '1.0.0'
36
- , git_sha: 'abcdefgh'
37
- , git_tag: 'v1.0.0'
38
- , pkg: {name: 'template-vars'}
39
- , major: 1
40
- , minor: 0
41
- , patch: 0
42
- , version: '1.0.0'
43
- , next: {
44
- major: 1
45
- , minor: 0
46
- , patch: 0
47
- , version: '1.0.0'
48
- }
49
- , args: {
50
- SRC_DIRECTORY: String
51
- , TARGET_PATH: String
52
- , NPM_PACKAGE_NAME: 'template-vars'
53
- , NPM_PACKAGE_SCOPE: null
54
- , CONFIG_NAME: String
55
- , CONFIG_PROJECT: null
56
- , GIT_SHA: 'abcdefgh'
57
- , GIT_TAG: 'v1.0.0'
58
- , TEMPLATE_VALUE: '{type}.{version}'
59
- , BOOLEAN_VALUE: true
60
- , NULL_VALUE: null
61
- }
62
- }, 'expected template values')
63
- }).catch(threw)