@mondaycom/apps-cli
Version:
A cli tool to manage apps (and monday-code projects) in monday.com
70 lines (69 loc) • 3.29 kB
JavaScript
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);
}
}
}