From 242f949236145b40477bba9a51ad0b9a331ffd34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stanis=C5=82aw=20Chmiela?= Date: Wed, 5 Feb 2025 11:28:05 +0100 Subject: [PATCH] Extract assertProjectTarballSizeDoesNotExceedLimit --- packages/eas-cli/src/build/build.ts | 6 ++---- packages/eas-cli/src/build/utils/repository.ts | 14 ++++++++++++++ .../uploadAccountScopedProjectSourceAsync.ts | 6 ++---- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/packages/eas-cli/src/build/build.ts b/packages/eas-cli/src/build/build.ts index 8280bb19b8..102538573d 100644 --- a/packages/eas-cli/src/build/build.ts +++ b/packages/eas-cli/src/build/build.ts @@ -35,6 +35,7 @@ import { collectMetadataAsync } from './metadata'; import { printDeprecationWarnings } from './utils/printBuildInfo'; import { LocalFile, + assertProjectTarballSizeDoesNotExceedLimit, makeProjectMetadataFileAsync, makeProjectTarballAsync, maybeWarnAboutProjectTarballSize, @@ -277,10 +278,7 @@ async function uploadProjectAsync( const projectTarball = await makeProjectTarballAsync(ctx.vcsClient); maybeWarnAboutProjectTarballSize(projectTarball.size); - - if (projectTarball.size > 2 * 1024 * 1024 * 1024) { - throw new Error('Project archive is too big. Maximum allowed size is 2GB.'); - } + assertProjectTarballSizeDoesNotExceedLimit(projectTarball.size); projectTarballPath = projectTarball.path; const [bucketKey, { metadataLocation }] = await Promise.all([ diff --git a/packages/eas-cli/src/build/utils/repository.ts b/packages/eas-cli/src/build/utils/repository.ts index 1fe451c86d..eb41b23af0 100644 --- a/packages/eas-cli/src/build/utils/repository.ts +++ b/packages/eas-cli/src/build/utils/repository.ts @@ -183,6 +183,20 @@ export function maybeWarnAboutProjectTarballSize(size: number): void { ); } +const MAX_ALLOWED_PROJECT_TARBALL_SIZE = + 2 /* GiB */ * 1024 /* MiB */ * 1024 /* KiB */ * 1024; /* B */ +export function assertProjectTarballSizeDoesNotExceedLimit(size: number): void { + if (size <= MAX_ALLOWED_PROJECT_TARBALL_SIZE) { + return; + } + + throw new Error( + `Project archive is too big. Maximum allowed size is ${formatBytes( + MAX_ALLOWED_PROJECT_TARBALL_SIZE + )}.` + ); +} + enum ShouldCommitChanges { Yes, ShowDiffFirst, diff --git a/packages/eas-cli/src/project/uploadAccountScopedProjectSourceAsync.ts b/packages/eas-cli/src/project/uploadAccountScopedProjectSourceAsync.ts index bbcb2ab24c..99e6aaf862 100644 --- a/packages/eas-cli/src/project/uploadAccountScopedProjectSourceAsync.ts +++ b/packages/eas-cli/src/project/uploadAccountScopedProjectSourceAsync.ts @@ -2,6 +2,7 @@ import chalk from 'chalk'; import fs from 'node:fs'; import { + assertProjectTarballSizeDoesNotExceedLimit, makeProjectTarballAsync, maybeWarnAboutProjectTarballSize, } from '../build/utils/repository'; @@ -40,10 +41,7 @@ export async function uploadAccountScopedProjectSourceAsync({ projectTarballPath = projectTarball.path; maybeWarnAboutProjectTarballSize(projectTarball.size); - - if (projectTarball.size > 2 * 1024 * 1024 * 1024) { - throw new Error('Project archive is too big. Maximum allowed size is 2GB.'); - } + assertProjectTarballSizeDoesNotExceedLimit(projectTarball.size); const projectArchiveBucketKey = await uploadAccountScopedFileAtPathToGCSAsync(graphqlClient, { accountId,