UNPKG

@puls-atlas/cli

Version:

The Puls Atlas CLI tool for managing Atlas projects

80 lines 2.63 kB
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; };