From d71ea5c3830657ec4b9042f5f13a3285de60a9de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Mon, 21 Oct 2024 18:51:49 -0500 Subject: [PATCH] feat: skip unmodifined files --- .../src/core/github/commitMultipleFiles.ts | 42 +++++++++++++++++-- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/packages/scripts/src/core/github/commitMultipleFiles.ts b/packages/scripts/src/core/github/commitMultipleFiles.ts index f65020321..ac826f778 100644 --- a/packages/scripts/src/core/github/commitMultipleFiles.ts +++ b/packages/scripts/src/core/github/commitMultipleFiles.ts @@ -11,8 +11,44 @@ export async function commitMultipleFiles( repoRaw: string, branch: string, message: string, - changes: FileChange[], + changesRaw: FileChange[], ) { + const changes: FileChange[] = []; + + await Promise.all( + changesRaw.map(async (change) => { + const blobPath = `${repoRaw}/${branch}/${change.path}`; + const response = await fetch( + `https://raw.githubusercontent.com/${blobPath}`, + ); + + if (response.status === 404) { + console.log( + `🟢 (+${change.content.length.toLocaleString()}B) ${blobPath}`, + ); + changes.push(change); + } else if (response.status === 200) { + const buffer = Buffer.from(await response.arrayBuffer()); + + if (!buffer.equals(change.content)) { + const diff = change.content.length - buffer.length; + + console.log( + `🟡 (${diff > 0 ? '+' : ''}${diff.toLocaleString()}B) ${blobPath}`, + ); + + changes.push(change); + } + } else { + throw new Error( + `Unexpected status code ${response.status} for ${blobPath}`, + ); + } + }), + ); + + if (changes.length === 0) return; + const [owner, repo] = repoRaw.split('/'); const latestCommitSha = ( await octokit.git.getRef({ @@ -31,9 +67,7 @@ export async function commitMultipleFiles( const blobs: GithubChangeBlob[] = []; const bar = new ProgressBar('Blobs :bar', changes.length); - for (const changeIndexString in changes) { - const changeIndex = parseInt(changeIndexString); - const change = changes[changeIndex]; + for (const change of changes) { const createdBlob = await createBlob(owner, repo, change); blobs.push(createdBlob!); bar.tick();