64 lines
1.8 KiB
JavaScript
64 lines
1.8 KiB
JavaScript
|
const { InitTypes, AnalyticsEvents } = require("../constants")
|
||
|
const { confirmation } = require("../questions")
|
||
|
const { captureEvent } = require("../events")
|
||
|
const makeFiles = require("./makeFiles")
|
||
|
const axios = require("axios")
|
||
|
const { parseEnv } = require("../utils")
|
||
|
const { checkDockerConfigured, downloadFiles } = require("./utils")
|
||
|
const { watchPlugins } = require("./watch")
|
||
|
|
||
|
const DO_USER_DATA_URL = "http://169.254.169.254/metadata/v1/user-data"
|
||
|
|
||
|
async function getInitConfig(type, isQuick) {
|
||
|
const config = isQuick ? makeFiles.QUICK_CONFIG : {}
|
||
|
if (type === InitTypes.DIGITAL_OCEAN) {
|
||
|
try {
|
||
|
const output = await axios.get(DO_USER_DATA_URL)
|
||
|
const response = parseEnv(output.data)
|
||
|
for (let [key, value] of Object.entries(makeFiles.ConfigMap)) {
|
||
|
if (response[key]) {
|
||
|
config[value] = response[key]
|
||
|
}
|
||
|
}
|
||
|
} catch (err) {
|
||
|
// don't need to handle error, just don't do anything
|
||
|
}
|
||
|
}
|
||
|
return config
|
||
|
}
|
||
|
|
||
|
exports.init = async opts => {
|
||
|
let type, isSingle, watchDir
|
||
|
if (typeof opts === "string") {
|
||
|
type = opts
|
||
|
} else {
|
||
|
type = opts.init
|
||
|
isSingle = opts.single
|
||
|
watchDir = opts.watchPluginDir
|
||
|
}
|
||
|
const isQuick = type === InitTypes.QUICK || type === InitTypes.DIGITAL_OCEAN
|
||
|
await checkDockerConfigured()
|
||
|
if (!isQuick) {
|
||
|
const shouldContinue = await confirmation(
|
||
|
"This will create multiple files in current directory, should continue?"
|
||
|
)
|
||
|
if (!shouldContinue) {
|
||
|
console.log("Stopping.")
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
captureEvent(AnalyticsEvents.SelfHostInit, {
|
||
|
type,
|
||
|
})
|
||
|
const config = await getInitConfig(type, isQuick)
|
||
|
if (!isSingle) {
|
||
|
await downloadFiles()
|
||
|
await makeFiles.makeEnv(config)
|
||
|
} else {
|
||
|
await makeFiles.makeSingleCompose(config)
|
||
|
if (watchDir) {
|
||
|
await watchPlugins(watchDir)
|
||
|
}
|
||
|
}
|
||
|
}
|