Skip to content

Releases: oakengine/installer

Release list

1.0.0

Choose a tag to compare

@jschwind jschwind released this 08 Jul 15:47
251dd4a

Release 1.0.0 – Changelog Summary

This first stable release of the OakEngine Installer delivers the full project installation workflow end to end: a runnable, plugin- and data-installable OakEngine project is now deployed from a central package endpoint, with deterministic updates, environment management, and a self-update channel straight from the installer itself.

  • End-to-End Package Installation
    Adds the complete install pipeline for runner, plugin, and data packages, downloaded as archives from a configurable package API endpoint (project_api_url) with optional bearer-token authentication.
    This makes OakEngine rollouts reproducible across servers and removes the manual GitHub download dance for project updates.

  • Server Endpoint Package Contract
    Defines a strict, well-documented list/detail contract for the package endpoint (package_type, package_id, version, channel, archive_*, composer, download_url) with X-Install-UUID propagation and optional Authorization: Bearer support.
    Integrators now have a single, predictable shape to ship runner, plugin, and data packages against.

  • Install Manifest Tracking
    Introduces InstallManifestManager with .oak-install-manifest.json files per package type, storing every extracted file’s SHA1 so each new install can diff against the previous one and remove only the files that actually disappeared (plus empty directories left behind).
    Updates stay clean across versions — no more stale files piling up across runner/plugin/data reinstalls.

  • Install UUID Propagation
    Sends a stable, regenerable UUID v7 (INSTALL_UUID) with every package request so the package endpoint can attribute installs to a server and respect migration state across runs.
    Admins can view, edit, or regenerate the UUID from the dashboard.

  • App Secret Lifecycle
    Auto-generates a strong APP_SECRET, syncs it on every .env.local write, supports explicit user-supplied values (16–128 chars, charset-validated), and exposes a “Regenerate Secret” action.
    Application boots never break on a missing secret, and operators can rotate the secret without editing files by hand.

  • Database Management in .env.local
    Adds an interactive database manager: add, activate, and remove DATABASE_URL entries directly from the UI, with active/database selection persisted between runs.
    Multi-DB environments no longer require manual .env.local editing on the server.

  • Self-Update Channel
    Ships a built-in installer self-update view that lists GitHub branches and tags for a configurable repository, lets admins pick a ref (with commit SHA back-channel), downloads the zipball, and atomically replaces the installer source while preserving config.php.
    Operators stay on a known-good version without leaving the browser.

  • System / Diagnostics Dashboard
    Adds a “System” view with PHP version, loaded modules, upload/post/memory/time limits, project version, and installed runner/plugin/data list.
    Onboarding and troubleshooting get a one-page overview of the runtime.

  • Authentication & Password Gate
    Optional password (plain or hashed) in config.php gates the entire installer UI behind a login form, with evaluateAuthentication() handling login-failed, login-ok, logged-out, show-form, and authenticated outcomes.
    Sensitive deployments can ship the installer without exposing configuration to anonymous visitors.

  • Migrations & Cache UI
    Adds “Run migrations” (Doctrine via bin/console doctrine:migrations:migrate) and “Clear cache” (with safety net to preserve top-level log/logs) actions surfaced in the dashboard.
    Routine Laravel/Symfony-style operations stay inside the installer instead of needing SSH.

  • Structured Installer Logging
    Writes append-only audit logs (oak-installer.log) to a configurable directory that never lives inside the installed project, with clearCacheDirectory() also protecting top-level log/logs directories inside the cache tree.
    Cache clears and first-install cleanups can no longer wipe the audit trail.

  • Multi-Language UI
    Ships full UI translations for English, German, French, Italian, Spanish, Portuguese, Dutch, Polish, Russian, Japanese, Korean, and Chinese.
    Locale can be switched at runtime via the language dropdown and is persisted across requests.

  • Modern, Responsive UI
    Rebuilds the UI around a dashboard layout with a Lucide-iconed sidebar, dark-mode CSS variables, custom dropdowns, confirmation modals, and a tabbed “Installer” management view.
    The installer is now actually pleasant to use on a fresh server from a phone or a desktop.

  • Manifest-Based Filesystem Refactor
    Centralises filesystem operations in Filesystem, FilesystemSupport, EnvLocalManager, ProjectPackageArchiveExtractor, and the new InstallManifestManager, with permissive failure modes for read-only situations during cleanup.
    This makes the install/cleanup logic consistent and unit-testable instead of scattered through the controller.

  • 100% PHPUnit Coverage Mandate
    Locks coverage requirements in AGENTS.md and the composer scripts (bin-phpunit, bin-phpunit-coverage) so every change must keep classes, methods, and lines at 100% with no stubs, no exclusions, and no ignores.
    Future regressions surface immediately in CI rather than silently degrading test confidence.

  • Dual PHPStan / ECS / Rector Toolchain
    Wires phpstan, ecs (PHP-CS-Fixer), and rector through bamarni/composer-bin-plugin with a ci aggregate script and a ci-coverage variant.
    Style, static analysis, and refactoring checks are first-class composer commands available to every contributor.


Compatibility: First stable release, no migration path required.

Full Changelog: https://github.com/jbsnewmedia/oakengine-installer/commits/1.0.0