UNPKG

@mondaycom/apps-cli

Version:

A cli tool to manage apps (and monday-code projects) in monday.com

70 lines (69 loc) 3.29 kB
import { Flags } from '@oclif/core'; import { StatusCodes } from 'http-status-codes'; import { AuthenticatedCommand } from '../../commands-base/authenticated-command.js'; import { APP_VERSION_ID_TO_ENTER, VAR_UNKNOWN } from '../../consts/messages.js'; import { DynamicChoicesService } from '../../services/dynamic-choices-service.js'; import { getAppVersionDeploymentStatus } from '../../services/push-service.js'; import { getMondayCodeBuild } from '../../services/app-builds-service.js'; import { HttpError } from '../../types/errors/index.js'; import logger from '../../utils/logger.js'; import { addRegionToFlags, chooseRegionIfNeeded, getRegionFromString } from '../../utils/region.js'; const DEBUG_TAG = 'code_status'; const printDeploymentStatus = (appVersionId, deploymentStatus) => { const { deployment, status, error } = deploymentStatus; const url = deployment?.url || 'none'; const liveUrl = deployment?.liveUrl; const errorMessage = error?.message; const tableData = { id: appVersionId, status, url, ...(liveUrl && { liveUrl }), ...(errorMessage && { errorMessage }), }; logger.table([tableData]); }; export default class Status extends AuthenticatedCommand { static description = 'Status of a specific project hosted on monday-code.'; static examples = ['<%= config.bin %> <%= command.id %> -i APP_VERSION_ID']; static flags = Status.serializeFlags(addRegionToFlags({ appVersionId: Flags.integer({ char: 'i', aliases: ['v'], description: APP_VERSION_ID_TO_ENTER, }), })); async run() { const { flags } = await this.parse(Status); const { region: strRegion } = flags; const region = getRegionFromString(strRegion); let appVersionId = flags.appVersionId; try { if (!appVersionId) { const appAndAppVersion = await DynamicChoicesService.chooseAppAndAppVersion(true, true); appVersionId = appAndAppVersion.appVersionId; } const selectedRegion = await chooseRegionIfNeeded(region, { appVersionId }); this.preparePrintCommand(this, { appVersionId }); const deploymentStatus = await getAppVersionDeploymentStatus(appVersionId, selectedRegion); const mondayCodeRelease = await getMondayCodeBuild(appVersionId, selectedRegion); if (deploymentStatus.deployment) { deploymentStatus.deployment.liveUrl = mondayCodeRelease?.data?.liveUrl; } printDeploymentStatus(appVersionId, deploymentStatus); } catch (error) { logger.debug({ res: error }, DEBUG_TAG); if (error instanceof HttpError && error.code === StatusCodes.NOT_FOUND) { logger.error(`No deployment found for provided app version id - "${appVersionId || VAR_UNKNOWN}"`); } else if (error instanceof HttpError && error.code === 400) { logger.error(error.message); } else { logger.error(`An unknown error happened while fetching deployment status for app version id - "${appVersionId || VAR_UNKNOWN}"`); } process.exit(1); } } }