From 204c3eacc1e70ef52e3dc9191ef7dd013bfad9b5 Mon Sep 17 00:00:00 2001 From: tresabhi <43380238+tresabhi@users.noreply.github.com> Date: Thu, 13 Aug 2026 12:01:16 -0500 Subject: [PATCH] i give up --- .github/workflows/website.yaml | 5 +++ .../scripts/src/downloadClient/constants.ts | 5 +++ packages/scripts/src/downloadClient/index.ts | 42 ++++++++++++++++++- 3 files changed, 51 insertions(+), 1 deletion(-) diff --git a/.github/workflows/website.yaml b/.github/workflows/website.yaml index 28945976b..5213402ee 100644 --- a/.github/workflows/website.yaml +++ b/.github/workflows/website.yaml @@ -115,6 +115,11 @@ jobs: with: repo-token: ${{ secrets.GH_TOKEN }} + - name: Setup aria2 + run: | + sudo apt-get update + sudo apt-get install -y aria2 + - name: Configure pages uses: actions/configure-pages@v6 diff --git a/packages/scripts/src/downloadClient/constants.ts b/packages/scripts/src/downloadClient/constants.ts index 6a6a15507..3d694df1b 100644 --- a/packages/scripts/src/downloadClient/constants.ts +++ b/packages/scripts/src/downloadClient/constants.ts @@ -2,3 +2,8 @@ export const DEPOT_DOWNLOADER_MAX_DOWNLOADS = 256; export const DEPOT_DOWNLOADER_OUTPUT = "../../temp/depotdownloader"; export const DEPOT_DOWNLOADER_EXECUTABLE = `${DEPOT_DOWNLOADER_OUTPUT}/DepotDownloader`; + +export const ARIA2_OUTPUT = "../../temp/aria2"; +export const ARIA2_EXECUTABLE = `${ARIA2_OUTPUT}/aria2c`; + +export const WGPKG_DIR = "../../temp/wgpkgs"; diff --git a/packages/scripts/src/downloadClient/index.ts b/packages/scripts/src/downloadClient/index.ts index 7f92cd57e..20e810989 100644 --- a/packages/scripts/src/downloadClient/index.ts +++ b/packages/scripts/src/downloadClient/index.ts @@ -5,6 +5,7 @@ import { DEPOT_DOWNLOADER_EXECUTABLE, DEPOT_DOWNLOADER_MAX_DOWNLOADS, DEPOT_DOWNLOADER_OUTPUT, + WGPKG_DIR, } from "./constants"; import { QuickGitHubRelease } from "./types"; @@ -49,9 +50,48 @@ if (provider === "steam") { } else if (provider === "zip") { const url = assertSecret(import.meta.env.CLIENT_SOURCE); - await mkdir(dir, { recursive: true }); + console.log("Downloading and extracting zipped client..."); + await mkdir(dir, { recursive: true }); await $`curl -L "${url}" | bsdtar -xf- --strip-components=1 -C ${dir}`; +} else if (provider === "wgpkg") { + let index = 1; + const urls: string[] = []; + + console.log("Discovering packages..."); + + while (true) { + const url = `${source}.${index.toString().padStart(3, "0")}`; + const response = await fetch(url); + + if (response.status === 200) { + urls.push(url); + } else if (response.status === 404) { + break; + } else { + throw new Error(`Wargaming response error status: ${response.status}`); + } + + index++; + } + + console.log(`Downloading ${urls.length} packages...`); + + await rm(WGPKG_DIR, { recursive: true }); + + const inputContent = urls + .map((url) => { + const name = url.split("/").pop()!; + return `${url}\n out=${name}\n dir=${WGPKG_DIR}`; + }) + .join("\n"); + + await $`echo ${inputContent} | aria2c -j ${urls.length} -x 2 -s 2 -i -`; + + const firstChunk = `${WGPKG_DIR}/${urls[0].split("/").pop()!}`; + await $`7z x "${firstChunk}" -o${dir} -y`; + + await rm(WGPKG_DIR, { recursive: true }); } else { throw new Error(`Unknown provider: ${provider}`); }