From 0f38cd8f34773d98c52a9e3a03196822f4d56114 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Sat, 22 Jun 2024 18:01:20 -0500 Subject: [PATCH] feat: transfer assets --- .github/workflows/cd-assets.yml | 48 +++++--------------------- bun.lockb | Bin 385926 -> 384479 bytes package.json | 4 --- src/core/blitz/writeDVPL.ts | 58 ++++++++++++++++++++++++++++++++ 4 files changed, 66 insertions(+), 44 deletions(-) create mode 100644 src/core/blitz/writeDVPL.ts diff --git a/.github/workflows/cd-assets.yml b/.github/workflows/cd-assets.yml index 346153db2..86979b3ac 100644 --- a/.github/workflows/cd-assets.yml +++ b/.github/workflows/cd-assets.yml @@ -13,55 +13,23 @@ concurrency: jobs: build: - runs-on: windows-latest + runs-on: ubuntu-latest steps: - - name: Checkout repository - uses: actions/checkout@v4 - with: - submodules: recursive - token: ${{ secrets.GH_TOKEN }} - - - name: Use node - uses: actions/setup-node@v4 - with: - node-version: 18 - cache: 'npm' - - - name: Install Yarn - run: npm install --location=global yarn - - - name: Use node_modules cache - uses: actions/cache@v3 - with: - path: '**/node_modules' - key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }} + - uses: actions/checkout@v4 + - uses: oven-sh/setup-bun@v1 - name: Install dependencies - run: yarn - - - name: Add fixed sharp - run: yarn add sharp@0.33.1 --ignore-engines + run: bun install - name: Setup DepotDownloader - run: yarn setup:depotdownloader + run: bun scripts/setupDepotDownloader.ts - name: Run DepotDownloader - run: ./temp/depotDownloader/DepotDownloader.exe -app 444200 -username ${{ secrets.DEPOT_DOWNLOADER_USERNAME }} -password "${{ secrets.DEPOT_DOWNLOADER_PASSWORD }}" + run: ./temp/depotDownloader/DepotDownloader.exe -os windows -app 444200 -username ${{ secrets.DEPOT_DOWNLOADER_USERNAME }} -password "${{ secrets.DEPOT_DOWNLOADER_PASSWORD }}" - name: Apply patches - run: | - $env:GH_TOKEN = "${{ secrets.GH_TOKEN }}" - $env:DISCORD_TOKEN = "${{ secrets.DISCORD_TOKEN }}" - $env:DATABASE_URL = "${{ secrets.DATABASE_URL }}" - $env:WOTB_DLC_CDN = "${{ secrets.WOTB_DLC_CDN }}" - yarn setup:patches --depot + run: GH_TOKEN=${{ secrets.GH_TOKEN }} DISCORD_TOKEN=${{ secrets.DISCORD_TOKEN }} DATABASE_URL=${{ secrets.DATABASE_URL }} WOTB_DLC_CDN=${{ secrets.WOTB_DLC_CDN }} bun scripts/applyPatches.ts --depot - name: Build assets - run: | - $env:GH_TOKEN = "${{ secrets.GH_TOKEN }}" - $env:DISCORD_TOKEN = "${{ secrets.DISCORD_TOKEN }}" - $env:DATABASE_URL = "${{ secrets.DATABASE_URL }}" - $env:VIDEOS_SHEET = "${{ secrets.VIDEOS_SHEET }}" - $env:GOOGLE_APPLICATION_CREDENTIALS = "${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }}" - yarn build:assets --all-targets --depot ${{ github.ref == 'refs/heads/main' && '--production' || '' }} + run: GH_TOKEN=${{ secrets.GH_TOKEN }} DISCORD_TOKEN=${{ secrets.DISCORD_TOKEN }} DATABASE_URL=${{ secrets.DATABASE_URL }} VIDEOS_SHEET=${{ secrets.VIDEOS_SHEET }} GOOGLE_APPLICATION_CREDENTIALS=${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }} bun scripts/buildAssets/index.ts --all-targets --depot --production diff --git a/bun.lockb b/bun.lockb index 19b67e9adb45ba7b8eff8a3aba7a0f7f73359573..1f9a3650c00663ca7f56181d2fde23027f5896b9 100644 GIT binary patch delta 35106 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 QZT{g0cQ2k4`g8360`jqmN&o-= delta 35714 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 diff --git a/package.json b/package.json index e507be198..dcdcadfee 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,6 @@ "build:sitemap": "vite-node --script scripts/sitemap", "build:docs": "vitepress build docs", "build:ratingleaderboard": "vite-node --script scripts/buildRatingLeaderboard", - "build:assets": "vite-node --max_old_space_size=16384 --script scripts/buildAssets/index", "test": "vite-node --script scripts/test", "test2": "vite-node --script scripts/test2", "dev:bot": "vite-node --script scripts/build && yarn start:bot", @@ -22,14 +21,12 @@ "start:website": "next start", "host:docs": "vitepress preview docs", "publish:ratingleaderboard": "vite-node --script scripts/buildRatingLeaderboard --publish", - "setup:patches": "vite-node --script scripts/applyPatches", "lint": "npx tsc", "lint:website": "next lint", "format": "prettier --write \"**/*.@(json|js|jsx|css|md|ts|tsx|html|xml|yml|gltf)\"", "lint:version": "vite-node --script scripts/checkVersionMissMatch", "knip": "knip", "update": "yarn upgrade --latest", - "setup:depotdownloader": "vite-node --script scripts/setupDepotDownloader", "tunnel": "cloudflared tunnel --url http://localhost:3000", "discoverids": "scripts/discoverIds.ts" }, @@ -106,7 +103,6 @@ "crc": "^4.3.2", "fast-xml-parser": "^4.3.2", "knip": "^3.4.0", - "lz4": "^0.6.5", "prettier": "^3.0.3", "prisma": "^5.4.1", "typescript": "^5.4.5" diff --git a/src/core/blitz/writeDVPL.ts b/src/core/blitz/writeDVPL.ts new file mode 100644 index 000000000..c89872ca7 --- /dev/null +++ b/src/core/blitz/writeDVPL.ts @@ -0,0 +1,58 @@ +import { crc32 } from 'crc'; +import { compressBlock } from 'lz4js'; + +/** + * Thanks Maddoxkkm! Modernized heavily. + * + * https://github.com/Maddoxkkm/dvpl_converter/ + */ +export function writeDVPL(buffer: Buffer) { + const source = new Uint8Array(buffer); + const destination = new Uint8Array(buffer.length); + const compressedBlockSize = compressBlock( + source, + destination, + 0, + source.length, + 0, + ); + let output = Buffer.from(destination); + + if (compressedBlockSize === 0 || compressedBlockSize >= buffer.length) { + const footerBuffer = toDVPLFooter( + buffer.length, + buffer.length, + crc32(buffer), + 0, + ); + + return Buffer.concat([buffer, footerBuffer], buffer.length + 20); + } else { + output = output.subarray(0, compressedBlockSize); + const footerBuffer = toDVPLFooter( + buffer.length, + compressedBlockSize, + crc32(output), + 2, + ); + + return Buffer.concat([output, footerBuffer], compressedBlockSize + 20); + } +} + +function toDVPLFooter( + inputSize: number, + compressedSize: number, + crc32: number, + type: number, +) { + const result = Buffer.alloc(20); + + result.writeUInt32LE(inputSize, 0); + result.writeUInt32LE(compressedSize, 4); + result.writeUInt32LE(crc32, 8); + result.writeUInt32LE(type, 12); + result.write('DVPL', 16, 4, 'utf8'); + + return result; +}