esa-cli
Version:
A CLI for operating Alibaba Cloud ESA Functions and Pages.
179 lines (178 loc) • 6.8 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 FormData from 'form-data';
import chain from 'lodash';
import fetch from 'node-fetch';
import ora from 'ora';
import t from '../i18n/index.js';
import api from './api.js';
import { Environment } from './interface.js';
import logger from './logger.js';
export const checkLogin = () => __awaiter(void 0, void 0, void 0, function* () {
const result = new ServiceOutput();
try {
const response = yield api.getErService();
if (response.statusCode === 200) {
result.success = true;
result.message = t('login_success').d('Login success!');
}
else if (response.statusCode === 403) {
result.message = t('login_permission_denied').d('Permission denied: Access key or secret is incorrect, or does not have the necessary permissions.');
}
else {
result.message = `${t('common_error_occurred').d('An error occurred')}: ${response.statusCode}`;
}
}
catch (error) {
result.message = t('login_failed').d('An error occurred while trying to log in.');
}
return result;
});
const commonUploadCodeError = t('upload_code_failed').d('An error occurred while trying to upload the code.');
export const getRoutineStagingCodeUploadInfo = (edgeRoutine) => __awaiter(void 0, void 0, void 0, function* () {
const result = new ServiceOutput();
let ossConfig;
try {
const uploadResult = yield api.getRoutineStagingCodeUploadInfo({
name: edgeRoutine.name
});
ossConfig = chain(uploadResult).get('body.OssPostConfig');
if (!ossConfig) {
result.message = t('oss_config_not_found').d('Failed to retrieve OSS configuration information.');
return result;
}
}
catch (error) {
result.message = commonUploadCodeError;
return result;
}
try {
const { OSSAccessKeyId, Signature, callback, Url, key, policy } = ossConfig;
const formData = new FormData();
formData.append('OSSAccessKeyId', OSSAccessKeyId);
formData.append('Signature', Signature);
formData.append('callback', callback);
formData.append('x:codeDescription', ossConfig['x:codeDescription']);
formData.append('policy', policy);
formData.append('key', key);
formData.append('file', edgeRoutine.code);
const ossRes = yield fetch(Url, {
method: 'POST',
body: formData,
headers: formData.getHeaders()
});
if (ossRes && ossRes.status === 200) {
result.success = true;
result.message = t('upload_oss_success').d('Upload code success!');
}
else {
logger.error(`${t('oss_upload_failed').d('Failed to upload to OSS')}: ${ossRes.status}, ${ossRes.statusText}}`);
result.message = commonUploadCodeError;
}
return result;
}
catch (error) {
const err = error;
logger.error(err.message);
result.message = commonUploadCodeError;
return result;
}
});
export const commitRoutineStagingCode = (params) => __awaiter(void 0, void 0, void 0, function* () {
const result = new ServiceOutput();
try {
const res = yield api.commitRoutineStagingCode(params);
if (res.statusCode === 200 && res.body) {
result.success = true;
result.message = t('commit_success').d('Generate code version success!');
result.data = {
code: res.statusCode,
data: {
RequestId: res.body.RequestId,
CodeVersion: res.body.CodeVersion
}
};
}
return result;
}
catch (error) {
result.message = commonUploadCodeError;
return result;
}
});
const publishRoutineCodeVersion = (params) => __awaiter(void 0, void 0, void 0, function* () {
const result = new ServiceOutput();
try {
const res = yield api.publishRoutineCodeVersion(params);
if (res.statusCode === 200 && res.body) {
result.success = true;
result.message = t('publish_success').d('Publish success!');
result.data = {
code: res.statusCode,
data: {
CodeVersion: res.body.CodeVersion,
RequestId: res.body.RequestId
}
};
}
return result;
}
catch (error) {
result.message = commonUploadCodeError;
return result;
}
});
export const quickDeployRoutine = (edgeRoutineProps) => __awaiter(void 0, void 0, void 0, function* () {
const result = new ServiceOutput();
result.success = true;
const steps = [
{
action: () => getRoutineStagingCodeUploadInfo(edgeRoutineProps),
message: t('upload_code').d('Uploading code...')
},
{
action: () => commitRoutineStagingCode({
name: edgeRoutineProps.name,
codeDescription: edgeRoutineProps.description
}),
message: t('commit_code').d('Generating code version...')
},
{
action: () => publishRoutineCodeVersion({
Name: edgeRoutineProps.name,
CodeVersion: '',
Env: Environment.Staging
}),
message: t('publish_code').d('Publishing code to production environment...')
}
];
const spinner = ora(t('start_quick_deploy').d('Starting quick deploy...')).start();
for (const step of steps) {
spinner.text = step.message;
const stepRes = yield step.action();
if (stepRes.success) {
spinner.succeed(stepRes.message);
}
else {
result.success = false;
spinner.fail('Error: ' + stepRes.message);
result.message = stepRes.message;
break;
}
}
return result;
});
export class ServiceOutput {
constructor() {
this.success = false;
this.message = '';
this.data = {};
}
}