bitbucket-env-manager
Version:
Deploys Bitbucket Environment
102 lines (79 loc) • 2.38 kB
JavaScript
const { text, note, spinner, isCancel, cancel, log } = require('@clack/prompts');
const fs = require('fs-extra');
const path = require('path');
const color = require('picocolors');
const { paths, names } = require('./config');
const { saveOauthEnvFile } = require('./helpers');
const runInit = async () => {
note('Configure your Bitbucket OAuth credentials', 'Setup');
const OAUTH_CLIENT = await text({
message: 'Enter your OAuth Client ID',
placeholder: 'xxxxxxxxxxxxxxx',
validate: (value) => {
if (!value) return 'OAuth Client ID is required';
},
});
if (isCancel(OAUTH_CLIENT)) {
cancel('Setup cancelled.');
return;
}
const OAUTH_SECRET = await text({
message: 'Enter your OAuth Secret',
placeholder: 'xxxxxxxxxxxxxxx',
validate: (value) => {
if (!value) return 'OAuth Secret is required';
},
});
if (isCancel(OAUTH_SECRET)) {
cancel('Setup cancelled.');
return;
}
const WORKSPACE = await text({
message: 'Enter your Bitbucket Workspace',
placeholder: 'my-workspace',
validate: (value) => {
if (!value) return 'Workspace is required';
},
});
if (isCancel(WORKSPACE)) {
cancel('Setup cancelled.');
return;
}
const s = spinner();
s.start('Saving credentials');
saveOauthEnvFile({ OAUTH_CLIENT, OAUTH_SECRET, WORKSPACE });
s.stop(color.green('Credentials saved!'));
};
const runGenerate = async () => {
note('Generate a new project template', 'Generate');
const folderName = await text({
message: 'Choose a folder name',
placeholder: names.generatedProjectFolder,
defaultValue: names.generatedProjectFolder,
});
if (isCancel(folderName)) {
cancel('Generation cancelled.');
return;
}
if (!folderName) {
throw new Error('No folder name provided');
}
const mainFolderPath = path.join(process.cwd(), folderName);
if (fs.existsSync(mainFolderPath)) {
throw new Error('Folder already exists!');
}
const s = spinner();
s.start('Creating project structure');
fs.mkdirSync(mainFolderPath);
fs.copySync(paths.templateFolder, mainFolderPath);
s.stop(color.green('Project created!'));
note(
`Configure ${color.cyan('project_envs/*/info.json')} with your\nBitbucket workspace and repo_slug`,
'Next Steps'
);
};
module.exports = {
runInit,
runGenerate,
};