diff --git a/tools/build/build.js b/tools/build/build.js index 92c8c372d68..13984036528 100755 --- a/tools/build/build.js +++ b/tools/build/build.js @@ -36,6 +36,11 @@ export const PortParameter = new Juke.Parameter({ export const CiParameter = new Juke.Parameter({ type: 'boolean' }); +export const WarningParameter = new Juke.Parameter({ + type: 'string[]', + alias: 'W', +}); + export const DmMapsIncludeTarget = new Juke.Target({ executes: async () => { const folders = [ @@ -73,6 +78,7 @@ export const DmTarget = new Juke.Target({ executes: async ({ get }) => { await DreamMaker(`${DME_NAME}.dme`, { defines: ['CBT', ...get(DefineParameter)], + warningsAsErrors: get(WarningParameter).includes('error'), }); }, }); @@ -86,6 +92,7 @@ export const DmTestTarget = new Juke.Target({ fs.copyFileSync(`${DME_NAME}.dme`, `${DME_NAME}.test.dme`); await DreamMaker(`${DME_NAME}.test.dme`, { defines: ['CBT', 'CIBUILDING', ...get(DefineParameter)], + warningsAsErrors: get(WarningParameter).includes('error'), }); Juke.rm('data/logs/ci', { recursive: true }); await DreamDaemon( diff --git a/tools/build/lib/byond.js b/tools/build/lib/byond.js index eb69e7001ad..e7bce2cf8ba 100644 --- a/tools/build/lib/byond.js +++ b/tools/build/lib/byond.js @@ -60,7 +60,10 @@ const getDmPath = async () => { /** * @param {string} dmeFile - * @param {{ defines?: string[] }} options + * @param {{ + * defines?: string[]; + * warningsAsErrors?: boolean; + * }} options */ export const DreamMaker = async (dmeFile, options = {}) => { const dmPath = await getDmPath(); @@ -85,6 +88,14 @@ export const DreamMaker = async (dmeFile, options = {}) => { }; testOutputFile(`${dmeBaseName}.dmb`); testOutputFile(`${dmeBaseName}.rsc`); + const runWithWarningChecks = async (dmeFile, args) => { + const execReturn = await Juke.exec(dmeFile, args); + if (options.warningsAsErrors && execReturn.combined.match(/\d+:warning: /)) { + Juke.logger.error(`Compile warnings treated as errors`); + throw new Juke.ExitCode(2); + } + return execReturn; + } // Compile const { defines } = options; if (defines && defines.length > 0) { @@ -96,7 +107,7 @@ export const DreamMaker = async (dmeFile, options = {}) => { fs.writeFileSync(`${dmeBaseName}.m.dme`, injectedContent); const dmeContent = fs.readFileSync(`${dmeBaseName}.dme`); fs.appendFileSync(`${dmeBaseName}.m.dme`, dmeContent); - await Juke.exec(dmPath, [`${dmeBaseName}.m.dme`]); + await runWithWarningChecks(dmPath, [`${dmeBaseName}.m.dme`]); fs.writeFileSync(`${dmeBaseName}.dmb`, fs.readFileSync(`${dmeBaseName}.m.dmb`)); fs.writeFileSync(`${dmeBaseName}.rsc`, fs.readFileSync(`${dmeBaseName}.m.rsc`)); } @@ -105,7 +116,7 @@ export const DreamMaker = async (dmeFile, options = {}) => { } } else { - await Juke.exec(dmPath, [dmeFile]); + await runWithWarningChecks(dmPath, [dmeFile]); } }; diff --git a/tools/ci/build.ps1 b/tools/ci/build.ps1 index af44ef7d46f..4694cc3be58 100644 --- a/tools/ci/build.ps1 +++ b/tools/ci/build.ps1 @@ -5,6 +5,6 @@ if(!(Test-Path -Path "C:/byond")){ } bash tools/ci/install_node.sh -bash tools/build/build +bash tools/build/build -Werror exit $LASTEXITCODE