Skip to content

Commit 9f98d3d

Browse files
committed
[FIX] download commit archive instead of cloning whole repo
1 parent 5650c0a commit 9f98d3d

File tree

3 files changed

+156
-28
lines changed

3 files changed

+156
-28
lines changed

js/package-lock.json

Lines changed: 100 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/package.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,10 +54,10 @@
5454
"lib"
5555
],
5656
"peerDependencies": {
57+
"@reclaimprotocol/tls": "*",
5758
"koffi": "*",
5859
"p-queue": "*",
59-
"snarkjs": "*",
60-
"@reclaimprotocol/tls": "*"
60+
"snarkjs": "*"
6161
},
6262
"peerDependenciesMeta": {
6363
"snarkjs": {
@@ -79,6 +79,7 @@
7979
"@commitlint/config-conventional": "^17.7.0",
8080
"@reclaimprotocol/tls": "^0.1.0",
8181
"@types/node": "^22.0.0",
82+
"@types/unzipper": "^0.10.11",
8283
"circom_tester": "^0.0.20",
8384
"circomlib": "^2.0.5",
8485
"compare-versions": "^6.1.1",
@@ -87,6 +88,7 @@
8788
"p-queue": "^8.0.0",
8889
"snarkjs": "git+https://github.com/reclaimprotocol/snarkjs.git",
8990
"tinybench": "^3.0.3",
90-
"typescript": "^5.2.2"
91+
"typescript": "^5.2.2",
92+
"unzipper": "^0.12.3"
9193
}
9294
}

js/src/scripts/download-files.ts

Lines changed: 51 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
1-
import { exec } from 'child_process'
1+
import { createWriteStream } from 'fs'
22
import { rename, rm } from 'fs/promises'
33
import { dirname, join } from 'path'
4-
import { promisify } from 'util'
4+
import { Readable } from 'stream'
5+
import { pipeline } from 'stream/promises'
6+
import { Extract } from 'unzipper'
57
import { GIT_COMMIT_HASH } from '../config.ts'
6-
import { Logger } from '../types.ts'
7-
8-
const execPromise = promisify(exec)
8+
import type { Logger } from '../types.ts'
99

1010
const logger: Logger = console
1111

12-
const CLONE_DIR = './zk-symmetric-crypto'
13-
const CLONE_CMD = [
14-
`git clone https://github.com/reclaimprotocol/zk-symmetric-crypto ${CLONE_DIR}`,
15-
`cd ${CLONE_DIR}`,
16-
`git reset ${GIT_COMMIT_HASH} --hard`
17-
].join(' && ')
12+
const ZIP_URL = `https://github.com/reclaimprotocol/zk-symmetric-crypto/archive/${GIT_COMMIT_HASH}.zip`
13+
const DOWNLOAD_DIR = './zk-symmetric-crypto-download'
14+
const EXTRACTED_DIR = `./zk-symmetric-crypto-${GIT_COMMIT_HASH}`
1815

1916
const __dirname = dirname(import.meta.url.replace('file://', ''))
2017
const BASE_DIR = join(__dirname, '../../')
@@ -23,28 +20,60 @@ const DIRS_TO_COPY = [
2320
'bin'
2421
]
2522

23+
async function downloadAndExtractZip() {
24+
logger.info(`downloading archive from ${ZIP_URL}`)
25+
26+
const response = await fetch(ZIP_URL)
27+
if(!response.ok) {
28+
throw new Error(`Failed to download: ${response.status} ${response.statusText}`)
29+
}
30+
31+
const zipPath = join(DOWNLOAD_DIR, 'repo.zip')
32+
await rm(DOWNLOAD_DIR, { recursive: true, force: true })
33+
await rm(EXTRACTED_DIR, { recursive: true, force: true })
34+
35+
// Create download directory and download ZIP
36+
const { mkdir } = await import('fs/promises')
37+
await mkdir(DOWNLOAD_DIR, { recursive: true })
38+
39+
if(!response.body) {
40+
throw new Error('Response body is null')
41+
}
42+
43+
await pipeline(
44+
Readable.fromWeb(response.body as any),
45+
createWriteStream(zipPath)
46+
)
47+
48+
logger.info('downloaded ZIP, extracting...')
49+
50+
// Extract ZIP
51+
const fs = await import('fs')
52+
await pipeline(
53+
fs.createReadStream(zipPath),
54+
Extract({ path: './' })
55+
)
56+
57+
logger.info(`extracted to ${EXTRACTED_DIR}`)
58+
}
59+
2660
async function main() {
2761
for(const dir of DIRS_TO_COPY) {
2862
await rm(join(BASE_DIR, dir), { recursive: true, force: true })
2963
logger.info(`removing old "${dir}" directory`)
3064
}
3165

32-
// remove in case it already exists -- we want to clone fresh
33-
await rm(CLONE_DIR, { recursive: true, force: true })
34-
logger.info(`removed old cloned "${CLONE_DIR}" directory`)
35-
36-
logger.info(`cloning repo, #${GIT_COMMIT_HASH}. This may take a while...`)
37-
38-
await execPromise(CLONE_CMD)
39-
logger.info(`cloned repo to "${CLONE_DIR}"`)
66+
await downloadAndExtractZip()
4067

4168
for(const dir of DIRS_TO_COPY) {
42-
await rename(join(CLONE_DIR, dir), join(BASE_DIR, dir))
69+
await rename(join(EXTRACTED_DIR, dir), join(BASE_DIR, dir))
4370
logger.info(`moved "${dir}" directory`)
4471
}
4572

46-
await rm(CLONE_DIR, { recursive: true, force: true })
47-
logger.info(`removed "${CLONE_DIR}" directory`)
73+
// Clean up
74+
await rm(DOWNLOAD_DIR, { recursive: true, force: true })
75+
await rm(EXTRACTED_DIR, { recursive: true, force: true })
76+
logger.info('cleaned up temporary files')
4877

4978
logger.info('done')
5079
}

0 commit comments

Comments
 (0)