diff --git a/.circleci/config.yml b/.circleci/config.yml
deleted file mode 100644
index cf1989eff9..0000000000
--- a/.circleci/config.yml
+++ /dev/null
@@ -1,78 +0,0 @@
-version: 2.1
-jobs:
- dockerhubuploadrelease:
- docker:
- - image: docker:git
- steps:
- - checkout
- - docker_prepare
- - run: docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD
- # for release builds, we want to get the amd64 image out asap, so first
- # we do an amd64-only build, before following up with a multiarch build.
- - docker_build:
- tag: -t matrixdotorg/synapse:${CIRCLE_TAG}
- platforms: linux/amd64
- - docker_build:
- tag: -t matrixdotorg/synapse:${CIRCLE_TAG}
- platforms: linux/amd64,linux/arm64
-
- dockerhubuploadlatest:
- docker:
- - image: docker:git
- steps:
- - checkout
- - docker_prepare
- - run: docker login --username $DOCKER_HUB_USERNAME --password $DOCKER_HUB_PASSWORD
- # for `latest`, we don't want the arm images to disappear, so don't update the tag
- # until all of the platforms are built.
- - docker_build:
- tag: -t matrixdotorg/synapse:latest
- platforms: linux/amd64,linux/arm64
-
-workflows:
- build:
- jobs:
- - dockerhubuploadrelease:
- filters:
- tags:
- only: /v[0-9].[0-9]+.[0-9]+.*/
- branches:
- ignore: /.*/
- - dockerhubuploadlatest:
- filters:
- branches:
- only: [ master, main ]
-
-commands:
- docker_prepare:
- description: Sets up a remote docker server, downloads the buildx cli plugin, and enables multiarch images
- parameters:
- buildx_version:
- type: string
- default: "v0.4.1"
- steps:
- - setup_remote_docker:
- # 19.03.13 was the most recent available on circleci at the time of
- # writing.
- version: 19.03.13
- - run: apk add --no-cache curl
- - run: mkdir -vp ~/.docker/cli-plugins/ ~/dockercache
- - run: curl --silent -L "https://github.com/docker/buildx/releases/download/<< parameters.buildx_version >>/buildx-<< parameters.buildx_version >>.linux-amd64" > ~/.docker/cli-plugins/docker-buildx
- - run: chmod a+x ~/.docker/cli-plugins/docker-buildx
- # install qemu links in /proc/sys/fs/binfmt_misc on the docker instance running the circleci job
- - run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
- # create a context named `builder` for the builds
- - run: docker context create builder
- # create a buildx builder using the new context, and set it as the default
- - run: docker buildx create builder --use
-
- docker_build:
- description: Builds and pushed images to dockerhub using buildx
- parameters:
- platforms:
- type: string
- default: linux/amd64
- tag:
- type: string
- steps:
- - run: docker buildx build -f docker/Dockerfile --push --platform << parameters.platforms >> --label gitsha1=${CIRCLE_SHA1} << parameters.tag >> --progress=plain .
diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml
new file mode 100644
index 0000000000..af7ed21fce
--- /dev/null
+++ b/.github/workflows/docker.yml
@@ -0,0 +1,72 @@
+# GitHub actions workflow which builds and publishes the docker images.
+
+name: Build docker images
+
+on:
+ push:
+ tags: ["v*"]
+ branches: [ master, main ]
+ workflow_dispatch:
+
+permissions:
+ contents: read
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Set up QEMU
+ id: qemu
+ uses: docker/setup-qemu-action@v1
+ with:
+ platforms: arm64
+
+ - name: Set up Docker Buildx
+ id: buildx
+ uses: docker/setup-buildx-action@v1
+
+ - name: Inspect builder
+ run: docker buildx inspect
+
+ - name: Log in to DockerHub
+ uses: docker/login-action@v1
+ with:
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
+
+ - name: Calculate docker image tag
+ id: set-tag
+ run: |
+ case "${GITHUB_REF}" in
+ refs/heads/master|refs/heads/main)
+ tag=latest
+ ;;
+ refs/tags/*)
+ tag=${GITHUB_REF#refs/tags/}
+ ;;
+ *)
+ tag=${GITHUB_SHA}
+ ;;
+ esac
+ echo "::set-output name=tag::$tag"
+
+ # for release builds, we want to get the amd64 image out asap, so first
+ # we do an amd64-only build, before following up with a multiarch build.
+ - name: Build and push amd64
+ uses: docker/build-push-action@v2
+ if: "${{ startsWith(github.ref, 'refs/tags/v') }}"
+ with:
+ push: true
+ labels: "gitsha1=${{ github.sha }}"
+ tags: "matrixdotorg/synapse:${{ steps.set-tag.outputs.tag }}"
+ file: "docker/Dockerfile"
+ platforms: linux/amd64
+
+ - name: Build and push all platforms
+ uses: docker/build-push-action@v2
+ with:
+ push: true
+ labels: "gitsha1=${{ github.sha }}"
+ tags: "matrixdotorg/synapse:${{ steps.set-tag.outputs.tag }}"
+ file: "docker/Dockerfile"
+ platforms: linux/amd64,linux/arm64
diff --git a/CHANGES.md b/CHANGES.md
index 82baaa2d1f..13d3654095 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,3 +1,96 @@
+Synapse 1.39.0rc2 (2021-07-22)
+==============================
+
+Bugfixes
+--------
+
+- Always include `device_one_time_keys_count` key in `/sync` response to work around a bug in Element Android that broke encryption for new devices. ([\#10457](https://github.com/matrix-org/synapse/issues/10457))
+
+
+Internal Changes
+----------------
+
+- Move docker image build to Github Actions. ([\#10416](https://github.com/matrix-org/synapse/issues/10416))
+
+
+Synapse 1.38.1 (2021-07-22)
+===========================
+
+Bugfixes
+--------
+
+- Always include `device_one_time_keys_count` key in `/sync` response to work around a bug in Element Android that broke encryption for new devices. ([\#10457](https://github.com/matrix-org/synapse/issues/10457))
+
+
+Synapse 1.39.0rc1 (2021-07-20)
+==============================
+
+The Third-Party Event Rules module interface has been deprecated in favour of the generic module interface introduced in Synapse v1.37.0. Support for the old interface is planned to be removed in September 2021. See the [upgrade notes](https://matrix-org.github.io/synapse/latest/upgrade.html#upgrading-to-v1390) for more information.
+
+Features
+--------
+
+- Add the ability to override the account validity feature with a module. ([\#9884](https://github.com/matrix-org/synapse/issues/9884))
+- The spaces summary API now returns any joinable rooms, not only rooms which are world-readable. ([\#10298](https://github.com/matrix-org/synapse/issues/10298), [\#10305](https://github.com/matrix-org/synapse/issues/10305))
+- Add a new version of the R30 phone-home metric, which removes a false impression of retention given by the old R30 metric. ([\#10332](https://github.com/matrix-org/synapse/issues/10332), [\#10427](https://github.com/matrix-org/synapse/issues/10427))
+- Allow providing credentials to `http_proxy`. ([\#10360](https://github.com/matrix-org/synapse/issues/10360))
+
+
+Bugfixes
+--------
+
+- Fix error while dropping locks on shutdown. Introduced in v1.38.0. ([\#10433](https://github.com/matrix-org/synapse/issues/10433))
+- Add base starting insertion event when no chunk ID is specified in the historical batch send API. ([\#10250](https://github.com/matrix-org/synapse/issues/10250))
+- Fix historical batch send endpoint (MSC2716) rejecting batches with messages from multiple senders. ([\#10276](https://github.com/matrix-org/synapse/issues/10276))
+- Fix purging rooms that other homeservers are still sending events for. Contributed by @ilmari. ([\#10317](https://github.com/matrix-org/synapse/issues/10317))
+- Fix errors during backfill caused by previously purged redaction events. Contributed by Andreas Rammhold (@andir). ([\#10343](https://github.com/matrix-org/synapse/issues/10343))
+- Fix the user directory becoming broken (and noisy errors being logged) when knocking and room statistics are in use. ([\#10344](https://github.com/matrix-org/synapse/issues/10344))
+- Fix newly added `synapse_federation_server_oldest_inbound_pdu_in_staging` prometheus metric to measure age rather than timestamp. ([\#10355](https://github.com/matrix-org/synapse/issues/10355))
+- Fix PostgreSQL sometimes using table scans for queries against `state_groups_state` table, taking a long time and a large amount of IO. ([\#10359](https://github.com/matrix-org/synapse/issues/10359))
+- Fix `make_room_admin` failing for users that have left a private room. ([\#10367](https://github.com/matrix-org/synapse/issues/10367))
+- Fix a number of logged errors caused by remote servers being down. ([\#10400](https://github.com/matrix-org/synapse/issues/10400), [\#10414](https://github.com/matrix-org/synapse/issues/10414))
+- Responses from `/make_{join,leave,knock}` no longer include signatures, which will turn out to be invalid after events are returned to `/send_{join,leave,knock}`. ([\#10404](https://github.com/matrix-org/synapse/issues/10404))
+
+
+Improved Documentation
+----------------------
+
+- Updated installation dependencies for newer macOS versions and ARM Macs. Contributed by Luke Walsh. ([\#9971](https://github.com/matrix-org/synapse/issues/9971))
+- Simplify structure of room admin API. ([\#10313](https://github.com/matrix-org/synapse/issues/10313))
+- Refresh the logcontext dev documentation. ([\#10353](https://github.com/matrix-org/synapse/issues/10353)), ([\#10337](https://github.com/matrix-org/synapse/issues/10337))
+- Add delegation example for caddy in the reverse proxy documentation. Contributed by @moritzdietz. ([\#10368](https://github.com/matrix-org/synapse/issues/10368))
+- Fix and clarify some links in `docs` and `contrib`. ([\#10370](https://github.com/matrix-org/synapse/issues/10370)), ([\#10322](https://github.com/matrix-org/synapse/issues/10322)), ([\#10399](https://github.com/matrix-org/synapse/issues/10399))
+- Make deprecation notice of the spam checker doc more obvious. ([\#10395](https://github.com/matrix-org/synapse/issues/10395))
+- Add instructions on installing Debian packages for release candidates. ([\#10396](https://github.com/matrix-org/synapse/issues/10396))
+
+
+Deprecations and Removals
+-------------------------
+
+- Remove functionality associated with the unused `room_stats_historical` and `user_stats_historical` tables. Contributed by @xmunoz. ([\#9721](https://github.com/matrix-org/synapse/issues/9721))
+- The third-party event rules module interface is deprecated in favour of the generic module interface introduced in Synapse v1.37.0. See the [upgrade notes](https://matrix-org.github.io/synapse/latest/upgrade.html#upgrading-to-v1390) for more information. ([\#10386](https://github.com/matrix-org/synapse/issues/10386))
+
+
+Internal Changes
+----------------
+
+- Convert `room_depth.min_depth` column to a `BIGINT`. ([\#10289](https://github.com/matrix-org/synapse/issues/10289))
+- Add tests to characterise the current behaviour of R30 phone-home metrics. ([\#10315](https://github.com/matrix-org/synapse/issues/10315))
+- Rebuild event context and auth when processing specific results from `ThirdPartyEventRules` modules. ([\#10316](https://github.com/matrix-org/synapse/issues/10316))
+- Minor change to the code that populates `user_daily_visits`. ([\#10324](https://github.com/matrix-org/synapse/issues/10324))
+- Re-enable Sytests that were disabled for the 1.37.1 release. ([\#10345](https://github.com/matrix-org/synapse/issues/10345), [\#10357](https://github.com/matrix-org/synapse/issues/10357))
+- Run `pyupgrade` on the codebase. ([\#10347](https://github.com/matrix-org/synapse/issues/10347), [\#10348](https://github.com/matrix-org/synapse/issues/10348))
+- Switch `application_services_txns.txn_id` database column to `BIGINT`. ([\#10349](https://github.com/matrix-org/synapse/issues/10349))
+- Convert internal type variable syntax to reflect wider ecosystem use. ([\#10350](https://github.com/matrix-org/synapse/issues/10350), [\#10380](https://github.com/matrix-org/synapse/issues/10380), [\#10381](https://github.com/matrix-org/synapse/issues/10381), [\#10382](https://github.com/matrix-org/synapse/issues/10382), [\#10418](https://github.com/matrix-org/synapse/issues/10418))
+- Make the Github Actions workflow configuration more efficient. ([\#10383](https://github.com/matrix-org/synapse/issues/10383))
+- Add type hints to `get_{domain,localpart}_from_id`. ([\#10385](https://github.com/matrix-org/synapse/issues/10385))
+- When building Debian packages for prerelease versions, set the Section accordingly. ([\#10391](https://github.com/matrix-org/synapse/issues/10391))
+- Add type hints and comments to event auth code. ([\#10393](https://github.com/matrix-org/synapse/issues/10393))
+- Stagger sending of presence update to remote servers, reducing CPU spikes caused by starting many connections to remote servers at once. ([\#10398](https://github.com/matrix-org/synapse/issues/10398))
+- Remove unused `events_by_room` code (tech debt). ([\#10421](https://github.com/matrix-org/synapse/issues/10421))
+- Add a github actions job which records success of other jobs. ([\#10430](https://github.com/matrix-org/synapse/issues/10430))
+
+
Synapse 1.38.0 (2021-07-13)
===========================
diff --git a/changelog.d/10250.bugfix b/changelog.d/10250.bugfix
deleted file mode 100644
index a8107dafb2..0000000000
--- a/changelog.d/10250.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Add base starting insertion event when no chunk ID is specified in the historical batch send API.
diff --git a/changelog.d/10276.bugfix b/changelog.d/10276.bugfix
deleted file mode 100644
index 42adc57ad1..0000000000
--- a/changelog.d/10276.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix historical batch send endpoint (MSC2716) rejecting batches with messages from multiple senders.
diff --git a/changelog.d/10289.misc b/changelog.d/10289.misc
deleted file mode 100644
index 2df30e7a7a..0000000000
--- a/changelog.d/10289.misc
+++ /dev/null
@@ -1 +0,0 @@
-Convert `room_depth.min_depth` column to a `BIGINT`.
diff --git a/changelog.d/10298.feature b/changelog.d/10298.feature
deleted file mode 100644
index 7059db5075..0000000000
--- a/changelog.d/10298.feature
+++ /dev/null
@@ -1 +0,0 @@
-The spaces summary API now returns any joinable rooms, not only rooms which are world-readable.
diff --git a/changelog.d/10305.feature b/changelog.d/10305.feature
deleted file mode 100644
index 7059db5075..0000000000
--- a/changelog.d/10305.feature
+++ /dev/null
@@ -1 +0,0 @@
-The spaces summary API now returns any joinable rooms, not only rooms which are world-readable.
diff --git a/changelog.d/10313.doc b/changelog.d/10313.doc
deleted file mode 100644
index 44086e3d9d..0000000000
--- a/changelog.d/10313.doc
+++ /dev/null
@@ -1 +0,0 @@
-Simplify structure of room admin API.
\ No newline at end of file
diff --git a/changelog.d/10315.misc b/changelog.d/10315.misc
deleted file mode 100644
index 2c78644e20..0000000000
--- a/changelog.d/10315.misc
+++ /dev/null
@@ -1 +0,0 @@
-Add tests to characterise the current behaviour of R30 phone-home metrics.
diff --git a/changelog.d/10316.misc b/changelog.d/10316.misc
deleted file mode 100644
index 1fd0810fde..0000000000
--- a/changelog.d/10316.misc
+++ /dev/null
@@ -1 +0,0 @@
-Rebuild event context and auth when processing specific results from `ThirdPartyEventRules` modules.
diff --git a/changelog.d/10317.bugfix b/changelog.d/10317.bugfix
deleted file mode 100644
index 826c269eff..0000000000
--- a/changelog.d/10317.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix purging rooms that other homeservers are still sending events for. Contributed by @ilmari.
diff --git a/changelog.d/10322.doc b/changelog.d/10322.doc
deleted file mode 100644
index db604cf2aa..0000000000
--- a/changelog.d/10322.doc
+++ /dev/null
@@ -1 +0,0 @@
-Fix a broken link in the admin api docs.
diff --git a/changelog.d/10324.misc b/changelog.d/10324.misc
deleted file mode 100644
index 3c3ee6d6fc..0000000000
--- a/changelog.d/10324.misc
+++ /dev/null
@@ -1 +0,0 @@
-Minor change to the code that populates `user_daily_visits`.
diff --git a/changelog.d/10332.feature b/changelog.d/10332.feature
deleted file mode 100644
index 091947ff22..0000000000
--- a/changelog.d/10332.feature
+++ /dev/null
@@ -1 +0,0 @@
-Add a new version of the R30 phone-home metric, which removes a false impression of retention given by the old R30 metric.
diff --git a/changelog.d/10337.doc b/changelog.d/10337.doc
deleted file mode 100644
index f305bdb3ba..0000000000
--- a/changelog.d/10337.doc
+++ /dev/null
@@ -1 +0,0 @@
-Fix formatting in the logcontext documentation.
diff --git a/changelog.d/10343.bugfix b/changelog.d/10343.bugfix
deleted file mode 100644
index 53ccf79a81..0000000000
--- a/changelog.d/10343.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix errors during backfill caused by previously purged redaction events. Contributed by Andreas Rammhold (@andir).
diff --git a/changelog.d/10344.bugfix b/changelog.d/10344.bugfix
deleted file mode 100644
index ab6eb4999f..0000000000
--- a/changelog.d/10344.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix the user directory becoming broken (and noisy errors being logged) when knocking and room statistics are in use.
diff --git a/changelog.d/10345.misc b/changelog.d/10345.misc
deleted file mode 100644
index 7424486e87..0000000000
--- a/changelog.d/10345.misc
+++ /dev/null
@@ -1 +0,0 @@
-Re-enable Sytests that were disabled for the 1.37.1 release.
diff --git a/changelog.d/10347.misc b/changelog.d/10347.misc
deleted file mode 100644
index b2275a1350..0000000000
--- a/changelog.d/10347.misc
+++ /dev/null
@@ -1 +0,0 @@
-Run `pyupgrade` on the codebase.
\ No newline at end of file
diff --git a/changelog.d/10348.misc b/changelog.d/10348.misc
deleted file mode 100644
index b2275a1350..0000000000
--- a/changelog.d/10348.misc
+++ /dev/null
@@ -1 +0,0 @@
-Run `pyupgrade` on the codebase.
\ No newline at end of file
diff --git a/changelog.d/10349.misc b/changelog.d/10349.misc
deleted file mode 100644
index 5b014e7416..0000000000
--- a/changelog.d/10349.misc
+++ /dev/null
@@ -1 +0,0 @@
-Switch `application_services_txns.txn_id` database column to `BIGINT`.
diff --git a/changelog.d/10350.misc b/changelog.d/10350.misc
deleted file mode 100644
index eed2d8552a..0000000000
--- a/changelog.d/10350.misc
+++ /dev/null
@@ -1 +0,0 @@
-Convert internal type variable syntax to reflect wider ecosystem use.
\ No newline at end of file
diff --git a/changelog.d/10353.doc b/changelog.d/10353.doc
deleted file mode 100644
index 274ac83549..0000000000
--- a/changelog.d/10353.doc
+++ /dev/null
@@ -1 +0,0 @@
-Refresh the logcontext dev documentation.
diff --git a/changelog.d/10355.bugfix b/changelog.d/10355.bugfix
deleted file mode 100644
index 92df612011..0000000000
--- a/changelog.d/10355.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix newly added `synapse_federation_server_oldest_inbound_pdu_in_staging` prometheus metric to measure age rather than timestamp.
diff --git a/changelog.d/10357.misc b/changelog.d/10357.misc
deleted file mode 100644
index 7424486e87..0000000000
--- a/changelog.d/10357.misc
+++ /dev/null
@@ -1 +0,0 @@
-Re-enable Sytests that were disabled for the 1.37.1 release.
diff --git a/changelog.d/10359.bugfix b/changelog.d/10359.bugfix
deleted file mode 100644
index d318f8fa08..0000000000
--- a/changelog.d/10359.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix PostgreSQL sometimes using table scans for queries against `state_groups_state` table, taking a long time and a large amount of IO.
diff --git a/changelog.d/10360.feature b/changelog.d/10360.feature
deleted file mode 100644
index 904221cb6d..0000000000
--- a/changelog.d/10360.feature
+++ /dev/null
@@ -1 +0,0 @@
-Allow providing credentials to `http_proxy`.
\ No newline at end of file
diff --git a/changelog.d/10367.bugfix b/changelog.d/10367.bugfix
deleted file mode 100644
index b445556084..0000000000
--- a/changelog.d/10367.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Bugfix `make_room_admin` fails for users that have left a private room.
\ No newline at end of file
diff --git a/changelog.d/10368.doc b/changelog.d/10368.doc
deleted file mode 100644
index 10297aa424..0000000000
--- a/changelog.d/10368.doc
+++ /dev/null
@@ -1 +0,0 @@
-Add delegation example for caddy in the reverse proxy documentation. Contributed by @moritzdietz.
diff --git a/changelog.d/10370.doc b/changelog.d/10370.doc
deleted file mode 100644
index 8c59d98ee8..0000000000
--- a/changelog.d/10370.doc
+++ /dev/null
@@ -1 +0,0 @@
-Fix some links in `docs` and `contrib`.
\ No newline at end of file
diff --git a/changelog.d/10380.misc b/changelog.d/10380.misc
deleted file mode 100644
index eed2d8552a..0000000000
--- a/changelog.d/10380.misc
+++ /dev/null
@@ -1 +0,0 @@
-Convert internal type variable syntax to reflect wider ecosystem use.
\ No newline at end of file
diff --git a/changelog.d/10381.misc b/changelog.d/10381.misc
deleted file mode 100644
index eed2d8552a..0000000000
--- a/changelog.d/10381.misc
+++ /dev/null
@@ -1 +0,0 @@
-Convert internal type variable syntax to reflect wider ecosystem use.
\ No newline at end of file
diff --git a/changelog.d/10382.misc b/changelog.d/10382.misc
deleted file mode 100644
index eed2d8552a..0000000000
--- a/changelog.d/10382.misc
+++ /dev/null
@@ -1 +0,0 @@
-Convert internal type variable syntax to reflect wider ecosystem use.
\ No newline at end of file
diff --git a/changelog.d/10383.misc b/changelog.d/10383.misc
deleted file mode 100644
index 952c1e77a8..0000000000
--- a/changelog.d/10383.misc
+++ /dev/null
@@ -1 +0,0 @@
-Make the Github Actions workflow configuration more efficient.
diff --git a/changelog.d/10385.misc b/changelog.d/10385.misc
deleted file mode 100644
index e515ac09fd..0000000000
--- a/changelog.d/10385.misc
+++ /dev/null
@@ -1 +0,0 @@
-Add type hints to `get_{domain,localpart}_from_id`.
diff --git a/changelog.d/10386.removal b/changelog.d/10386.removal
deleted file mode 100644
index 800a6143d7..0000000000
--- a/changelog.d/10386.removal
+++ /dev/null
@@ -1 +0,0 @@
-The third-party event rules module interface is deprecated in favour of the generic module interface introduced in Synapse v1.37.0. See the [upgrade notes](https://matrix-org.github.io/synapse/latest/upgrade.html#upgrading-to-v1390) for more information.
diff --git a/changelog.d/10391.misc b/changelog.d/10391.misc
deleted file mode 100644
index 3f191b520a..0000000000
--- a/changelog.d/10391.misc
+++ /dev/null
@@ -1 +0,0 @@
-When building Debian packages for prerelease versions, set the Section accordingly.
diff --git a/changelog.d/10393.misc b/changelog.d/10393.misc
deleted file mode 100644
index e80f16d607..0000000000
--- a/changelog.d/10393.misc
+++ /dev/null
@@ -1 +0,0 @@
-Add type hints and comments to event auth code.
diff --git a/changelog.d/10395.doc b/changelog.d/10395.doc
deleted file mode 100644
index 4bdaea76c5..0000000000
--- a/changelog.d/10395.doc
+++ /dev/null
@@ -1 +0,0 @@
-Make deprecation notice of the spam checker doc more obvious.
diff --git a/changelog.d/10396.doc b/changelog.d/10396.doc
deleted file mode 100644
index b521ad9cbf..0000000000
--- a/changelog.d/10396.doc
+++ /dev/null
@@ -1 +0,0 @@
-Add instructructions on installing Debian packages for release candidates.
diff --git a/changelog.d/10398.misc b/changelog.d/10398.misc
deleted file mode 100644
index 326e54655a..0000000000
--- a/changelog.d/10398.misc
+++ /dev/null
@@ -1 +0,0 @@
-Stagger sending of presence update to remote servers, reducing CPU spikes caused by starting many connections to remote servers at once.
diff --git a/changelog.d/10399.doc b/changelog.d/10399.doc
deleted file mode 100644
index b596ac5627..0000000000
--- a/changelog.d/10399.doc
+++ /dev/null
@@ -1 +0,0 @@
-Rewrite the text of links to be clearer in the documentation.
diff --git a/changelog.d/10400.bugfix b/changelog.d/10400.bugfix
deleted file mode 100644
index bfebed8d29..0000000000
--- a/changelog.d/10400.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix a number of logged errors caused by remote servers being down.
diff --git a/changelog.d/10404.bugfix b/changelog.d/10404.bugfix
deleted file mode 100644
index 2e095b6402..0000000000
--- a/changelog.d/10404.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Responses from `/make_{join,leave,knock}` no longer include signatures, which will turn out to be invalid after events are returned to `/send_{join,leave,knock}`.
diff --git a/changelog.d/10414.bugfix b/changelog.d/10414.bugfix
deleted file mode 100644
index bfebed8d29..0000000000
--- a/changelog.d/10414.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Fix a number of logged errors caused by remote servers being down.
diff --git a/changelog.d/10418.misc b/changelog.d/10418.misc
deleted file mode 100644
index eed2d8552a..0000000000
--- a/changelog.d/10418.misc
+++ /dev/null
@@ -1 +0,0 @@
-Convert internal type variable syntax to reflect wider ecosystem use.
\ No newline at end of file
diff --git a/changelog.d/10421.misc b/changelog.d/10421.misc
deleted file mode 100644
index 385cbe07af..0000000000
--- a/changelog.d/10421.misc
+++ /dev/null
@@ -1 +0,0 @@
-Remove unused `events_by_room` code (tech debt).
diff --git a/changelog.d/10427.feature b/changelog.d/10427.feature
deleted file mode 100644
index 091947ff22..0000000000
--- a/changelog.d/10427.feature
+++ /dev/null
@@ -1 +0,0 @@
-Add a new version of the R30 phone-home metric, which removes a false impression of retention given by the old R30 metric.
diff --git a/changelog.d/10430.misc b/changelog.d/10430.misc
deleted file mode 100644
index a017cf4ac9..0000000000
--- a/changelog.d/10430.misc
+++ /dev/null
@@ -1 +0,0 @@
-Add a github actions job recording success of other jobs.
diff --git a/changelog.d/10457.bugfix b/changelog.d/10457.bugfix
deleted file mode 100644
index ec950b5846..0000000000
--- a/changelog.d/10457.bugfix
+++ /dev/null
@@ -1 +0,0 @@
-Always include `device_one_time_keys_count` key in `/sync` response to work around a bug in Element Android that broke encryption for new devices.
diff --git a/changelog.d/10461.misc b/changelog.d/10461.misc
new file mode 100644
index 0000000000..5035e26825
--- /dev/null
+++ b/changelog.d/10461.misc
@@ -0,0 +1 @@
+Fix an error which prevented the Github Actions workflow to build the docker images from running.
diff --git a/changelog.d/10465.misc b/changelog.d/10465.misc
new file mode 100644
index 0000000000..4de6201dfc
--- /dev/null
+++ b/changelog.d/10465.misc
@@ -0,0 +1 @@
+Fix release script to correctly version debian changelog when doing RCs.
diff --git a/changelog.d/10477.bugfix b/changelog.d/10477.bugfix
new file mode 100644
index 0000000000..bcc92de434
--- /dev/null
+++ b/changelog.d/10477.bugfix
@@ -0,0 +1 @@
+Fix bug introduced in Synapse 1.38 which caused an exception at startup when SAML authentication was enabled.
diff --git a/changelog.d/10485.bugfix b/changelog.d/10485.bugfix
new file mode 100644
index 0000000000..9b44006dc0
--- /dev/null
+++ b/changelog.d/10485.bugfix
@@ -0,0 +1 @@
+Fix a long-standing bug where Synapse would not inform clients that a device had exhausted its one-time-key pool, potentially causing problems decrypting events.
diff --git a/changelog.d/10486.bugfix b/changelog.d/10486.bugfix
new file mode 100644
index 0000000000..7c65c16e96
--- /dev/null
+++ b/changelog.d/10486.bugfix
@@ -0,0 +1 @@
+Fix reporting old R30 stats as R30v2 stats.
diff --git a/changelog.d/9721.removal b/changelog.d/9721.removal
deleted file mode 100644
index da2ba48c84..0000000000
--- a/changelog.d/9721.removal
+++ /dev/null
@@ -1 +0,0 @@
-Remove functionality associated with the unused `room_stats_historical` and `user_stats_historical` tables. Contributed by @xmunoz.
diff --git a/changelog.d/9884.feature b/changelog.d/9884.feature
deleted file mode 100644
index 525fd2f93c..0000000000
--- a/changelog.d/9884.feature
+++ /dev/null
@@ -1 +0,0 @@
-Add a module type for the account validity feature.
diff --git a/changelog.d/9971.doc b/changelog.d/9971.doc
deleted file mode 100644
index ada68f70ca..0000000000
--- a/changelog.d/9971.doc
+++ /dev/null
@@ -1 +0,0 @@
-Updated installation dependencies for newer macOS versions and ARM Macs. Contributed by Luke Walsh.
diff --git a/debian/changelog b/debian/changelog
index 43d26fc133..2062c6caef 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,15 @@
+matrix-synapse-py3 (1.38.1) stable; urgency=medium
+
+ * New synapse release 1.38.1.
+
+ -- Synapse Packaging team <packages@matrix.org> Thu, 22 Jul 2021 15:37:06 +0100
+
+matrix-synapse-py3 (1.39.0~rc1) stable; urgency=medium
+
+ * New synapse release 1.39.0rc1.
+
+ -- Synapse Packaging team <packages@matrix.org> Tue, 20 Jul 2021 14:28:34 +0100
+
matrix-synapse-py3 (1.38.0) stable; urgency=medium
* New synapse release 1.38.0.
diff --git a/scripts-dev/release.py b/scripts-dev/release.py
index 5bfaa4ad2f..cff433af2a 100755
--- a/scripts-dev/release.py
+++ b/scripts-dev/release.py
@@ -139,6 +139,11 @@ def run():
# Switch to the release branch.
parsed_new_version = version.parse(new_version)
+
+ # We assume for debian changelogs that we only do RCs or full releases.
+ assert not parsed_new_version.is_devrelease
+ assert not parsed_new_version.is_postrelease
+
release_branch_name = (
f"release-v{parsed_new_version.major}.{parsed_new_version.minor}"
)
@@ -190,12 +195,21 @@ def run():
# Generate changelogs
subprocess.run("python3 -m towncrier", shell=True)
- # Generate debian changelogs if its not an RC.
- if not rc:
- subprocess.run(
- f'dch -M -v {new_version} "New synapse release {new_version}."', shell=True
- )
- subprocess.run('dch -M -r -D stable ""', shell=True)
+ # Generate debian changelogs
+ if parsed_new_version.pre is not None:
+ # If this is an RC then we need to coerce the version string to match
+ # Debian norms, e.g. 1.39.0rc2 gets converted to 1.39.0~rc2.
+ base_ver = parsed_new_version.base_version
+ pre_type, pre_num = parsed_new_version.pre
+ debian_version = f"{base_ver}~{pre_type}{pre_num}"
+ else:
+ debian_version = new_version
+
+ subprocess.run(
+ f'dch -M -v {debian_version} "New synapse release {debian_version}."',
+ shell=True,
+ )
+ subprocess.run('dch -M -r -D stable ""', shell=True)
# Show the user the changes and ask if they want to edit the change log.
repo.git.add("-u")
diff --git a/synapse/__init__.py b/synapse/__init__.py
index 5ecce24eee..01d6bf17f0 100644
--- a/synapse/__init__.py
+++ b/synapse/__init__.py
@@ -47,7 +47,7 @@ try:
except ImportError:
pass
-__version__ = "1.38.0"
+__version__ = "1.39.0rc2"
if bool(os.environ.get("SYNAPSE_TEST_PATCH_LOG_CONTEXTS", False)):
# We import here so that we don't have to install a bunch of deps when
diff --git a/synapse/api/constants.py b/synapse/api/constants.py
index 8363c2bb0f..8c7ad2a407 100644
--- a/synapse/api/constants.py
+++ b/synapse/api/constants.py
@@ -127,6 +127,14 @@ class ToDeviceEventTypes:
RoomKeyRequest = "m.room_key_request"
+class DeviceKeyAlgorithms:
+ """Spec'd algorithms for the generation of per-device keys"""
+
+ ED25519 = "ed25519"
+ CURVE25519 = "curve25519"
+ SIGNED_CURVE25519 = "signed_curve25519"
+
+
class EduTypes:
Presence = "m.presence"
diff --git a/synapse/app/phone_stats_home.py b/synapse/app/phone_stats_home.py
index 96defac1d2..86ad7337a9 100644
--- a/synapse/app/phone_stats_home.py
+++ b/synapse/app/phone_stats_home.py
@@ -109,7 +109,7 @@ async def phone_stats_home(hs, stats, stats_process=_stats_process):
for name, count in r30_results.items():
stats["r30_users_" + name] = count
- r30v2_results = await store.count_r30_users()
+ r30v2_results = await store.count_r30v2_users()
for name, count in r30v2_results.items():
stats["r30v2_users_" + name] = count
diff --git a/synapse/handlers/_base.py b/synapse/handlers/_base.py
index 525f3d39b1..6a05a65305 100644
--- a/synapse/handlers/_base.py
+++ b/synapse/handlers/_base.py
@@ -15,8 +15,6 @@
import logging
from typing import TYPE_CHECKING, Optional
-import synapse.state
-import synapse.storage
import synapse.types
from synapse.api.constants import EventTypes, Membership
from synapse.api.ratelimiting import Ratelimiter
diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py
index 8a1b79bd95..4826260578 100644
--- a/synapse/handlers/sync.py
+++ b/synapse/handlers/sync.py
@@ -1094,6 +1094,10 @@ class SyncHandler:
one_time_key_counts: JsonDict = {}
unused_fallback_key_types: List[str] = []
if device_id:
+ # TODO: We should have a way to let clients differentiate between the states of:
+ # * no change in OTK count since the provided since token
+ # * the server has zero OTKs left for this device
+ # Spec issue: https://github.com/matrix-org/matrix-doc/issues/3298
one_time_key_counts = await self.store.count_e2e_one_time_keys(
user_id, device_id
)
diff --git a/synapse/storage/databases/main/end_to_end_keys.py b/synapse/storage/databases/main/end_to_end_keys.py
index 78ae68ec68..1edc96042b 100644
--- a/synapse/storage/databases/main/end_to_end_keys.py
+++ b/synapse/storage/databases/main/end_to_end_keys.py
@@ -21,6 +21,7 @@ from canonicaljson import encode_canonical_json
from twisted.enterprise.adbapi import Connection
+from synapse.api.constants import DeviceKeyAlgorithms
from synapse.logging.opentracing import log_kv, set_tag, trace
from synapse.storage._base import SQLBaseStore, db_to_json
from synapse.storage.database import DatabasePool, make_in_list_sql_clause
@@ -381,9 +382,15 @@ class EndToEndKeyWorkerStore(EndToEndKeyBackgroundStore):
" GROUP BY algorithm"
)
txn.execute(sql, (user_id, device_id))
- result = {}
+
+ # Initially set the key count to 0. This ensures that the client will always
+ # receive *some count*, even if it's 0.
+ result = {DeviceKeyAlgorithms.SIGNED_CURVE25519: 0}
+
+ # Override entries with the count of any keys we pulled from the database
for algorithm, key_count in txn:
result[algorithm] = key_count
+
return result
return await self.db_pool.runInteraction(
diff --git a/synapse/storage/databases/main/lock.py b/synapse/storage/databases/main/lock.py
index 774861074c..3d1dff660b 100644
--- a/synapse/storage/databases/main/lock.py
+++ b/synapse/storage/databases/main/lock.py
@@ -78,7 +78,11 @@ class LockStore(SQLBaseStore):
"""Called when the server is shutting down"""
logger.info("Dropping held locks due to shutdown")
- for (lock_name, lock_key), token in self._live_tokens.items():
+ # We need to take a copy of the tokens dict as dropping the locks will
+ # cause the dictionary to change.
+ tokens = dict(self._live_tokens)
+
+ for (lock_name, lock_key), token in tokens.items():
await self._drop_lock(lock_name, lock_key, token)
logger.info("Dropped locks due to shutdown")
diff --git a/tests/handlers/test_e2e_keys.py b/tests/handlers/test_e2e_keys.py
index e0a24824cc..39e7b1ab25 100644
--- a/tests/handlers/test_e2e_keys.py
+++ b/tests/handlers/test_e2e_keys.py
@@ -47,12 +47,16 @@ class E2eKeysHandlerTestCase(unittest.HomeserverTestCase):
"alg2:k3": {"key": "key3"},
}
+ # Note that "signed_curve25519" is always returned in key count responses. This is necessary until
+ # https://github.com/matrix-org/matrix-doc/issues/3298 is fixed.
res = self.get_success(
self.handler.upload_keys_for_user(
local_user, device_id, {"one_time_keys": keys}
)
)
- self.assertDictEqual(res, {"one_time_key_counts": {"alg1": 1, "alg2": 2}})
+ self.assertDictEqual(
+ res, {"one_time_key_counts": {"alg1": 1, "alg2": 2, "signed_curve25519": 0}}
+ )
# we should be able to change the signature without a problem
keys["alg2:k2"]["signatures"]["k1"] = "sig2"
@@ -61,7 +65,9 @@ class E2eKeysHandlerTestCase(unittest.HomeserverTestCase):
local_user, device_id, {"one_time_keys": keys}
)
)
- self.assertDictEqual(res, {"one_time_key_counts": {"alg1": 1, "alg2": 2}})
+ self.assertDictEqual(
+ res, {"one_time_key_counts": {"alg1": 1, "alg2": 2, "signed_curve25519": 0}}
+ )
def test_change_one_time_keys(self):
"""attempts to change one-time-keys should be rejected"""
@@ -79,7 +85,9 @@ class E2eKeysHandlerTestCase(unittest.HomeserverTestCase):
local_user, device_id, {"one_time_keys": keys}
)
)
- self.assertDictEqual(res, {"one_time_key_counts": {"alg1": 1, "alg2": 2}})
+ self.assertDictEqual(
+ res, {"one_time_key_counts": {"alg1": 1, "alg2": 2, "signed_curve25519": 0}}
+ )
# Error when changing string key
self.get_failure(
@@ -89,7 +97,7 @@ class E2eKeysHandlerTestCase(unittest.HomeserverTestCase):
SynapseError,
)
- # Error when replacing dict key with strin
+ # Error when replacing dict key with string
self.get_failure(
self.handler.upload_keys_for_user(
local_user, device_id, {"one_time_keys": {"alg2:k3": "key2"}}
@@ -131,7 +139,9 @@ class E2eKeysHandlerTestCase(unittest.HomeserverTestCase):
local_user, device_id, {"one_time_keys": keys}
)
)
- self.assertDictEqual(res, {"one_time_key_counts": {"alg1": 1}})
+ self.assertDictEqual(
+ res, {"one_time_key_counts": {"alg1": 1, "signed_curve25519": 0}}
+ )
res2 = self.get_success(
self.handler.claim_one_time_keys(
diff --git a/tests/storage/databases/main/test_lock.py b/tests/storage/databases/main/test_lock.py
index 9ca70e7367..d326a1d6a6 100644
--- a/tests/storage/databases/main/test_lock.py
+++ b/tests/storage/databases/main/test_lock.py
@@ -98,3 +98,16 @@ class LockTestCase(unittest.HomeserverTestCase):
lock2 = self.get_success(self.store.try_acquire_lock("name", "key"))
self.assertIsNotNone(lock2)
+
+ def test_shutdown(self):
+ """Test that shutting down Synapse releases the locks"""
+ # Acquire two locks
+ lock = self.get_success(self.store.try_acquire_lock("name", "key1"))
+ self.assertIsNotNone(lock)
+ lock2 = self.get_success(self.store.try_acquire_lock("name", "key2"))
+ self.assertIsNotNone(lock2)
+
+ # Now call the shutdown code
+ self.get_success(self.store._on_shutdown())
+
+ self.assertEqual(self.store._live_tokens, {})
|