diff --git a/CHANGELOG.md b/CHANGELOG.md index 52bb3b94b..aeae72747 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,83 +6,86 @@ and this project adheres to ## [Unreleased] +## [v6.0.0] - 2026-10-05 + ### Added -- 👷(ci) lint, typecheck, build and test the collaboration server (yhub) -- 👷(ci) check the load-test tooling: swarm, canary, k6 and dashboards -- 👷(ci) cancel the superseded runs of a pull request +- 👷(ci) lint, typecheck, build and test the collaboration server (yhub) #2757 +- 👷(ci) check the load-test tooling: swarm, canary, k6 and dashboards #2757 +- 👷(ci) cancel the superseded runs of a pull request #2757 - ✨(backend) add mention endpoint with cooldown-limited email notification #2447 - 🚩(setting) add feature flag on Duplicate with Children #2721 - 💄(frontend) redesign 404 error standalone page #2696 - 💄(frontend) redesign 403 access denied page #2720 - ✨(frontend) duplicate with subdocuments #2584 +- ✨(frontend) add markdown download option #2608 +- ✨(frontend) turn pasted doc links into interlinks #2713 - ✨(helm) allow disallowing search engine indexing per instance #2694 -- 🐛(frontend) reduce PostHog volume from web vitals and opt_in spam #2701 - ✨(backend) expose the attachment max size in the config endpoint #2577 - ✨(frontend) warn before uploading an attachment over the size limit #2577 -- ✨(loadtest) add a websocket load generator for the collaboration server +- ✨(loadtest) add a websocket load generator for the collaboration + server #2556 - ✨(loadtest) add k6 scenarios for the page-open sequence and the heavy - endpoints -- ✨(loadtest) add browser canaries measuring what a user feels under load + endpoints #2556 +- ✨(loadtest) add browser canaries measuring what a user feels under + load #2556 - ✨(loadtest) add the grafana dashboards of the load-test campaign, valkey - included -- 📝(documentation) add the load-testing guide + included #2556 +- 📝(documentation) add the load-testing guide #2556 - 🔧(helm) run grafana with those dashboards in the dev cluster, in place of - the prometheus console + the prometheus console #2556 - ✨(backend) measure the calls to yhub and to the converters, the database - pool and the celery queue + pool and the celery queue #2556 - ✨(backend) add a `LoadTest` configuration and its `loadtest` application, - minting sessions for load tests + minting sessions for load tests #2556 - ✨(collaboration) add opt-in prometheus metrics to yhub, server and worker, - protected by a bearer token + protected by a bearer token #2556 - ✨(collaboration) report yhub errors to sentry, configured through - `SENTRY_*` + `SENTRY_*` #2556 - ✨(backend) add opt-in prometheus metrics on `/metrics`, protected by a - bearer token + bearer token #2556 - ✨(helm) add a dedicated ingress for the prometheus metrics of the backend - and of yhub + and of yhub #2556 - ✨(helm) add a ServiceMonitor and a PodMonitor per component whose metrics - are enabled, and `backend.metrics.enabled` + are enabled, and `backend.metrics.enabled` #2556 - 🔧(helm) scrape the metrics of the dev cluster with a trimmed - kube-prometheus-stack and the ServiceMonitors of the chart + kube-prometheus-stack and the ServiceMonitors of the chart #2556 - 🔧(helm) serve the example console of django-prometheus on the dev - Prometheus -- ✨(backend) add a service generating cached RS256 JWT tokens -- ✨(backend) publish the JWT public key on a JWKS endpoint -- 🔧(dev) generate the JWT signing key when bootstrapping the dev stack -- ✨(collaboration) add an admin reset-connections endpoint on yhub -- ✨(collaboration) add a create-ydoc endpoint on yhub -- 🔧(backend) fine tune redis cache options -- ✨(frontend) make the full last-update date available #1215 -- ✨(collaboration) soft-migrate legacy S3 documents into yhub -- ✨(collaboration) replay legacy s3 version history into yhub -- ✨(backend) add a service to call the yhub REST API -- ✨(backend) call YHubService to seed initial document content -- ✨(collaboration) add a get-ydoc endpoint on yhub -- ✨(backend) duplicate a document through the collaboration server -- ✨(backend) serve `documents/{id}/formatted-content/` from yhub -- ✨(collaboration) notify the backend when the worker persists new content -- 🐛(frontend) stop reconnecting to the websocket based on the status code -- ✨(collaboration) let a user read the document's editing history -- ✨(frontend) fall back to http polling when the websocket cannot be opened. + Prometheus #2556 +- ✨(backend) add a service generating cached RS256 JWT tokens #2556 +- ✨(backend) publish the JWT public key on a JWKS endpoint #2556 +- 🔧(dev) generate the JWT signing key when bootstrapping the dev stack #2556 +- ✨(collaboration) add an admin reset-connections endpoint on yhub #2556 +- ✨(collaboration) add a create-ydoc endpoint on yhub #2556 +- ✨(collaboration) soft-migrate legacy S3 documents into yhub #2556 +- ✨(collaboration) replay legacy s3 version history into yhub #2556 +- ✨(backend) add a service to call the yhub REST API #2556 +- ✨(backend) call YHubService to seed initial document content #2556 +- ✨(collaboration) add a get-ydoc endpoint on yhub #2556 +- ✨(backend) duplicate a document through the collaboration server #2556 +- ✨(backend) serve `documents/{id}/formatted-content/` from yhub #2556 +- ✨(collaboration) notify the backend when the worker persists new + content #2556 +- ✨(collaboration) let a user read the document's editing history #2556 +- ✨(frontend) fall back to http polling when the websocket cannot be + opened. #2556 - 🔧(collaboration) make the version-history granularity configurable through - `COLLABORATION_VERSION_GRANULARITY_MS` + `COLLABORATION_VERSION_GRANULARITY_MS` #2556 - ✨(frontend) keep a local copy of documents, so they open and stay editable - offline -- 🐛(frontend) stop the service worker from caching the collaboration server's - rest api + offline #2556 ### Changed - 🛂(backend) let users allowed to comment list each other's accesses #2447 -- ♻️(collaboration) migrate the collaboration server from hocuspocus to yhub -- 💥(y-provider) y-provider becomes converter-only +- ♻️(collaboration) migrate the collaboration server from hocuspocus to + yhub #2556 +- 💥(y-provider) y-provider becomes converter-only #2556 - 💥(backend) move the resource server JWKS from `/api/{version}/jwks` to - `/external_api/{version}/jwks` -- 🔧(collaboration) adapt docker stack for development purpose -- 🔧(helm) run a valkey for the backend and one for yhub in dev and feature -- ✨(frontend) turn pasted doc links into interlinks #2713 + `/external_api/{version}/jwks` #2556 +- 🔧(collaboration) adapt docker stack for development purpose #2556 +- 🔧(helm) run a valkey for the backend and one for yhub in dev and + feature #2556 - 💄(frontend) redesign 401 error standalone page #2716 ### Fixed @@ -94,8 +97,8 @@ and this project adheres to - 🐛(frontend) cache hashed `/_next/static/` assets and revalidate HTML #2770 - 🐛(backend) compensate document duplication failures #2755 - 🐛(frontend) open search results in a new tab with ctrl/cmd+click #2719 -- 🐛(docker) pull minio images from pgsty -- 🐛(backend) retry the duplicate of a document on a tree path collision +- 🐛(docker) pull minio images from pgsty #2739 +- 🐛(backend) retry the duplicate of a document on a tree path collision #2726 - 🐛(frontend) keep caption and alignment when replacing an image #2730 - 🐛(backend) reset the collaboration connections on every access change #2725 - ⚡️(backend) coalesce and pace the resets of collaboration connections #2725 @@ -106,18 +109,24 @@ and this project adheres to - 📝(docs) fix markdown typo in installation README #2766 - 🐛(i18n) export locale correctly #2750 - 🐛(frontend) keep login and logout out of the service worker cache #2771 +- 🐛(frontend) reduce PostHog volume from web vitals and opt_in spam #2701 +- 🐛(frontend) stop reconnecting to the websocket based on the status + code #2556 +- 🐛(frontend) stop the service worker from caching the collaboration server's + rest api #2556 ### Removed -- 🔥(backend) remove the unused `CollaborationService` -- 💥(backend) remove the `documents/{id}/can-edit/` endpoint -- 💥(backend) remove the `documents/{id}/content/` endpoint -- 🔥(backend) remove the document version endpoints. -- 🔥(backend) remove `Document.content` +- 🔥(backend) remove the unused `CollaborationService` #2556 +- 💥(backend) remove the `documents/{id}/can-edit/` endpoint #2556 +- 💥(backend) remove the `documents/{id}/content/` endpoint #2556 +- 🔥(backend) remove the document version endpoints. #2556 +- 🔥(backend) remove `Document.content` #2556 ### Security -- 🔒️(collaboration) stop read-only users from sharing their cursor +- 🔒️(collaboration) stop read-only users from sharing their cursor #2556 +- 🔒️(backend) fix race conditions between actions updating a docs #2781 ## [v5.7.0] - 2026-09-15 @@ -126,7 +135,6 @@ and this project adheres to - 🔧(backend) fine tune redis cache options #2658 - ✨(frontend) make the full last-update date available #1215 - 💄(frontend) redesign email confirmation standalone page #2601 -- ✨(frontend) add markdown download option #2608 ### Changed @@ -1636,7 +1644,8 @@ and this project adheres to - ✨(frontend) Coming Soon page (#67) - 🚀 Impress, project to manage your documents easily and collaboratively. -[unreleased]: https://github.com/suitenumerique/docs/compare/v5.7.0...main +[unreleased]: https://github.com/suitenumerique/docs/compare/v6.0.0...main +[v6.0.0]: https://github.com/suitenumerique/docs/releases/v6.0.0 [v5.7.0]: https://github.com/suitenumerique/docs/releases/v5.7.0 [v5.6.1]: https://github.com/suitenumerique/docs/releases/v5.6.1 [v5.6.0]: https://github.com/suitenumerique/docs/releases/v5.6.0 diff --git a/UPGRADE.md b/UPGRADE.md index 976a06670..bf20282c1 100644 --- a/UPGRADE.md +++ b/UPGRADE.md @@ -16,6 +16,8 @@ the following command inside your docker container: ## [Unreleased] +## [6.0.0] - 2026-10-05 + ⚠️ This release replaces the collaboration server. The content of a document does not live in the object storage anymore, it lives in that server, and the `y-provider` that used to serve the websocket does not serve it. There is a new diff --git a/src/backend/pyproject.toml b/src/backend/pyproject.toml index 0a1462e5d..3f9865b15 100644 --- a/src/backend/pyproject.toml +++ b/src/backend/pyproject.toml @@ -7,7 +7,7 @@ build-backend = "uv_build" [project] name = "impress" -version = "5.7.0" +version = "6.0.0" authors = [{ "name" = "DINUM", "email" = "dev@mail.numerique.gouv.fr" }] classifiers = [ "Development Status :: 5 - Production/Stable", diff --git a/src/backend/uv.lock b/src/backend/uv.lock index c0b67e997..9ceb87d76 100644 --- a/src/backend/uv.lock +++ b/src/backend/uv.lock @@ -964,7 +964,7 @@ wheels = [ [[package]] name = "impress" -version = "5.7.0" +version = "6.0.0" source = { editable = "." } dependencies = [ { name = "beautifulsoup4" }, diff --git a/src/frontend/apps/e2e/package.json b/src/frontend/apps/e2e/package.json index 6502cdd2c..87463e862 100644 --- a/src/frontend/apps/e2e/package.json +++ b/src/frontend/apps/e2e/package.json @@ -1,6 +1,6 @@ { "name": "app-e2e", - "version": "5.7.0", + "version": "6.0.0", "repository": "https://github.com/suitenumerique/docs", "author": "DINUM", "license": "MIT", diff --git a/src/frontend/apps/impress/package.json b/src/frontend/apps/impress/package.json index 27f8eff58..81cda8db0 100644 --- a/src/frontend/apps/impress/package.json +++ b/src/frontend/apps/impress/package.json @@ -1,6 +1,6 @@ { "name": "app-impress", - "version": "5.7.0", + "version": "6.0.0", "repository": "https://github.com/suitenumerique/docs", "author": "DINUM", "license": "MIT", diff --git a/src/frontend/package.json b/src/frontend/package.json index 6e561008c..ab0fdaa7a 100644 --- a/src/frontend/package.json +++ b/src/frontend/package.json @@ -1,6 +1,6 @@ { "name": "impress", - "version": "5.7.0", + "version": "6.0.0", "private": true, "repository": "https://github.com/suitenumerique/docs", "author": "DINUM", diff --git a/src/frontend/packages/eslint-plugin-docs/package.json b/src/frontend/packages/eslint-plugin-docs/package.json index cfb9db205..9ecf03876 100644 --- a/src/frontend/packages/eslint-plugin-docs/package.json +++ b/src/frontend/packages/eslint-plugin-docs/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-docs", - "version": "5.7.0", + "version": "6.0.0", "repository": "https://github.com/suitenumerique/docs", "author": "DINUM", "license": "MIT", diff --git a/src/frontend/packages/i18n/package.json b/src/frontend/packages/i18n/package.json index 3dc661d7c..6158e341c 100644 --- a/src/frontend/packages/i18n/package.json +++ b/src/frontend/packages/i18n/package.json @@ -1,6 +1,6 @@ { "name": "packages-i18n", - "version": "5.7.0", + "version": "6.0.0", "repository": "https://github.com/suitenumerique/docs", "author": "DINUM", "license": "MIT", diff --git a/src/frontend/servers/y-provider/package.json b/src/frontend/servers/y-provider/package.json index 921a6de68..ef6a6a369 100644 --- a/src/frontend/servers/y-provider/package.json +++ b/src/frontend/servers/y-provider/package.json @@ -1,6 +1,6 @@ { "name": "server-y-provider", - "version": "5.7.0", + "version": "6.0.0", "description": "Y.js provider for docs", "repository": "https://github.com/suitenumerique/docs", "license": "MIT", diff --git a/src/helm/impress/Chart.yaml b/src/helm/impress/Chart.yaml index 31aea3643..0b389d0a0 100644 --- a/src/helm/impress/Chart.yaml +++ b/src/helm/impress/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 type: application name: docs -version: 6.0.0-alpha.2 +version: 6.0.0 appVersion: latest diff --git a/src/mail/package.json b/src/mail/package.json index cdb686b63..a5ffe9789 100644 --- a/src/mail/package.json +++ b/src/mail/package.json @@ -1,6 +1,6 @@ { "name": "mail_mjml", - "version": "5.7.0", + "version": "6.0.0", "description": "An util to generate html and text django's templates from mjml templates", "type": "module", "dependencies": { diff --git a/src/yhub-server/package.json b/src/yhub-server/package.json index 64bc8ecdb..0ba03afc8 100644 --- a/src/yhub-server/package.json +++ b/src/yhub-server/package.json @@ -1,5 +1,6 @@ { "name": "yhub-server", + "version": "6.0.0", "private": true, "type": "module", "scripts": {