Skip to content

0.7.0

Choose a tag to compare

@dmccoystephenson dmccoystephenson released this 24 Oct 00:13
2a3da9d

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> --experimental installs a plugin's latest unreleased main-branch build and pins it to that channel. --stable switches it back. Dependencies keep their own channel. Pinned plugins are marked [experimental] in /dpm list, and /dpm info shows the channel. Pins are stored in dpm-channels.properties (#122)
  • /dpm update results now name the pinned channel and explain how to leave a channel that has no published build (#123)

Checking for updates

  • New /dpm list outdated shows 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, set enabled: false in plugins/trace/config.yml, or set TRACE_USAGE_REPORTING=off or DO_NOT_TRACK=1. Optional usage-reporting.tags labels 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 clean and 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 info now 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 githubToken is empty (#138)

Upgrade notes

  • If you don't want usage reporting, set usage-reporting.enabled: false in plugins/DansPluginManager/config.yml, or use one of the server-wide switches above, then restart.
  • Duplicate detection is broader now, so run /dpm clean without --confirm first 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, simpleskills on 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