1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 | const { yaml, deleteFiles } = require('mrm-core')
|
11 | const mergeConfig = require('../utils/mergeConfig')
|
12 |
|
13 | function task (config) {
|
14 | mergeConfig(config, {
|
15 | services: ['circleci'],
|
16 | minNodeVersion: 'latest',
|
17 | core: false
|
18 | })
|
19 |
|
20 | const hasCircleCi = config.services.indexOf('circleci') > -1
|
21 | if (!hasCircleCi) {
|
22 | deleteFiles(['.circleci/config.yml'])
|
23 | return
|
24 | }
|
25 |
|
26 | const circleCiFile = yaml('.circleci/config.yml').set('version', 2)
|
27 | const versions = config.minNodeVersion === 'latest' ? ['latest'] : [config.minNodeVersion, 'latest']
|
28 |
|
29 | |
30 |
|
31 |
|
32 |
|
33 | const jobs = versions.reduce((result, version) => {
|
34 | result[`build_${version}`] = {
|
35 | docker: [{
|
36 | image: `circleci/node:${version}`
|
37 | }],
|
38 | working_directory: '~/app',
|
39 | steps: [
|
40 | 'checkout',
|
41 | {
|
42 | restore_cache: {
|
43 | keys: ['v1-dependencies-{{ checksum "package.json" }}', 'v1-dependencies-']
|
44 | }
|
45 | },
|
46 | {
|
47 | run: 'npm install'
|
48 | },
|
49 | {
|
50 | save_cache: {
|
51 | paths: ['node_modules'],
|
52 | key: 'v1-dependencies-{{ checksum "package.json" }}'
|
53 | }
|
54 | },
|
55 | {
|
56 | run: 'npm test'
|
57 | }
|
58 | ]
|
59 | }
|
60 |
|
61 | return result
|
62 | }, {})
|
63 |
|
64 | circleCiFile.set('jobs', jobs)
|
65 | circleCiFile.set('workflows', {
|
66 | version: 2,
|
67 | workflow: {
|
68 | jobs: versions.map((version) => `build_${version}`)
|
69 | }
|
70 | })
|
71 |
|
72 | circleCiFile.save()
|
73 | }
|
74 |
|
75 | task.description = 'Adds .circleci/config.yml file'
|
76 | module.exports = task
|