Features:
- Rework the Installer to load pre-built
ebinartifacts at runtime (:path,:url,:github_tag,:github_latest_release) with nomix/source compilation — release-safe #102 - Add a
Req-basedDownloaderfor:url/:github_tag/:github_latest_releaseartifact downloads #102 - Add an install allow/deny policy via
config :mishka_installer, :allowlist(url_hosts,github_repos,protected_apps) #102 - Add optional SHA-256
checksum:verification for downloaded artifacts #102 - Replay installed apps on boot via
Installer.CompileHandler— re-load and start from disk + Mnesia, working in a release's embedded code-loading mode #102 - Add a plugin health-check system: optional
health_check/0plusHook.plugin_health/2,event_health/2, andhealth/1#102 - Add the optional
on_dependency_error/1Hook callback for reacting to registration/dependency errors #102 - Add
Hook.profile/2to measure each plugin's run time in a compiled event chain #102 - Add dynamic Mnesia cluster membership to
MnesiaRepo(auto/seed/join,disc_copies, node up/down handling) #102 - Add a volume-friendly, configurable
:extensions_pathand Mnesia dir, a Production deployment guide, and a realmix releasestart/restart test #102 - Add
lib/helperutilities (Helper.Extra,Helper.UUID) andQueueAssistant#102
Refactors:
- Unroll the plugin call chain at compile time in
ModuleStateCompiler(direct dispatch,{:reply, state}continue /{:reply, :halt, state}halt) and memoize the event→module mapping in:persistent_termfor the hotHook.call/3path #102 - Breaking — move the Mnesia helpers under the
Helpernamespace:MishkaInstaller.MnesiaAssistant.*→MishkaInstaller.Helper.MnesiaAssistant.*(now inlib/helper/) #102 - Breaking — make the installer allowlist fail-closed: an empty/absent
url_hosts/github_reposnow blocks remote installs (local:pathinstalls are unaffected) #102 - Remove the legacy runtime-compilation path (
System.cmd/Portrunningmix deps.get/compile) andinstaller/collect.ex#102 - Slim the
Hookmacro to thin delegators (logic centralized inEvent.Hook) and explicitly load installed app modules for release (embedded) mode #102 - Expand the test suite with real/dynamic tests (real Hook GenServers, real Mnesia,
Req.Test) and raise coverage #102
Bugs:
- Fix dependency auto-start: lifecycle broadcasts carried empty data, so a
:heldplugin never auto-started when the dependency it waited on activated #102 - Fix infinite recursion in
Helper.MnesiaAssistant.Error.error_description/2on an unknown aborted-tuple reason #102 - Fix path traversal: reject an
app/versionwhose resolved package path escapes the extensions directory before anyFile.rm_rf!/rename/extract (install and uninstall) #102 - Fix tar-slip: reject archive members with absolute or
..paths before extraction #102 - Fix
@impl/deprecation/codegen warnings (declareon_dependency_error/1,module.initialize?()parens, generated:haltclause) #102
Changelog for MishkaInstaller 0.1.1
Global
- [x] Add
guarded_structdep - [x] Update all deps and test for Elixir 1.17.2
Improvement:
- [x] Add
callbacksandbehaviourto Hook macro Link
Changelog for MishkaInstaller 0.1.0
Kindly ensure that the MishkaInstaller Library is updated as quickly as feasible. This version includes rewriting whole project. It should be noted we do not support previous versions.
You will see that this version of the project has undergone a total overhaul, and the strategy that was taken to it has been radically altered.
Because of this, it is not possible to write down the details, and each area has its own document that you are able to study thoroughly.