@puls-atlas/cli
Version:
The Puls Atlas CLI tool for managing Atlas projects
80 lines • 2.63 kB
JavaScript
import inquirer from 'inquirer';
import { getRequiredFirebasercProjects } from '../../utils/firebase.js';
import { getTasksLocations } from '../../utils/gcloud.js';
import { logger } from '../../utils/logger.js';
import { execSync } from '../../utils/index.js';
import { createTaskQueue as createCloudTaskQueue } from '../../utils/taskQueue.js';
const QUEUES = ['puls-atlas-default', 'puls-atlas-message-center', 'puls-atlas-export-import', 'puls-atlas-search'];
export const confirmCreateTaskQueue = async ({
execSyncImpl = execSync,
getTasksLocationsImpl = getTasksLocations,
loggerImpl = logger,
projectId,
promptImpl = inquirer.prompt,
queue
}) => {
const {
create
} = await promptImpl([{
type: 'confirm',
name: 'create',
default: false,
message: `Do you want to create the Cloud Tasks queue ${queue} ` + `for project ${projectId}?`
}]);
if (!create) {
return 'skipped';
}
const locations = await getTasksLocationsImpl(projectId);
const {
location
} = await promptImpl([{
type: 'select',
name: 'location',
default: locations.find(loc => loc.startsWith('europe-west1')) || locations[0],
message: `Select the region for the Cloud Tasks queue ${queue}.\n` + 'Choose the same region where App Engine is deployed to reduce latency.',
choices: locations
}]);
const spinner = loggerImpl.spinner(`Creating Cloud Tasks queue ${queue}...`);
try {
await createCloudTaskQueue(queue, location.split(' ')[0].toLowerCase(), projectId, {
execSyncImpl
});
} catch (error) {
spinner.fail(`Failed to create Cloud Tasks queue ${queue}: ${error.message}`);
throw error;
}
spinner.succeed(`Cloud Tasks queue ${queue} created successfully.`);
return 'created';
};
export default async (dependencies = {}) => {
const {
execSync: execSyncImpl = execSync,
getRequiredFirebasercProjects: getRequiredFirebasercProjectsImpl = getRequiredFirebasercProjects,
getTasksLocations: getTasksLocationsImpl = getTasksLocations,
logger: loggerImpl = logger,
prompt: promptImpl = inquirer.prompt
} = dependencies;
const {
developmentProjectId,
productionProjectId
} = getRequiredFirebasercProjectsImpl();
for (const queue of QUEUES) {
await confirmCreateTaskQueue({
execSyncImpl,
getTasksLocationsImpl,
loggerImpl,
projectId: productionProjectId,
promptImpl,
queue
});
await confirmCreateTaskQueue({
execSyncImpl,
getTasksLocationsImpl,
loggerImpl,
projectId: developmentProjectId,
promptImpl,
queue
});
}
return true;
};