UNPKG

1.8 kBJavaScriptView Raw
1/*
2* @adonisjs/mrm-preset
3*
4* (c) Harminder Virk <virk@adonisjs.com>
5*
6* For the full copyright and license information, please view the LICENSE
7* file that was distributed with this source code.
8*/
9
10const { yaml, deleteFiles } = require('mrm-core')
11const mergeConfig = require('../utils/mergeConfig')
12
13function 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 * Define build for each nodejs version. Later we will use workflows to
31 * run each version
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
75task.description = 'Adds .circleci/config.yml file'
76module.exports = task