-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathrestore.js
More file actions
67 lines (61 loc) · 1.92 KB
/
restore.js
File metadata and controls
67 lines (61 loc) · 1.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
const path = require('path')
const { reporter, exec, chalk } = require('@dhis2/cli-helpers-engine')
const { makeComposeProject, substituteVersion } = require('../../common.js')
const downloadDatabase = async ({ cache, dbVersion, update, url }) => {
const ext = '.sql.gz' //dbUrl.endsWith('.gz') ? '.gz' : '.sql'
const cacheName = `cluster-db-${dbVersion}${ext}`
if (!update && (await cache.exists(cacheName))) {
reporter.info(
`Found cached database version ${chalk.bold(
dbVersion
)}, use --update to re-download`
)
return cache.getCacheLocation(cacheName)
} else {
const dbUrl = substituteVersion(url, dbVersion)
reporter.info(
`Downloading demo database version ${chalk.bold(dbVersion)}...`
)
try {
return await cache.get(dbUrl, cacheName, {
force: update,
raw: true,
})
} catch (e) {
reporter.debugErr('[downloadDatabase]', e)
throw new Error('Failed to fetch demo database')
}
}
}
const restoreFromFile = async ({ cacheLocation, dbFile, name }) => {
reporter.info(`Restoring database (this may take some time)...`)
reporter.debug(`Restoring from database dump ${chalk.bold(dbFile)}`)
await exec({
cmd: './scripts/seed.sh',
cwd: cacheLocation,
args: [dbFile],
pipe: false,
env: {
DOCKER_COMPOSE: `docker-compose -p ${makeComposeProject(name)}`,
},
})
}
module.exports = async ({
cacheLocation,
dbVersion,
name,
path: dbPath,
url,
update,
...argv
}) => {
const dbFile = dbPath
? path.resolve(dbPath)
: await downloadDatabase({
cache: argv.getCache(),
dbVersion,
url,
update,
})
await restoreFromFile({ cacheLocation, dbFile, name })
}