SepoEngine System Update Specification
Technical reference for building update packages (.zip) compatible with SystemUpdater and SystemUpdateController.
1. Package structure (ZIP file)
When creating the ZIP, update-manifest.json must sit at the root. Do not wrap the package in a parent folder before zipping.
Correct ZIP content:
/update-manifest.json
/contents/
/Core/
Router.php
/UI/
styles.css
2. Manifest schema (update-manifest.json)
The manifest is a JSON object that controls the surgical file swap.
{
"version": "1.2.3",
"description": "Short summary",
"files": {
"contents/Router.php": "SepoEngine/Core/Router.php",
"contents/styles.css": "public/assets/css/styles.css"
},
"delete": [
"SepoEngine/Core/OldUnusedFile.php"
]
}
Key reference:
version— the target system version.description— short summary; visible in update history.files— map of"ZIP Path"to"Server Path".delete— array of server paths to remove.
3. Path rules and constraints
- All server paths are relative to the project root (e.g.
/xampp/htdocs/sepodesk/). - Do not use absolute paths (
C:\...) or leading slashes (/). - Files listed in
fileswill overwrite existing files automatically. - The
deletearray is only for files that should no longer exist. - Ensure the
ZipArchiveextension is enabled inphp.ini.
4. Constants (UpdatePackageSpec)
MANIFEST_FILENAME—update-manifest.jsonThe required filename for the instruction manual inside the ZIP.TEMP_STORAGE—SepoEngine/Storage/Temp/latest_update.zipThe standard directory for storing temporary uploaded packages.HISTORY_TABLE—tsp_sys_updatesThe database table where update history is recorded.
class UpdatePackageSpec
{
public const MANIFEST_FILENAME = 'update-manifest.json';
public const TEMP_STORAGE = 'SepoEngine/Storage/Temp/latest_update.zip';
public const HISTORY_TABLE = 'tsp_sys_updates';
}