diff --git a/CHANGELOG.md b/CHANGELOG.md index 55f9196f..4a45b8b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,11 +31,46 @@ Many thanks to the following for contributing to this release: [@username](https://github.com/username) --> -## Unreleased +## Version 2.0.3 + +### Features + +- Added per instance options to choose which parts of the player inventory sync covers. [#968]() +- Added opt-in UDP messaging between instances and the Factorio server via `factorio.enable_lua_udp`, with a `sendUdp` plugin API, `clusterio_api.send_udp` in-game and a `LuaUdp` plugin feature flag. [[#969]()]() +- Added notes that can be attached to hosts, instances, users, roles, mod packs, mods and saves in the web interface and through ctl. [#903]() +- Added tools to inspect, replace, delete and unlock player data stored by inventory sync, in the web interface and as `clusterioctl inventory-sync` commands. [#1003]() +- Notes in the web interface render as Markdown and link `@/` mentions to the resource. [#1000]() +- Added timestamps to log lines in the web interface console. [#1137]() +- Added syncing of quick bar slots that hold a specific blueprint, blueprint book or planner, including ones from the player's blueprint library, on Factorio 2.1. [#1092]() +- Added a `set_destination` remote interface to Player Sync. A plugin that moves a player to another instance calls it before `connect_to_server`, and the player's data is sent to that instance while the client reconnects, so the join applies it without a download. [#1099]() +- Added a cluster research queue to research_sync: servers can follow one research queue, set from the research screen on any following server, with a checkbox on the lab window. [#1115]() ### Fixes +- Fixed instances that start at the same time each downloading a new Factorio version into the same files and leaving a corrupt install. [[#1105]()]() +- Fixed `controller.max_send_buffer_size` counting buffered messages in UTF-16 code units instead of UTF-8 bytes, which let non-ASCII messages go over the limit. [[#1108]()]() - Removed incompatible Server Select and Discord Bridge releases from the installer's plugin choices so selecting all offered plugins no longer installs them. [#1102]() +- Fixed reading map exchange strings from Factorio 2.1.18 and later, which gave wrong enemy evolution and expansion settings and made `instance load-scenario --map-exchange-string` fail. [[#1131]()]() +- Fixed Player Sync erroring when the controller returned no data for a downloading player, which left the player waiting for the timeout. [#1094]() +- Fixed spoilable items arriving fresh after being serialized, the spoil percent is now kept. [#1093]() +- Fixed named personal logistic groups losing their requests and trash rules when joining a server where the group was missing or empty. [#1091]() +- Fixed Player Sync leaving quick bar slots from an earlier visit in place, which made moved or cleared slots come back after changing server. [#1092]() +- Fixed research_sync sending research it received from the controller back to it, so every instance got the research again each time an instance started. [#1110]() +- Fixed items in main inventory slots from armor equipment such as toolbelts not fitting in the inventory when joining another server. [#1100]() + +### Changes + +- Replaced jszip with yauzl and yazl so saves and mods are no longer loaded fully into memory when patched, read or exported. [#1002]() +- Bumped dependency versions, including typebox 0.34 and react-router 7. Plugins using `@sinclair/typebox` should update to ^0.34. [#1113]() + +### Contributors + +Many thanks to the following for contributing to this release: +[@psihius](), [@ILLISIS](), [@bbassie](), [@ColumbusLabs]() + +### Statistics + +Commits: 101 Pull Requests: 29 Files Changed: 135 Additions: +8,830 Deletions: -994 ## Version 2.0.2 diff --git a/packages/controller/package.json b/packages/controller/package.json index d33a2e56..1efe96de 100644 --- a/packages/controller/package.json +++ b/packages/controller/package.json @@ -1,6 +1,6 @@ { "name": "@clusterio/controller", - "version": "2.0.2", + "version": "2.0.3", "description": "Implementation of Clusterio controller", "homepage": "https://github.com/clusterio/clusterio#readme", "author": "Hornwitser ", diff --git a/packages/create/package.json b/packages/create/package.json index f6749a89..00b6e754 100644 --- a/packages/create/package.json +++ b/packages/create/package.json @@ -1,6 +1,6 @@ { "name": "@clusterio/create", - "version": "2.0.2", + "version": "2.0.3", "description": "Installer for clusterio", "homepage": "https://github.com/clusterio/clusterio#readme", "author": "Hornwitser ", diff --git a/packages/ctl/package.json b/packages/ctl/package.json index 13ef4f19..48930727 100644 --- a/packages/ctl/package.json +++ b/packages/ctl/package.json @@ -1,6 +1,6 @@ { "name": "@clusterio/ctl", - "version": "2.0.2", + "version": "2.0.3", "description": "Clusterio command line management tool", "homepage": "https://github.com/clusterio/clusterio#readme", "author": "Hornwitser ", diff --git a/packages/host/package.json b/packages/host/package.json index d0ae62a3..80f839c6 100644 --- a/packages/host/package.json +++ b/packages/host/package.json @@ -1,6 +1,6 @@ { "name": "@clusterio/host", - "version": "2.0.2", + "version": "2.0.3", "description": "Implementation of Clusterio host server", "homepage": "https://github.com/clusterio/clusterio#readme", "author": "Hornwitser ", diff --git a/packages/lib/package.json b/packages/lib/package.json index 9254901c..b38ab998 100644 --- a/packages/lib/package.json +++ b/packages/lib/package.json @@ -1,6 +1,6 @@ { "name": "@clusterio/lib", - "version": "2.0.2", + "version": "2.0.3", "description": "Shared library for Clusterio", "homepage": "https://github.com/clusterio/clusterio#readme", "author": "Hornwitser ", diff --git a/packages/web_ui/package.json b/packages/web_ui/package.json index beb299d1..3d5c0927 100644 --- a/packages/web_ui/package.json +++ b/packages/web_ui/package.json @@ -1,6 +1,6 @@ { "name": "@clusterio/web_ui", - "version": "2.0.2", + "version": "2.0.3", "description": "Clusterio web interface implementation", "homepage": "https://github.com/clusterio/clusterio#readme", "author": "Hornwitser", diff --git a/plugins/global_chat/package.json b/plugins/global_chat/package.json index 6d0f4524..9a10b903 100644 --- a/plugins/global_chat/package.json +++ b/plugins/global_chat/package.json @@ -1,6 +1,6 @@ { "name": "@clusterio/plugin-global_chat", - "version": "2.0.2", + "version": "2.0.3", "description": "Clusterio plugin forwarding between Factorio servers", "homepage": "https://github.com/clusterio/clusterio#readme", "author": "Hornwitser ", diff --git a/plugins/player_auth/package.json b/plugins/player_auth/package.json index 0d2adb4c..b93e21ef 100644 --- a/plugins/player_auth/package.json +++ b/plugins/player_auth/package.json @@ -1,6 +1,6 @@ { "name": "@clusterio/plugin-player_auth", - "version": "2.0.2", + "version": "2.0.3", "description": "Clusterio plugin authenticating logged in players to the web interface", "homepage": "https://github.com/clusterio/clusterio#readme", "author": "Hornwitser ", diff --git a/plugins/player_sync/package.json b/plugins/player_sync/package.json index c95e068f..8260bf66 100644 --- a/plugins/player_sync/package.json +++ b/plugins/player_sync/package.json @@ -1,6 +1,6 @@ { "name": "@clusterio/plugin-player_sync", - "version": "2.0.2", + "version": "2.0.3", "description": "Clusterio plugin forwarding between Factorio servers", "homepage": "https://github.com/clusterio/clusterio#readme", "author": "Danielv ", diff --git a/plugins/research_sync/package.json b/plugins/research_sync/package.json index ff7776fc..237ae7c3 100644 --- a/plugins/research_sync/package.json +++ b/plugins/research_sync/package.json @@ -1,6 +1,6 @@ { "name": "@clusterio/plugin-research_sync", - "version": "2.0.2", + "version": "2.0.3", "description": "Clusterio plugin for synchronizing research between Factorio servers", "homepage": "https://github.com/clusterio/clusterio#readme", "author": "Hornwitser ", diff --git a/plugins/statistics_exporter/package.json b/plugins/statistics_exporter/package.json index df9e3dc1..10646e32 100644 --- a/plugins/statistics_exporter/package.json +++ b/plugins/statistics_exporter/package.json @@ -1,6 +1,6 @@ { "name": "@clusterio/plugin-statistics_exporter", - "version": "2.0.2", + "version": "2.0.3", "description": "Clusterio plugin for gathering statistics from Factorio servers", "homepage": "https://github.com/clusterio/clusterio#readme", "author": "Hornwitser ", diff --git a/plugins/subspace_storage/package.json b/plugins/subspace_storage/package.json index fdf9f34d..c13946b1 100644 --- a/plugins/subspace_storage/package.json +++ b/plugins/subspace_storage/package.json @@ -1,6 +1,6 @@ { "name": "@clusterio/plugin-subspace_storage", - "version": "2.0.2", + "version": "2.0.3", "description": "Clusterio plugin for sharing storage between Factorio servers", "homepage": "https://github.com/clusterio/clusterio#readme", "author": "Hornwitser ", diff --git a/scripts/pr_to_changelog.mts b/scripts/pr_to_changelog.mts index 1c1ac2f6..9fe18305 100644 --- a/scripts/pr_to_changelog.mts +++ b/scripts/pr_to_changelog.mts @@ -160,11 +160,15 @@ function parseChangelog(parser: ParserState, pr: Issue, issues: Issue[]): [Chang function changelogFromPullRequests(pullRequests: Issue[], issues: Issue[]) { const mergedChangelog: Changelog = Object.create(null); for (const pr of pullRequests) { + if (!pr.body) { + console.error(`Failed to extract changelog in ${pr.html_url}: Pull request has no body`); + continue; + } const [ changelogFail, changelogLines, changelogFailReason - ] = extractPullRequestChangelog(createParser(pr.body!.split(/\r?\n/))); + ] = extractPullRequestChangelog(createParser(pr.body.split(/\r?\n/))); if (changelogFail) { console.error(`Failed to extract changelog in ${pr.html_url}: ${changelogFailReason}`) continue;