esa-cli
Version:
A CLI for operating Alibaba Cloud ESA EdgeRoutine (Edge Functions).
162 lines (161 loc) • 6.9 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 { getProjectConfig, readEdgeRoutineFile } from '../../utils/fileUtils/index.js';
import { checkDirectory, checkIsLoginSuccess } from '../utils.js';
import { descriptionInput } from '../../components/descriptionInput.js';
import { ApiService } from '../../libs/apiService.js';
import prodBuild from './prodBuild.js';
import logger from '../../libs/logger.js';
import t from '../../i18n/index.js';
import { exit } from 'process';
const commit = {
command: 'commit [entry]',
describe: `📦 ${t('commit_describe').d('Commit your code, save as a new version')}`,
builder: (yargs) => {
return yargs
.option('minify', {
alias: 'm',
describe: t('commit_option_minify').d('Minify code before committing'),
type: 'boolean',
default: false
})
.option('description', {
alias: 'd',
describe: t('commit_option_description').d('Description for the routine/version (skip interactive input)'),
type: 'string'
})
.positional('entry', {
describe: t('dev_entry_describe').d('Entry file of the Routine'),
type: 'string',
demandOption: false
});
},
handler: (argv) => __awaiter(void 0, void 0, void 0, function* () {
yield handleCommit(argv);
exit();
})
};
export default commit;
export function handleCommit(argv) {
return __awaiter(this, void 0, void 0, function* () {
if (!checkDirectory())
return;
const projectConfig = getProjectConfig();
if (!projectConfig)
return logger.notInProject();
if (!(yield checkIsLoginSuccess()))
return;
yield prodBuild(!!argv.minify, argv === null || argv === void 0 ? void 0 : argv.entry);
try {
const server = yield ApiService.getInstance();
const req = { Name: projectConfig.name };
const response = yield server.getRoutine(req, false);
let action = 'Creating';
let description;
if (!response) {
logger.log(`🙅 ${t('commit_er_not_exist').d('No routine found, creating a new one')}`);
if (argv.description) {
description = argv.description;
}
else {
description = yield descriptionInput(`🖊️ ${t('commit_er_description').d('Enter a description for the routine')}:`, false);
}
}
else {
logger.log(`🔄 ${t('commit_er_exist').d('Routine exists, updating the code')}`);
if (argv.description) {
description = argv.description;
}
else {
description = yield descriptionInput(`🖊️ ${t('commit_version_description').d('Enter a description for the version')}:`, false);
}
action = 'Updating';
}
const code = readEdgeRoutineFile() || '';
if (action === 'Creating') {
const edgeRoutineProps = {
name: projectConfig.name,
code,
description: ''
};
yield createEdgeRoutine(edgeRoutineProps);
}
const versionProps = {
name: projectConfig.name,
code,
description: description
};
const uploadResult = yield uploadEdgeRoutineCode(versionProps);
if (uploadResult) {
yield releaseOfficialVersion(versionProps);
}
}
catch (error) {
logger.error(`${t('common_error_occurred').d('An error occurred:')} ${error}`);
}
});
}
export function createEdgeRoutine(edgeRoutine) {
return __awaiter(this, void 0, void 0, function* () {
try {
const server = yield ApiService.getInstance();
const res = yield server.createRoutine(edgeRoutine);
const createResult = (res === null || res === void 0 ? void 0 : res.data.Status) === 'OK';
if (!createResult) {
logger.error(t('commit_create_er_fail').d('An error occurred while trying to create a routine'));
return false;
}
logger.success(t('commit_create_er_success').d('Routine created successfully.'));
return yield uploadEdgeRoutineCode(edgeRoutine);
}
catch (error) {
logger.error(`${t('common_error_occurred').d('An error occurred:')} ${error}`);
return false;
}
});
}
export function uploadEdgeRoutineCode(edgeRoutine) {
return __awaiter(this, void 0, void 0, function* () {
try {
const server = yield ApiService.getInstance();
const uploadResult = yield server.getRoutineStagingCodeUploadInfo(edgeRoutine);
if (!uploadResult) {
logger.error(t('commit_upload_fail').d('An error occurred while trying to upload your code'));
process.exit(0);
}
logger.success(t('commit_upload_success').d('Code uploaded successfully.'));
return true;
}
catch (error) {
logger.error('123');
logger.error(`${t('common_error_occurred').d('An error occurred:')} ${error}`);
process.exit(0);
}
});
}
export function releaseOfficialVersion(edgeRoutine) {
return __awaiter(this, void 0, void 0, function* () {
var _a;
const param = {
Name: edgeRoutine.name,
CodeDescription: (_a = edgeRoutine.description) !== null && _a !== void 0 ? _a : ''
};
const server = yield ApiService.getInstance();
const commitResult = yield server.commitRoutineStagingCode(param);
if (commitResult) {
logger.success(t('commit_success').d('Code version committed successfully.'));
return true;
}
else {
logger.error(t('commit_fail').d('An error occurred while trying to commit your code.'));
return false;
}
});
}