123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- "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;
|