forked from dienianindya/gsi_ess_mobile
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
4.1 KiB
108 lines
4.1 KiB
"use strict";
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.shouldUploadBeSkipped = exports.deploy = void 0;
|
|
const tmp_1 = require("tmp");
|
|
const clc = require("colorette");
|
|
const fs = require("fs");
|
|
const checkIam_1 = require("./checkIam");
|
|
const utils_1 = require("../../utils");
|
|
const projectConfig_1 = require("../../functions/projectConfig");
|
|
const gcs = require("../../gcp/storage");
|
|
const gcf = require("../../gcp/cloudfunctions");
|
|
const gcfv2 = require("../../gcp/cloudfunctionsv2");
|
|
const backend = require("./backend");
|
|
const backend_1 = require("./backend");
|
|
(0, tmp_1.setGracefulCleanup)();
|
|
async function uploadSourceV1(projectId, source, wantBackend) {
|
|
const v1Endpoints = backend.allEndpoints(wantBackend).filter((e) => e.platform === "gcfv1");
|
|
if (v1Endpoints.length === 0) {
|
|
return;
|
|
}
|
|
const region = v1Endpoints[0].region;
|
|
const uploadUrl = await gcf.generateUploadUrl(projectId, region);
|
|
const uploadOpts = {
|
|
file: source.functionsSourceV1,
|
|
stream: fs.createReadStream(source.functionsSourceV1),
|
|
};
|
|
await gcs.upload(uploadOpts, uploadUrl, {
|
|
"x-goog-content-length-range": "0,104857600",
|
|
});
|
|
return uploadUrl;
|
|
}
|
|
async function uploadSourceV2(projectId, source, wantBackend) {
|
|
const v2Endpoints = backend.allEndpoints(wantBackend).filter((e) => e.platform === "gcfv2");
|
|
if (v2Endpoints.length === 0) {
|
|
return;
|
|
}
|
|
const region = v2Endpoints[0].region;
|
|
const res = await gcfv2.generateUploadUrl(projectId, region);
|
|
const uploadOpts = {
|
|
file: source.functionsSourceV2,
|
|
stream: fs.createReadStream(source.functionsSourceV2),
|
|
};
|
|
await gcs.upload(uploadOpts, res.uploadUrl);
|
|
return res.storageSource;
|
|
}
|
|
async function uploadCodebase(context, codebase, wantBackend) {
|
|
var _a;
|
|
const source = (_a = context.sources) === null || _a === void 0 ? void 0 : _a[codebase];
|
|
if (!source || (!source.functionsSourceV1 && !source.functionsSourceV2)) {
|
|
return;
|
|
}
|
|
const uploads = [];
|
|
try {
|
|
uploads.push(uploadSourceV1(context.projectId, source, wantBackend));
|
|
uploads.push(uploadSourceV2(context.projectId, source, wantBackend));
|
|
const [sourceUrl, storage] = await Promise.all(uploads);
|
|
if (sourceUrl) {
|
|
source.sourceUrl = sourceUrl;
|
|
}
|
|
if (storage) {
|
|
source.storage = storage;
|
|
}
|
|
const sourceDir = (0, projectConfig_1.configForCodebase)(context.config, codebase).source;
|
|
if (uploads.length) {
|
|
(0, utils_1.logSuccess)(`${clc.green(clc.bold("functions:"))} ${clc.bold(sourceDir)} folder uploaded successfully`);
|
|
}
|
|
}
|
|
catch (err) {
|
|
(0, utils_1.logWarning)(clc.yellow("functions:") + " Upload Error: " + err.message);
|
|
throw err;
|
|
}
|
|
}
|
|
async function deploy(context, options, payload) {
|
|
if (!context.config) {
|
|
return;
|
|
}
|
|
if (!payload.functions) {
|
|
return;
|
|
}
|
|
await (0, checkIam_1.checkHttpIam)(context, options, payload);
|
|
const uploads = [];
|
|
for (const [codebase, { wantBackend, haveBackend }] of Object.entries(payload.functions)) {
|
|
if (shouldUploadBeSkipped(context, wantBackend, haveBackend)) {
|
|
continue;
|
|
}
|
|
uploads.push(uploadCodebase(context, codebase, wantBackend));
|
|
}
|
|
await Promise.all(uploads);
|
|
}
|
|
exports.deploy = deploy;
|
|
function shouldUploadBeSkipped(context, wantBackend, haveBackend) {
|
|
if (context.filters && context.filters.length > 0) {
|
|
return false;
|
|
}
|
|
const wantEndpoints = backend.allEndpoints(wantBackend);
|
|
const haveEndpoints = backend.allEndpoints(haveBackend);
|
|
if (wantEndpoints.length !== haveEndpoints.length) {
|
|
return false;
|
|
}
|
|
return wantEndpoints.every((wantEndpoint) => {
|
|
const haveEndpoint = (0, backend_1.findEndpoint)(haveBackend, (endpoint) => endpoint.id === wantEndpoint.id);
|
|
if (!haveEndpoint) {
|
|
return false;
|
|
}
|
|
return haveEndpoint.hash && wantEndpoint.hash && haveEndpoint.hash === wantEndpoint.hash;
|
|
});
|
|
}
|
|
exports.shouldUploadBeSkipped = shouldUploadBeSkipped;
|