esa-cli
Version:
A CLI for operating Alibaba Cloud ESA EdgeRoutine (Edge Functions).
114 lines (113 loc) • 5.28 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import SelectItems from '../../components/selectInput.js';
import { yesNoPrompt } from '../../components/yesNoPrompt.js';
import { PublishType } from '../../libs/interface.js';
import { ApiService } from '../../libs/apiService.js';
import { descriptionInput } from '../../components/descriptionInput.js';
import { readEdgeRoutineFile } from '../../utils/fileUtils/index.js';
import { displaySelectSpec } from './index.js';
import { createEdgeRoutine, releaseOfficialVersion, uploadEdgeRoutineCode } from '../commit/index.js';
import logger from '../../libs/logger.js';
import t from '../../i18n/index.js';
import prodBuild from '../commit/prodBuild.js';
export function yesNoPromptAndExecute(message, execute) {
return new Promise((resolve) => {
yesNoPrompt((item) => __awaiter(this, void 0, void 0, function* () {
if (item.value === 'yes') {
const result = yield execute();
resolve(result);
}
else {
resolve(false);
}
}), message);
});
}
export function promptSelectVersion(versionList) {
const items = versionList
.filter((version) => version.CodeVersion !== 'unstable')
.map((version, index) => ({
label: version.CodeVersion,
value: String(index)
}));
return new Promise((resolve) => {
const handleSelection = (item) => __awaiter(this, void 0, void 0, function* () {
resolve(item.label);
});
SelectItems({ items, handleSelect: handleSelection });
});
}
export function displaySelectDeployType() {
logger.log(`📃 ${t('deploy_env_select_description').d('Please select which environment you want to deploy')}`);
const selectItems = [
{ label: t('deploy_env_staging').d('Staging'), value: PublishType.Staging },
{
label: t('deploy_env_production').d('Production'),
value: PublishType.Production
},
{ label: t('deploy_env_canary').d('Canary'), value: PublishType.Canary }
];
return new Promise((resolve) => {
const handleSelection = (item) => __awaiter(this, void 0, void 0, function* () {
resolve(item.value);
});
SelectItems({ items: selectItems, handleSelect: handleSelection });
});
}
export function createAndDeployVersion(projectConfig_1) {
return __awaiter(this, arguments, void 0, function* (projectConfig, createUnstable = false, customEntry) {
var _a, _b, _c, _d;
try {
const server = yield ApiService.getInstance();
const description = yield descriptionInput(createUnstable
? `🖊️ ${t('deploy_description_routine').d('Enter the description of the routine')}:`
: `🖊️ ${t('deploy_description_version').d('Enter the description of the code version')}:`, false);
yield prodBuild(false, customEntry);
const code = readEdgeRoutineFile();
const specList = ((_b = (_a = (yield server.ListRoutineOptionalSpecs())) === null || _a === void 0 ? void 0 : _a.data.Specs) !== null && _b !== void 0 ? _b : []).reduce((acc, item) => {
if (item.IsAvailable) {
acc.push(item.SpecName);
}
return acc;
}, []);
let specName;
if (createUnstable) {
specName = yield displaySelectSpec(specList);
}
else {
const req = { Name: (_c = projectConfig.name) !== null && _c !== void 0 ? _c : '' };
const response = yield server.getRoutine(req);
specName = (_d = response === null || response === void 0 ? void 0 : response.data.Envs[0].SpecName) !== null && _d !== void 0 ? _d : '50ms';
}
const edgeRoutine = {
name: projectConfig.name,
code: code || '',
description: description,
specName: specName
};
if (createUnstable) {
return yield createEdgeRoutine(edgeRoutine);
}
else {
const uploadResult = yield uploadEdgeRoutineCode(edgeRoutine);
if (!uploadResult) {
return false;
}
return yield releaseOfficialVersion(edgeRoutine);
}
}
catch (error) {
logger.error(`
${t('deploy_error').d('An error occurred during the creation or publishing process')}: ${error}`);
return false;
}
});
}