Add biome + rolldown + lightningcss build pipeline for JS/CSS bundling & minification

- package.json with biome, rolldown, lightningcss devDependencies  
- biome.json: add CSS formatter support
- scripts/build-css.mjs: lightningcss resolves @import chain, bundles/minifies CSS  
- scripts/build-js.mjs: rolldown per-entry JS bundling (no code splitting)
- scripts/build.mjs: orchestrator for both CSS + JS
- scripts/check-build.mjs: staleness checker for CI/deploy guard
- justfile: add build, build-css, build-js, build-install, build-check recipes
- justfile: deploy recipe now runs build before deploy-code
- head.php + form-page.php: use dist/base.min.css instead of style.css
- All controllers + FormBootstrap: reference dist/*.min.{css,js}
- admin footer: load admin.min.js for all admin pages
- repertoire: use public.min.js instead of individual app JS files
- Fix stray '}' syntax error in admin.css line 305
- .gitignore: add app/public/assets/dist/
This commit is contained in:
Pontoporeia
2026-06-24 13:09:44 +02:00
parent e74f9210c5
commit 20fe4b6c8c
29 changed files with 1391 additions and 46 deletions

View File

@@ -55,7 +55,7 @@ class AboutController
'sidebarLinks' => $sidebarLinks,
'pageTitle' => 'À Propos XAMXAM',
'metaDescription' => "À propos de XAMXAM, le répertoire des mémoires de fin d'études de l'erg École de Recherches Graphiques de Bruxelles.",
'extraCss' => ['/assets/css/content-page.css'],
'extraCss' => ['/assets/dist/content-page.min.css'],
'bodyClass' => 'apropos-body',
];
}

View File

@@ -49,7 +49,7 @@ class CharteController
'pageTitle' => $pageTitle . ' XAMXAM',
'metaDescription' => "Charte d'utilisation de XAMXAM, le répertoire des TFE de l'erg.",
'currentNav' => 'charte',
'extraCss' => ['/assets/css/content-page.css'],
'extraCss' => ['/assets/dist/content-page.min.css'],
'bodyClass' => 'apropos-body',
];
}

View File

@@ -156,7 +156,7 @@ class HomeController
// Layout
'currentNav' => '',
'extraCss' => ['/assets/css/public.css'],
'extraCss' => ['/assets/dist/public.min.css'],
'bodyClass' => 'home-body',
];
}

View File

@@ -49,7 +49,7 @@ class LicenceController
'pageTitle' => $pageTitle . ' XAMXAM',
'metaDescription' => "Informations sur les licences d'utilisation des mémoires publiés sur XAMXAM, le répertoire des TFE de l'erg.",
'currentNav' => 'licence',
'extraCss' => ['/assets/css/content-page.css'],
'extraCss' => ['/assets/dist/content-page.min.css'],
'bodyClass' => 'apropos-body',
];
}

View File

@@ -153,7 +153,7 @@ class SearchController
'site_name' => 'XAMXAM ERG',
],
'currentNav' => 'repertoire',
'extraCss' => ['/assets/css/repertoire.css'],
'extraCss' => ['/assets/dist/repertoire.min.css'],
'bodyClass' => 'search-body',
];
}
@@ -205,7 +205,7 @@ class SearchController
'site_name' => 'XAMXAM ERG',
],
'currentNav' => 'repertoire',
'extraCss' => ['/assets/css/repertoire.css'],
'extraCss' => ['/assets/dist/repertoire.min.css'],
'bodyClass' => 'search-body',
];
}

View File

@@ -146,8 +146,8 @@ class TfeController
// Layout
'currentNav' => '',
'extraCss' => ['/assets/css/tfe.css'],
'extraJs' => ['/assets/js/app/access-request.js'],
'extraCss' => ['/assets/dist/tfe.min.css'],
'extraJs' => ['/assets/dist/public.min.js'],
'bodyClass' => 'tfe-body',
];
}

View File

@@ -16,23 +16,15 @@ class FormBootstrap
public static function adminAssetArrays(): array
{
return [
'extraCss' => ['/assets/css/form-base.css'],
'extraCssAdmin' => [
'/assets/css/form-admin.css',
'/assets/css/filepond.min.css',
'/assets/css/filepond-plugin-image-preview.min.css',
],
'extraCss' => ['/assets/dist/form.min.css'],
'extraCssAdmin' => [],
'extraJs' => [
'/assets/js/vendor/filepond.min.js',
'/assets/js/vendor/filepond-plugin-file-validate-type.min.js',
'/assets/js/vendor/filepond-plugin-file-validate-size.min.js',
'/assets/js/vendor/filepond-plugin-image-preview.min.js',
'/assets/js/vendor/filepond-plugin-image-exif-orientation.min.js',
'/assets/js/app/file-upload-filepond.js',
'/assets/js/app/beforeunload-guard.js',
'/assets/js/app/pill-search.js',
'/assets/js/app/jury-autocomplete.js',
'/assets/js/app/autosave-handler.js',
'/assets/dist/form.min.js',
],
];
}