Skip to content

Scripts


Terminal window
pnpm exec vite-node scripts/add-badge.ts fire_green "Octofin Eliteboard"
Terminal window
pnpm exec vite-node scripts/rename-badge.ts 10 "New 4v4 Sundaes"
Terminal window
pnpm exec vite-node scripts/add-badge-winners.ts 10 "750705955909664791,79237403620945920"

Converting gifs (badges) to thumbnail (.png)

Section titled “Converting gifs (badges) to thumbnail (.png)”
Terminal window
sips -s format png ./sundae.gif --out .

While in the folder with the images:

Terminal window
pnpm dlx sharp-cli --input '*.png' --output '{dir}/{name}.avif' --format avif
  1. Drop the whole splat3 repository into /scripts/dicts/splat3 (pull before).
  2. If the dump’s shape changed, update /scripts/splat3-types.ts to match (the dump is gitignored, so these types are hand-maintained rather than inferred from the JSON).
  3. Update all CURRENT_SEASON constants
  4. Update CURRENT_PATCH constants
  5. Update PATCHES constant with the latest patch + remove the oldest
  6. Update the stage list in stage-ids.ts and create-misc-json.ts. Add images from Lean’s repository and avify them.
  7. pnpm exec vite-node scripts/create-misc-json.ts
  8. pnpm exec vite-node scripts/create-gear-json.ts
  9. pnpm exec vite-node scripts/create-analyzer-json.ts (writes weapon-params.ts directly into app/features/build-analyzer/data)
    • Double check that no hard-coded special damages changed
    • pnpm run i18n:sync (the scripts write the regional variants’ full translations, sync removes what they share with their parent language)
  10. pnpm exec vite-node scripts/create-object-dmg-json.ts (writes object-dmg.json directly into app/features/object-damage-calculator/data and damage-rate-history.json for the params page into app/features/params/data)
  11. pnpm exec vite-node scripts/sync-weapon-params.ts (writes the weapon/sub/special param histories for the params page)
  12. Fill new weapon IDs by category to weapon-ids.ts (easy to take from the diff of English weapons.json)
  13. Get gear IDs for each slot from /output folder and update gear-ids.ts.
  14. Delete all images inside main-weapons, main-weapons-outlined, main-weapons-outlined-2, main-weapons-outlined-3 and gear folders.
  15. Replace with images from Lean’s repository.
  16. Run the pnpm exec vite-node scripts/replace-img-names.ts command
  17. Run the pnpm exec vite-node scripts/replace-weapon-names.ts command
  18. Run the .avif generating command in each image folder.
  19. Update manually any languages that use English gear.json and weapons.json files
Terminal window
pnpm run deploy:prod

Puts the service in maintenance mode, triggers a deploy and polls it every 10 seconds until it is live. Then pings /health on the new instance over SSH (public traffic only sees Render’s 503 maintenance page) every 10 seconds until it returns 200, and finally turns maintenance mode off. On success it prints the pnpm run changelog:image <sha> command with the commit of the previous release filled in.

If the build fails the previous version is still running, so maintenance mode is turned off again. Any other failure or timeout leaves maintenance mode on to be handled from the Render dashboard.

Needs RENDER_API_KEY (Render Dashboard -> Account Settings -> API Keys), RENDER_SERVICE_ID and PROD_SSH_TARGET (see the one-time setup below) in .env.

The docs site (https://docs.sendou.ink) is a Render static site that deploys itself: its auto-deploy is set to “After CI checks pass”, so every commit to main whose checks pass is built, the e2e job having published its screenshots by then (see Living docs). The previous version is served until the new build is live, and a skipped commit is picked up by the next green one (or redeployed from the dashboard).

The static site’s settings: the repository root as its root directory, pnpm install --frozen-lockfile && pnpm run docs:screenshots:download && pnpm run docs:build as the build command and docs/site/dist as the publish directory.

Download the production database from Render.com

Section titled “Download the production database from Render.com”
Terminal window
pnpm run download-prod-db

Takes a VACUUM INTO snapshot of the live database (compacted, and consistent unlike a cp of a WAL database), streams it down gzipped, and archives it as ../backups/db-<timestamp>.sqlite3.gz (PROD_DB_BACKUP_DIR to change). Once the snapshot has been verified it replaces db-snapshot.sqlite3 in this checkout and every sendou.ink checkout next to it, deletes the stale db-sandbox.sqlite3 files, and rebuilds db-sandbox.sqlite3 in the checkout you ran it from (pnpm run sandbox:reset does that rebuild on its own).

Flags: --dry-run prints what would happen, --yes skips the confirmation, --keep <n> prunes all but the newest n archives.

  1. Add your public key at Render Dashboard -> Account Settings -> SSH Keys.
  2. Set PROD_SSH_TARGET in .env to the address in Render Dashboard -> the service -> SSH, e.g. srv-xxxxxxxx@ssh.frankfurt.render.com.
  3. Run ssh $PROD_SSH_TARGET 'echo ok' once to accept the host key.

If SSH is unavailable, the same thing through the dashboard “Shell” tab:

  1. cd /var/data
  2. sqlite3 -readonly db.sqlite3 "VACUUM INTO '/var/data/db-snapshot.sqlite3'"
  3. gzip db-snapshot.sqlite3
  4. wormhole send db-snapshot.sqlite3.gz
  5. On the receiving computer use the command shown.
  6. gunzip db-snapshot.sqlite3.gz in the checkout root, then pnpm run sandbox:reset
  7. rm db-snapshot.sqlite3.gz on the server, it is sharing the disk with production