5.3 KiB
Scripts
Note: These are mostly useful if you are running the site in production as an admin, not typically for development.
Add new badge to the database
pnpm exec vite-node scripts/add-badge.ts fire_green "Octofin Eliteboard"
Rename display name of a badge
pnpm exec vite-node scripts/rename-badge.ts 10 "New 4v4 Sundaes"
Add many badge owners
pnpm exec vite-node scripts/add-badge-winners.ts 10 "750705955909664791,79237403620945920"
Converting gifs (badges) to thumbnail (.png)
sips -s format png ./sundae.gif --out .
Convert many .png files to .avif
While in the folder with the images:
for i in *.png; do pnpm dlx @squoosh/cli --avif '{"cqLevel":33,"cqAlphaLevel":-1,"denoiseLevel":0,"tileColsLog2":0,"tileRowsLog2":0,"speed":6,"subsample":1,"chromaDeltaQ":false,"sharpness":0,"tune":0}' $i; done
Note: it only works with Node 16.
Doing monthly update
- Drop the whole splat3 repository into
/scripts/dicts/splat3(pull before). - If the dump's shape changed, update
/scripts/splat3-types.tsto match (the dump is gitignored, so these types are hand-maintained rather than inferred from the JSON). - Update all
CURRENT_SEASONconstants - Update
CURRENT_PATCHconstants - Update
PATCHESconstant with the late patch + remove the oldest - Update the stage list in
stage-ids.tsandcreate-misc-json.ts. Add images from Lean's repository and avify them. pnpm exec vite-node scripts/create-misc-json.tspnpm exec vite-node scripts/create-gear-json.tspnpm exec vite-node scripts/create-analyzer-json.ts8a. Double check that no hard-coded special damages changed 8b.pnpm run i18n:sync(the scripts write the regional variants' full translations, sync removes what they share with their parent language)pnpm exec vite-node scripts/create-object-dmg-json.ts(also writesdamage-rate-history.jsonfor the params page directly intoapp/features/params/data)pnpm exec vite-node scripts/sync-weapon-params.ts(writes the weapon/sub/special param histories for the params page, see Sync weapon params)- Fill new weapon IDs by category to
weapon-ids.ts(easy to take from the diff of English weapons.json) - Get gear IDs for each slot from /output folder and update
gear-ids.ts. - Replace
object-dmg.jsonwith theobject-dmg.jsonin /output folder - Replace
weapon-params.tswith theparams.jsonin /output folder - Delete all images inside
main-weapons,main-weapons-outlined,main-weapons-outlined-2andgearfolders. - Replace with images from Lean's repository.
- Run the
pnpm exec vite-node scripts/replace-img-names.tscommand - Run the
pnpm exec vite-node scripts/replace-weapon-names.tscommand - Run the .avif generating command in each image folder.
- Update manually any languages that use English
gear.jsonandweapons.jsonfiles
Deploy to Render.com
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.
Download the production database from Render.com
Note: This is only useful if you have access to a production running on Render.com
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. Once the snapshot has been verified it replaces db-snapshot.sqlite3 in every local sendou.ink checkout, 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.
One-time setup
- Add your public key at Render Dashboard -> Account Settings -> SSH Keys.
- Set
PROD_SSH_TARGETin.envto the address in Render Dashboard -> the service -> SSH, e.g.srv-xxxxxxxx@ssh.frankfurt.render.com. - Run
ssh $PROD_SSH_TARGET 'echo ok'once to accept the host key.
Doing it by hand
If SSH is unavailable, the same thing through the dashboard "Shell" tab:
cd /var/datasqlite3 -readonly db.sqlite3 "VACUUM INTO '/var/data/db-snapshot.sqlite3'"gzip db-snapshot.sqlite3wormhole send db-snapshot.sqlite3.gz- On the receiving computer use the command shown.
gunzip db-snapshot.sqlite3.gzin the checkout root, thenpnpm run sandbox:resetrm db-snapshot.sqlite3.gzon the server, it is sharing the disk with production