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:
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,
});
}