Repository navigation
0.7.0
0.7.0
For a server running v0.6.0, this release is a drop-in upgrade. Commands, permissions and existing settings work as before, and installed-version records carry over. It adds an opt-in experimental release channel and a read-only /dpm list outdated check, and it fixes several reporting problems. It also adds usage reporting, which is on by default: on first start the plugin adds a usage-reporting section to your existing config.yml, and every startup it logs whether reporting is on and how to turn it off.
Changes
Release channels
/dpm get <plugin> --experimentalinstalls a plugin's latest unreleased main-branch build and pins it to that channel.--stableswitches it back. Dependencies keep their own channel. Pinned plugins are marked[experimental]in/dpm list, and/dpm infoshows the channel. Pins are stored indpm-channels.properties(#122)/dpm updateresults now name the pinned channel and explain how to leave a channel that has no published build (#123)
Checking for updates
- New
/dpm list outdatedshows installed plugins that have a newer build, without downloading anything. Plugins whose status couldn't be checked are listed separately, so they don't look up to date (#144)
Usage reporting
- The plugin now sends a small event to the author's trace server at startup and each time a command is used. The event holds the plugin name, its version, the command name and a random server ID, and nothing about players. Sending happens off the main thread, and events are dropped silently if the server can't be reached (#133, #146, #150)
- To turn it off for this plugin, set
usage-reporting.enabled: false. To turn it off for every plugin that uses reporting, setenabled: falseinplugins/trace/config.yml, or setTRACE_USAGE_REPORTING=offorDO_NOT_TRACK=1. Optionalusage-reporting.tagslabels events, for example to mark a test server (#137, #145, #151, #154)
Fixes and improvements
- Duplicate-jar detection now uses the plugin name a jar declares, not just its filename.
/dpm cleanand post-download cleanup now catch renamed copies of managed plugins (#131) - Results of async commands are also written to the server log, so you can see them when running commands over RCON (#143)
/dpm infonow counts a dependency as present when it's already loaded on the server, even if DPM didn't install it (#153)- A warning is logged when
githubTokenis empty (#138)
Upgrade notes
- If you don't want usage reporting, set
usage-reporting.enabled: falseinplugins/DansPluginManager/config.yml, or use one of the server-wide switches above, then restart. - Duplicate detection is broader now, so run
/dpm cleanwithout--confirmfirst and check the list before deleting anything.
Version
v0.6.0 → 0.7.0 — MINOR. Mechanical floor from comparing the two jars: MINOR.
Judgment: I kept the floor at minor. I found no compatibility break the jar check would miss: command syntax and permissions are unchanged, new config keys and the dpm-channels.properties file are only added, and the removed classes are internal wiring that no plugin consumes. Two changes add behaviour without breaking anything: usage reporting is on by default (#133), and conflict detection now reads a jar's declared plugin name, so /dpm clean and downloads may remove more duplicate jars (#131). The diff was truncated before GitHubReleaseRepository, PluginFileRepository, VersionRepository, ChannelRepository, ConfigRepository, the controllers and ReloadCommand, so their data, command and config effects are unknown and were not checked.
- minor: default config key added: usage-reporting.enabled
- minor: default config key added: usage-reporting.endpoint
- minor: default config key added: usage-reporting.key
- minor: default config key added: usage-reporting.tags
Java API changes (informational — nothing depends on this plugin)
- public class removed: dansplugins.dpm.data.EphemeralData
- public class removed: dansplugins.dpm.services.ConfigService
- public class removed: dansplugins.dpm.services.GitHubReleaseService
- public class removed: dansplugins.dpm.services.PluginFolderService
- public class removed: dansplugins.dpm.services.VersionStore
- public class added: dansplugins.dpm.controllers.CleanController
- public class added: dansplugins.dpm.controllers.CleanController$CleanResult
- public class added: dansplugins.dpm.controllers.CleanController$Conflict
- public class added: dansplugins.dpm.controllers.ConfigController
- public class added: dansplugins.dpm.controllers.GetController
- public class added: dansplugins.dpm.controllers.GetController$DependencyResolutionResult
- public class added: dansplugins.dpm.controllers.GetController$Outcome
- public class added: dansplugins.dpm.controllers.GetController$PluginResult
- public class added: dansplugins.dpm.controllers.GetController$Target
- public class added: dansplugins.dpm.controllers.InfoController
- public class added: dansplugins.dpm.controllers.InfoController$PluginInfo
- public class added: dansplugins.dpm.controllers.ListController
- public class added: dansplugins.dpm.controllers.ListController$ListEntry
- public class added: dansplugins.dpm.controllers.ListController$OutdatedEntry
- public class added: dansplugins.dpm.controllers.ListController$Staleness
- public class added: dansplugins.dpm.controllers.ReloadController
- public class added: dansplugins.dpm.controllers.RemoveController
- public class added: dansplugins.dpm.controllers.RemoveController$Outcome
- public class added: dansplugins.dpm.controllers.RemoveController$RemovalPreview
- public class added: dansplugins.dpm.controllers.RemoveController$RemovalResult
- public class added: dansplugins.dpm.controllers.SearchController
- public class added: dansplugins.dpm.controllers.SearchController$SearchResult
- public class added: dansplugins.dpm.controllers.StatsController
- public class added: dansplugins.dpm.controllers.StatsController$Stats
- public class added: dansplugins.dpm.controllers.UpdateController
- public class added: dansplugins.dpm.controllers.UpdateController$Outcome
- public class added: dansplugins.dpm.controllers.UpdateController$PluginResult
- public class added: dansplugins.dpm.controllers.UpdateController$SelectionResult
- public class added: dansplugins.dpm.objects.ReleaseChannel
- public class added: dansplugins.dpm.repositories.ChannelRepository
- public class added: dansplugins.dpm.repositories.ConfigRepository
- public class added: dansplugins.dpm.repositories.GitHubReleaseRepository
- public class added: dansplugins.dpm.repositories.PluginFileRepository
- public class added: dansplugins.dpm.repositories.ProjectRecordRepository
- public class added: dansplugins.dpm.repositories.VersionRepository
- public class added: dansplugins.dpm.trace.TraceClient
- public class added: dansplugins.dpm.trace.TraceClient$Builder
- public class added: dansplugins.dpm.utils.ResultMessenger
- dansplugins.dpm.DansPluginManager: removed/changed public void reloadDpm();
- dansplugins.dpm.commands.CleanCommand: removed/changed public dansplugins.dpm.commands.CleanCommand(dansplugins.dpm.data.EphemeralData, dansplugins.dpm.services.PluginFolderService, org.bukkit.plugin.Plugin);
- dansplugins.dpm.commands.CleanCommand: added public dansplugins.dpm.commands.CleanCommand(dansplugins.dpm.controllers.CleanController, org.bukkit.plugin.Plugin);
- dansplugins.dpm.commands.GetCommand: removed/changed public dansplugins.dpm.commands.GetCommand(dansplugins.dpm.data.EphemeralData, dansplugins.dpm.services.DownloadService, dansplugins.dpm.services.DependencyResolutionService, dansplugins.dpm.services.VersionStore, dansplugins.dpm.services.DiscordNotificationService, org.bukkit.plugin.Plugin);
- dansplugins.dpm.commands.GetCommand: added public dansplugins.dpm.commands.GetCommand(dansplugins.dpm.repositories.ProjectRecordRepository, dansplugins.dpm.controllers.GetController, org.bukkit.plugin.Plugin);
- dansplugins.dpm.commands.InfoCommand: removed/changed public dansplugins.dpm.commands.InfoCommand(dansplugins.dpm.data.EphemeralData, dansplugins.dpm.services.GitHubReleaseService, dansplugins.dpm.services.PluginFolderService, dansplugins.dpm.services.VersionStore, org.bukkit.plugin.Plugin);
- dansplugins.dpm.commands.InfoCommand: added public dansplugins.dpm.commands.InfoCommand(dansplugins.dpm.controllers.InfoController, org.bukkit.plugin.Plugin);
- dansplugins.dpm.commands.ListCommand: removed/changed public dansplugins.dpm.commands.ListCommand(dansplugins.dpm.data.EphemeralData, dansplugins.dpm.services.PluginFolderService, dansplugins.dpm.services.VersionStore);
- dansplugins.dpm.commands.ListCommand: added public dansplugins.dpm.commands.ListCommand(dansplugins.dpm.controllers.ListController, dansplugins.dpm.repositories.ChannelRepository, org.bukkit.plugin.Plugin);
- dansplugins.dpm.commands.ReloadCommand: removed/changed public dansplugins.dpm.commands.ReloadCommand(dansplugins.dpm.DansPluginManager);
- dansplugins.dpm.commands.ReloadCommand: added public dansplugins.dpm.commands.ReloadCommand(dansplugins.dpm.controllers.ReloadController);
- dansplugins.dpm.commands.RemoveCommand: removed/changed public dansplugins.dpm.commands.RemoveCommand(dansplugins.dpm.data.EphemeralData, dansplugins.dpm.services.PluginFolderService, dansplugins.dpm.services.VersionStore, dansplugins.dpm.services.DependencyResolutionService, org.bukkit.plugin.Plugin);
- dansplugins.dpm.commands.RemoveCommand: added public dansplugins.dpm.commands.RemoveCommand(dansplugins.dpm.repositories.ProjectRecordRepository, dansplugins.dpm.controllers.RemoveController);
- dansplugins.dpm.commands.SearchCommand: removed/changed public dansplugins.dpm.commands.SearchCommand(dansplugins.dpm.data.EphemeralData, dansplugins.dpm.services.PluginFolderService, dansplugins.dpm.services.VersionStore);
- dansplugins.dpm.commands.SearchCommand: added public dansplugins.dpm.commands.SearchCommand(dansplugins.dpm.controllers.SearchController);
- dansplugins.dpm.commands.StatsCommand: removed/changed public dansplugins.dpm.commands.StatsCommand(dansplugins.dpm.data.EphemeralData, dansplugins.dpm.services.PluginFolderService);
- dansplugins.dpm.commands.StatsCommand: added public dansplugins.dpm.commands.StatsCommand(dansplugins.dpm.controllers.StatsController);
Verification
Verified on a real Spigot server before publication; this release carries the exact jar that was verified.
- install gate run: this build of the manager installed and enabled
easylinks,foodspoilage,herald,minifactions,playerlore,simpleskillson a fresh server (15 assertions passed).
Install with Dan's Plugin Manager: /dpm get <plugin>. How stable releases are made: Release channels.
drafted by Claude on behalf of Daniel Stephenson