@azure-utils/storybooks
Version:
Utils to upload and manage Storybooks via Azure Functions and storage.
48 lines (46 loc) • 2.24 kB
JavaScript
import { getStore, responseError } from "./store-BL4RNiEp.mjs";
import { generateAzureStorageContainerName, uploadDirToAzureBlobStorage } from "./azure-storage-blob-Dj53y4ng.mjs";
import { BlobServiceClient } from "@azure/storage-blob";
import fs from "node:fs";
import path from "node:path";
import { Readable } from "node:stream";
import os from "node:os";
import decompress from "decompress";
import { once } from "node:events";
//#region src/utils/upload-utils.ts
async function uploadZipWithDecompressed(projectId, buildSHA, zipFile) {
const { context, connectionString, request } = getStore();
const tmpDir = os.tmpdir();
const dirpath = fs.mkdtempSync(path.join(tmpDir, "storybook-"));
const zipFilePath = path.join(dirpath, `${projectId}-${buildSHA}-storybook.zip`);
try {
if (zipFile) await writeStreamToFile(Readable.fromWeb(zipFile.stream()), zipFilePath);
else await writeStreamToFile(Readable.fromWeb(request.body), zipFilePath);
await decompress(zipFilePath, dirpath);
const containerClient = BlobServiceClient.fromConnectionString(connectionString).getContainerClient(generateAzureStorageContainerName(projectId));
const blobName = `${buildSHA}/storybook.zip`;
context.debug(`Uploading stream to blob: ${blobName} (container: ${containerClient.containerName})`);
const uploadResponse = await containerClient.getBlockBlobClient(blobName).uploadFile(zipFilePath, { blobHTTPHeaders: {
blobContentType: "application/zip",
blobContentEncoding: "utf8",
blobCacheControl: "public, max-age=31536000"
} });
if (uploadResponse.errorCode) return responseError("Failed to upload Storybook.", context, uploadResponse._response.status);
await uploadDirToAzureBlobStorage(context, containerClient, dirpath, (blobName$1) => path.join(buildSHA, blobName$1));
return;
} finally {
fs.rmSync(dirpath, {
recursive: true,
force: true
});
}
}
async function writeStreamToFile(readable, filePath) {
const writable = fs.createWriteStream(filePath);
for await (const chunk of readable) if (!writable.write(chunk)) await once(writable, "drain");
writable.end();
await once(writable, "finish");
}
//#endregion
export { uploadZipWithDecompressed };
//# sourceMappingURL=upload-utils-DHJHMiPY.mjs.map