From 300f295068f65b2b955bd36d51d704a0e88fc3fa Mon Sep 17 00:00:00 2001 From: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com> Date: Thu, 9 Jul 2026 15:05:26 -0500 Subject: [PATCH] Fixes tgfont build & readds it to the normal TGUI compilation (#96853) ## About The Pull Request It was calling the `tgfont:build` script in `tgui/package.json` which didn't exist because the `bun()` function has the directory hardcoded to `./tgui`. So, I added an arg to specify the dir. Here's proof that it works: image I also removed the unused `tgui-bench` & `tgui-sonar` .cmds since their functionality was removed a year ago --- bin/tgui-bench.cmd | 3 - bin/tgui-sonar.cmd | 2 - code/modules/asset_cache/assets/tgfont.dm | 5 +- tgui/packages/tgfont/static/tgfont.css | 67 ---------------------- tgui/packages/tgfont/static/tgfont.woff2 | Bin 2472 -> 0 bytes tools/build/build.ts | 37 +++++------- tools/build/lib/bun.ts | 18 +----- 7 files changed, 18 insertions(+), 114 deletions(-) delete mode 100644 bin/tgui-bench.cmd delete mode 100644 bin/tgui-sonar.cmd delete mode 100644 tgui/packages/tgfont/static/tgfont.css delete mode 100644 tgui/packages/tgfont/static/tgfont.woff2 diff --git a/bin/tgui-bench.cmd b/bin/tgui-bench.cmd deleted file mode 100644 index 333115f7954..00000000000 --- a/bin/tgui-bench.cmd +++ /dev/null @@ -1,3 +0,0 @@ -@echo off -call "%~dp0\..\tools\build\build.bat" --wait-on-error tgui-bench %* -pause diff --git a/bin/tgui-sonar.cmd b/bin/tgui-sonar.cmd deleted file mode 100644 index e083f65362a..00000000000 --- a/bin/tgui-sonar.cmd +++ /dev/null @@ -1,2 +0,0 @@ -@echo off -call "%~dp0\..\tools\build\build.bat" --wait-on-error tgui-sonar %* diff --git a/code/modules/asset_cache/assets/tgfont.dm b/code/modules/asset_cache/assets/tgfont.dm index efa98e22e2c..956d8220a2e 100644 --- a/code/modules/asset_cache/assets/tgfont.dm +++ b/code/modules/asset_cache/assets/tgfont.dm @@ -1,8 +1,7 @@ /datum/asset/simple/namespaced/tgfont assets = list( - "tgfont.eot" = file("tgui/packages/tgfont/static/tgfont.eot"), - "tgfont.woff2" = file("tgui/packages/tgfont/static/tgfont.woff2"), + "tgfont.woff2" = file("tgui/packages/tgfont/dist/tgfont.woff2"), ) parents = list( - "tgfont.css" = file("tgui/packages/tgfont/static/tgfont.css"), + "tgfont.css" = file("tgui/packages/tgfont/dist/tgfont.css"), ) diff --git a/tgui/packages/tgfont/static/tgfont.css b/tgui/packages/tgfont/static/tgfont.css deleted file mode 100644 index 6bdf310a502..00000000000 --- a/tgui/packages/tgfont/static/tgfont.css +++ /dev/null @@ -1,67 +0,0 @@ -@font-face { - font-family: "tgfont"; - src: url("tgfont.woff2?t=1747971548188") format("woff2"); -} - -[class^="tg-"], -[class*=" tg-"] { - /* biome-ignore lint/complexity/noImportantStyles: Just leave it */ - font-family: "tgfont" !important; - font-size: inherit; - font-style: normal; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -:root { - /* biome-ignore-start lint/suspicious/noUselessEscapeInString: The escapes are needed */ - --tg-air-tank-slash: "\ea01"; - --tg-air-tank: "\ea02"; - --tg-bad-touch: "\ea03"; - --tg-image-minus: "\ea04"; - --tg-image-plus: "\ea05"; - --tg-nanotrasen-logo: "\ea06"; - --tg-non-binary: "\ea07"; - --tg-prosthetic-full: "\ea08"; - --tg-prosthetic-leg: "\ea09"; - --tg-sound-minus: "\ea0a"; - --tg-sound-plus: "\ea0b"; - --tg-syndicate-logo: "\ea0c"; - /* biome-ignore-end lint/suspicious/noUselessEscapeInString: The escapes are needed */ -} -.tg-air-tank-slash::before { - content: var(--tg-air-tank-slash); -} -.tg-air-tank::before { - content: var(--tg-air-tank); -} -.tg-bad-touch::before { - content: var(--tg-bad-touch); -} -.tg-image-minus::before { - content: var(--tg-image-minus); -} -.tg-image-plus::before { - content: var(--tg-image-plus); -} -.tg-nanotrasen-logo::before { - content: var(--tg-nanotrasen-logo); -} -.tg-non-binary::before { - content: var(--tg-non-binary); -} -.tg-prosthetic-full::before { - content: var(--tg-prosthetic-full); -} -.tg-prosthetic-leg::before { - content: var(--tg-prosthetic-leg); -} -.tg-sound-minus::before { - content: var(--tg-sound-minus); -} -.tg-sound-plus::before { - content: var(--tg-sound-plus); -} -.tg-syndicate-logo::before { - content: var(--tg-syndicate-logo); -} diff --git a/tgui/packages/tgfont/static/tgfont.woff2 b/tgui/packages/tgfont/static/tgfont.woff2 deleted file mode 100644 index 2586080a0d9b8da3491d4c1e47d2d89ec441f7e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2472 zcmV;Z30L-aPew8T0RR91012o73jhEB01`w100~$C0RR9100000000000000000000 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 { - return bun('install', '--frozen-lockfile', '--ignore-scripts'); + return bun('./tgui', 'install', '--frozen-lockfile', '--ignore-scripts'); }, }); @@ -301,7 +301,7 @@ export const BiomeInstallTarget = new Juke.Target({ return Juke.glob('node_modules/@biomejs/**').length === 0; }, executes: () => { - return bunRoot('install'); + return bun('.', 'install'); }, }); @@ -315,18 +315,7 @@ export const TgFontTarget = new Juke.Target({ 'tgui/packages/tgfont/dist/tgfont.css', 'tgui/packages/tgfont/dist/tgfont.woff2', ], - executes: async () => { - await bun('tgfont:build'); - fs.mkdirSync('tgui/packages/tgfont/static', { recursive: true }); - fs.copyFileSync( - 'tgui/packages/tgfont/dist/tgfont.css', - 'tgui/packages/tgfont/static/tgfont.css', - ); - fs.copyFileSync( - 'tgui/packages/tgfont/dist/tgfont.woff2', - 'tgui/packages/tgfont/static/tgfont.woff2', - ); - }, + executes: () => bun('./tgui/packages/tgfont', 'tgfont:build'), }); export const TguiTarget = new Juke.Target({ @@ -344,23 +333,23 @@ export const TguiTarget = new Juke.Target({ 'tgui/public/tgui-say.bundle.css', 'tgui/public/tgui-say.bundle.js', ], - executes: () => bun('tgui:build'), + executes: () => bun('./tgui', 'tgui:build'), }); export const TguiTscTarget = new Juke.Target({ dependsOn: [BunTarget], - executes: () => bun('tgui:tsc'), + executes: () => bun('./tgui', 'tgui:tsc'), }); export const TguiTestTarget = new Juke.Target({ parameters: [CiParameter], dependsOn: [BunTarget], - executes: () => bun('tgui:test'), + executes: () => bun('./tgui', 'tgui:test'), }); export const BiomeCheckTarget = new Juke.Target({ dependsOn: [BunTarget, BiomeInstallTarget], - executes: () => bunRoot('tgui:lint'), + executes: () => bun('.', 'tgui:lint'), }); export const TguiLintTarget = new Juke.Target({ @@ -369,12 +358,12 @@ export const TguiLintTarget = new Juke.Target({ export const TguiDevTarget = new Juke.Target({ dependsOn: [BunTarget], - executes: ({ args }) => bun('tgui:dev', ...args), + executes: ({ args }) => bun('./tgui', 'tgui:dev', ...args), }); export const TguiAnalyzeTarget = new Juke.Target({ dependsOn: [BunTarget], - executes: () => bun('tgui:analyze'), + executes: () => bun('./tgui', 'tgui:analyze'), }); export const TestTarget = new Juke.Target({ @@ -386,7 +375,7 @@ export const LintTarget = new Juke.Target({ }); export const BuildTarget = new Juke.Target({ - dependsOn: [TguiTarget, DmTarget], + dependsOn: [TguiTarget, TgFontTarget, DmTarget], }); export const ServerTarget = new Juke.Target({ @@ -438,7 +427,7 @@ export const CleanAllTarget = new Juke.Target({ }); export const TgsTarget = new Juke.Target({ - dependsOn: [TguiTarget], + dependsOn: [TguiTarget, TgFontTarget], executes: async () => { Juke.logger.info('Prepending TGS define'); prependDefines('TGS'); diff --git a/tools/build/lib/bun.ts b/tools/build/lib/bun.ts index 951af3f50fd..43297171323 100644 --- a/tools/build/lib/bun.ts +++ b/tools/build/lib/bun.ts @@ -3,26 +3,14 @@ import Juke from '../juke/index.js'; let hasInstallFolder = false; -export function bun(...args: any[]): Promise { +export function bun(dir: string, ...args: any[]): Promise { if (!hasInstallFolder) { - mkdirSync('./tgui/node_modules/', { recursive: true }); + mkdirSync(`${dir}/node_modules/`, { recursive: true }); hasInstallFolder = true; } return Juke.exec('bun', [...args.filter((arg) => typeof arg === 'string')], { - cwd: './tgui', - shell: true, - }); -} - -export function bunRoot(...args: any[]): Promise { - if (!hasInstallFolder) { - mkdirSync('./node_modules/', { recursive: true }); - hasInstallFolder = true; - } - - return Juke.exec('bun', [...args.filter((arg) => typeof arg === 'string')], { - cwd: './', + cwd: dir, shell: true, }); }