blob: 1efab1b40f71f9543d9baec071508df0d4cb675b [file]
const prompt = require('prompt-sync')({ sigint: true })
const fs = require('fs')
const path = require('path')
const readline = require('readline')
const groupConfig = (configArr, isSample) => {
const arr = []
configArr.forEach(name => {
arr.push(path.join(__dirname, `../config/${name}${isSample ? '.sample' : ''}.js`))
})
return arr
}
// Main Config Vars
const confirmationString = '(y/n) '
const configNames = ['docker', 'local', 'plugins']
const allConfig = groupConfig(configNames, false)
const allConfigSample = groupConfig(configNames, true)
module.exports = {
welcomePrompt () {
console.log('*******************************************************')
console.log(
`██ █████ ██ ██ ███████
██ ██ ██ ██ ██ ██
██ ███████ █████ █████
██ ██ ██ ██ ██ ██
███████ ██ ██ ██ ██ ███████`
)
console.log('')
console.log('... by Merico (https://meri.co)')
console.log('*******************************************************')
},
checkAndCreateConfig () {
const createConfig = prompt(
`➤➤➤ Would you like us to create config files for you? ${confirmationString}`
)
if (createConfig === 'y') {
allConfig.forEach((path, i) => {
if (fs.existsSync(path)) {
// We have a config file, skip
console.log(`Config detected for ${path}`)
} else {
// We need to create a new config file from example
console.log(`➤➤➤ Creating new Sample ${allConfig[i]}`)
fs.copyFile(allConfigSample[i], allConfig[i], (err) => {
if (err) throw err
})
}
})
} else {
process.exit(1)
}
},
askForDataSourceIds () {
// Collect replacement vars in local.js
console.log('')
console.log(
'\x1b[36m%s\x1b[0m',
`❕ TIP: You can read more on how to get your jira board id here:
\nhttps://github.com/merico-dev/lake/tree/main/src/plugins/jira-pond#find-board-id \n`
)
const jiraBoardId = prompt('➤➤➤ What is your jira board id? ')
console.log('')
console.log(
'\x1b[36m%s\x1b[0m',
`❕ TIP: You can read more on how to get your gitlab project id here:
\nhttps://github.com/merico-dev/lake/tree/main/src/plugins/gitlab-pond#finding-project-id \n`
)
const gitlabProjectId = prompt('➤➤➤ What is your gitlab project id? ')
return { gitlabProjectId, jiraBoardId }
},
openReadSyncLocal (pathSample, path, { gitlabProjectId, jiraBoardId }) {
const readInterface = readline.createInterface({
input: fs.createReadStream(pathSample),
output: false,
console: false
})
const writeStream = fs.createWriteStream(path)
// Replace lines in local.js
readInterface.on('line', (line) => {
// Jira board ID
if (line.match("'<your-board-id>'")) {
writeStream.write(line.replace("'<your-board-id>'", jiraBoardId) + '\n')
} else if (line.match("'<your-gitlab-project-id>'")) {
writeStream.write(line.replace("'<your-gitlab-project-id>'", gitlabProjectId) + '\n')
} else {
writeStream.write(line + '\n')
}
})
},
openReadSyncDocker (pathSample, path, { gitlabProjectId, jiraBoardId }) {
const readInterface = readline.createInterface({
input: fs.createReadStream(pathSample),
output: false,
console: false
})
const writeStream = fs.createWriteStream(path)
// const dockerWriteStream = fs.createWriteStream(path)
// Replace lines in local.js
readInterface.on('line', (line) => {
// Jira board ID
if (line.match("'<your-board-id>'")) {
writeStream.write(line.replace("'<your-board-id>'", jiraBoardId) + '\n')
} else if (line.match("'<your-gitlab-project-id>'")) {
writeStream.write(
line.replace("'<your-gitlab-project-id>'", gitlabProjectId) + '\n'
)
} else {
writeStream.write(line + '\n')
}
})
},
openReadSyncPlugins (pathSample, path) {
const readInterface = readline.createInterface({
input: fs.createReadStream(pathSample),
output: false,
console: false
})
const writeStream = fs.createWriteStream(path)
// Collect replacement vars in plugins.js
console.log('')
console.log('\x1b[36m%s\x1b[0m',
`❕ TIP: You can read more on how to get jira token here:
\nhttps://github.com/merico-dev/lake/tree/main/src/plugins/jira-pond#generating-api-token \n`)
const jiraToken = prompt('➤➤➤ What is your jira token? ')
console.log('\x1b[36m%s\x1b[0m',
'❕ TIP: This is the email you use to login to Jira')
const jiraEmail = prompt('➤➤➤ What is your jira user email? ')
console.log(
'\x1b[36m%s\x1b[0m',
'❕ TIP: This is the base url for jira that you use. IE: for this url: https://merico.atlassian.net/secure/RapidBoard.jspa?rapidView=8&projectKey=EE, you would use https://merico.atlassian.net'
)
const jiraHost = prompt('➤➤➤ What is your jira host url? ')
console.log('')
console.log(
'\x1b[36m%s\x1b[0m',
`❕ TIP: You can read more on how to get your github token here:
\nhttps://github.com/merico-dev/lake/tree/main/src/plugins/gitlab-pond#create-a-gitlab-api-token \n`
)
const gitlabToken = prompt('➤➤➤ What is your gitlab token? ')
// Replace lines in plugins.js
readInterface.on('line', (line) => {
// Jira board ID
if (line.match('<your-jira-token>')) {
writeStream.write(line.replace('<your-jira-token>', jiraToken) + '\n')
} else if (line.match('<your-gitlab-token>')) {
writeStream.write(line.replace('<your-gitlab-token>', gitlabToken) + '\n')
} else if (line.match('<your-jira-email>')) {
writeStream.write(line.replace('<your-jira-email>', jiraEmail) + '\n')
} else if (line.match('<your-jira-host>')) {
writeStream.write(line.replace('<your-jira-host>', jiraHost) + '\n')
} else {
writeStream.write(line + '\n\n')
}
})
},
main () {
module.exports.welcomePrompt()
module.exports.checkAndCreateConfig()
const ids = module.exports.askForDataSourceIds()
module.exports.openReadSyncDocker(allConfigSample[0], allConfig[0], ids) // docker.js
module.exports.openReadSyncLocal(allConfigSample[1], allConfig[1], ids) // local.js
module.exports.openReadSyncPlugins(allConfigSample[2], allConfig[2]) // plugins.js
}
}
module.exports.main()