diff --git a/smogon.deploy.js b/smogon.deploy.js index 7fd09621..08860214 100644 --- a/smogon.deploy.js +++ b/smogon.deploy.js @@ -147,6 +147,23 @@ for (const f of list("build/item-minisprites-trimmed")) { itemspritecopy(f, {dir: "xyitems"}); } +// Dex spritesheet assets: hash-stamped css + webp, plus the css suffix file +// shipped to /smog2/dex/spritesheet_css_suffix.txt (read by dex render). +{ + const wh = hash("build/smogon/spritesheet.webp"); + copy("build/smogon/spritesheet.webp", `assets/spritesheet-${wh}.webp`); + const src = read("build/smogon/spritesheet.css"); + const css = src.replaceAll('url("./spritesheet.webp")', `url("./spritesheet-${wh}.webp")`); + if (css === src) { + throw new Error("spritesheet.css: no webp urls rewritten"); + } + // Suffix from source content: the rewritten css is a pure function of + // (css, webp), so this changes exactly when the served bytes change. + const ch = hash("build/smogon/spritesheet.css", "build/smogon/spritesheet.webp"); + write(`assets/spritesheet-${ch}.css`, css); + write("spritesheet_css_suffix.txt", `-${ch}\n`); +} + let h = hash(...list("build/smogon/minisprites")); for (const f of list("build/smogon/minisprites")) { newspritecopy(f, {dir: "minisprites/" + h}); diff --git a/updateminisprites.sh b/updateminisprites.sh index 0ea3aff2..b90d66a5 100755 --- a/updateminisprites.sh +++ b/updateminisprites.sh @@ -5,19 +5,14 @@ set -ex cd ~/smogon/sprites pnpm build +rm -rf deploy/smogon +node tools/deploy/index.ts run smogon.deploy.js -o deploy/smogon + # Update dex -cd ~/smogon/smogon.com/run -rm -rf ~/smogon/sprites/build/smogon/spritesheetoutput -pnpm exec esbuild ~/smogon/sprites/build/smogon/spritesheet.css --asset-names='[name]-[hash]' --entry-names='[name]-[hash]' --loader:.webp=copy --minify --allow-overwrite --bundle --outdir=/home/monsanto/smogon/sprites/build/smogon/spritesheetoutput -zopfli ~/smogon/sprites/build/smogon/spritesheetoutput/spritesheet-*.css -brotli -9 ~/smogon/sprites/build/smogon/spritesheetoutput/spritesheet-*.css -rsync ~/smogon/sprites/build/smogon/spritesheetoutput/* smogon:/smog2/sprites/assets -python -c 'import re; import pathlib; print(re.match(r"spritesheet(.*)\.css", str(list(pathlib.Path("/home/monsanto/smogon/sprites/build/smogon/spritesheetoutput/.").glob("spritesheet-*.css"))[0].name)).group(1))' | ssh smogon 'cat > /smog2/dex/spritesheet_css_suffix.txt' +rsync deploy/smogon/assets/* smogon:/smog2/sprites/assets +ssh smogon 'cat > /smog2/dex/spritesheet_css_suffix.txt' < deploy/smogon/spritesheet_css_suffix.txt ssh smogon 'systemctl reload dex' # Update forum minisprites -cd /home/monsanto/smogon/sprites -rm -rf deploy/smogon -node tools/deploy/index.ts run smogon.deploy.js -o deploy/smogon rsync -a deploy/smogon/forumsprites/ smogon:/smog2/forumsprites/minisprites rsync -a deploy/smogon/xyicons/ smogon:/smog2/sprites/xyicons