Skip to content

Commit b13014d

Browse files
authored
Merge pull request #5080 from wireapp/release_2026-03-03_15_28
Release 2026-03-03 - (expected chart version 5.28.0)
2 parents d071f01 + 2feb541 commit b13014d

File tree

586 files changed

+13143
-4836
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

586 files changed

+13143
-4836
lines changed

CHANGELOG.md

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,158 @@
1+
# [2026-03-03] (Chart Release 5.28.0)
2+
3+
## Release notes
4+
5+
6+
* The following Helm charts changed in this branch:
7+
- `charts/demo-smtp`
8+
- `charts/fake-aws-ses`
9+
- `charts/fake-aws-sns`
10+
- `charts/legalhold`
11+
12+
Image field overrides are supported via split values (`repository` + `tag`) in the changed charts.
13+
There are backward incompatibilities if old string-style image overrides are still used. (#5015)
14+
15+
* Cassandra (`brig.user`) now keeps track of user types, only for newly created users. **Read this paragraph if you have already created apps before their official support:** For existing users and bots, the user type is inferred, but existing apps will show as regular users. Please remove those users from your team and create them again. (#5022)
16+
17+
* Starting in this version, wire-server is tested against cassandra (4.1.x). The codebase is compatible with cassandra 3.11, 4.0, and 4.1. But going forward, only 4.1 or newer will get tested. We recommend you eventually upgrade cassandra to 4.1.x. (#5062)
18+
19+
20+
## API changes
21+
22+
23+
* `PUT /teams/:tid/apps/:uid` for app metadata update. (#5053)
24+
25+
* `GET /teams/:tid/apps` now includes app ids in response. (#5057)
26+
27+
28+
## Features
29+
30+
31+
* Add Meetings API for creating and managing scheduled meetings.
32+
33+
New endpoints:
34+
- `POST /meetings` - Create a meeting with title, start/end times, recurrence patterns (daily, weekly, etc.), and invited emails. Each meeting creates an associated MLS conversation.
35+
- `GET /meetings/:domain/:meetingId` - Retrieve a meeting by ID. Accessible to the meeting creator or any conversation member.
36+
37+
Features:
38+
- Recurring meeting support with configurable patterns and end dates
39+
- Trial status: personal users receive trial meetings, paying team members receive non-trial meetings
40+
- Meeting expiration: old meetings are automatically filtered based on a configurable validity period (#4918)
41+
42+
* `PUT /meetings/:domain/:meetingId` for updating meetings.
43+
44+
Supported fields:
45+
- `startTime`, `endTime` - update meeting time (must be valid: start < end)
46+
- `title` - update meeting title
47+
- `recurrence` - update recurrence pattern
48+
49+
Authorization: only the meeting creator can update the meeting. (#5065)
50+
51+
* Ephemeral users are now allowed to upload and download files (#5016)
52+
53+
* Pass optional cookie label on initiating the SSO login flow (#5049)
54+
55+
56+
* Revoke cookie with same label on login (#5055)
57+
58+
* Emit new event `user.session-refresh-suggested` on cookie revocation (#5060)
59+
60+
* New public system setting for nomad profiles support (#5077)
61+
62+
* Print better error logs even when errors are overwritten to be hidden from the users (#5000)
63+
64+
* Add history metadata support to channels. Channels now have a new field `history` which can be set on creation and updated by admins. (#4991)
65+
66+
* Send an email to team admins and owners when an IdP is changed via API (create,
67+
update, delete). This behaviour is for now only enabled for multi-ingress
68+
setups. (#4987)
69+
70+
* Add `/sso/get-by-email` endpoint to retrieve SSO codes by user email address.
71+
This will enable clients to fetch SSO codes and not have to ask the user for
72+
them.
73+
74+
This feature is turned off by default and can be enabled in `spar` by setting
75+
the `enableIdPByEmailDiscovery` flag. Multi-ingress domains are taken into
76+
account to find the right SSO code to use. Users must have been created via
77+
SCIM; non-SCIM users are ignored. Please refer to the documentation for further
78+
information. (#5024)
79+
80+
81+
## Bug fixes and other updates
82+
83+
84+
* Delete app when removing a user from a team. (#5046)
85+
86+
* Listing users never excludes apps on grounds of not having an identity. (#5029)
87+
88+
* cannon: Do not report status code 500 when websocket is closed due to client
89+
errors (#5045)
90+
91+
* Remove ModifyConversationHistory permission (#5027)
92+
93+
* The backend is now able to accept commits in the presence of duplicated remove proposals (#4999)
94+
95+
* Repair user key inconsistency when inviting user (#5031)
96+
97+
* Repair user key inconsistency on registration
98+
(#5050)
99+
100+
101+
## Internal changes
102+
103+
104+
* Made hard coded images in helm charts configurable (#5015)
105+
106+
* Fix: create team members for apps in galley, not just brig users. (#4970)
107+
108+
* Change `GET /i/users` on brig to never return users with status `Deleted`.
109+
110+
This shouldn't change backend behavior, except for avoiding some race
111+
conditions involving user deletion and fetching. (#5052)
112+
113+
* Request-Id is now correctly propagated in `cannon` and `cargohold` (#5073)
114+
115+
* Integration tests: test lib now supports `shouldMatchShape` for json schema assertions. (#5057)
116+
117+
* # Move conversation creation logic to wire-subsystems
118+
119+
- Moved conversation creation logic from `Galley.API.Create` to `Wire.ConversationSubsystem.Interpreter`
120+
- Relocated utility modules:
121+
- `Galley.API.Error``Galley.Types.Error`
122+
- `Galley.API.One2One``Wire.ConversationSubsystem.One2One`
123+
- `Galley.API.Util``Wire.ConversationSubsystem.Util`
124+
- `Galley.Effects.UserClientIndexStore``Wire.Effects.UserClientIndexStore`
125+
- Removed `Galley.Validation` module (functionality moved to interpreter)
126+
- Updated `background-worker` configmap:
127+
- Added `galley` endpoint configuration to template
128+
- Added `galleyEndpoint` field to environment
129+
- Updated `Registry` to call `getConfiguredFeatureFlags` and provide flags via `runInputSem`
130+
- Added roundtrip and golden tests for:
131+
- `ConversationSubsystemConfig`
132+
- FeatureDefaults types: LegalholdConfig, SSOConfig, SearchVisibilityAvailableConfig
133+
134+
135+
* cannon chart: allow optional extra command line args to pass to the cannon process (#5023)
136+
137+
* cannon chart: add scheduling options for node selector, affinity, and tolerations (#5020)
138+
139+
* Updated email templates to v1.0.148 (#5003)
140+
141+
* Federator helm chart: by default remove the CPU limit (and throttling). A limit can still be specified. (#5076)
142+
143+
* Move `IdPConfigStore` to `wire-subsystems`. This will enable using it in other effects. (#5011)
144+
145+
* Upgrade wire-server's Nix env. Switch to nixpkgs `nixos-25.11` (the release branch). (#5032)
146+
147+
* Update `libzauth-c`'s dependencies. (#5039)
148+
149+
150+
## Federation changes
151+
152+
153+
* Support external cert-manager issuers (e.g. AWS PCA) for federation TLS by adding optional `group` field to `federator.tls.issuer` and making certificate `duration`/`renewBefore` configurable via `federator.tls.duration` and `federator.tls.renewBefore` in nginx-ingress-services chart. (#5025)
154+
155+
1156
# [2026-02-04] (Chart Release 5.27.0)
2157

3158
## Release notes

cassandra-schema.cql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,7 @@ CREATE TABLE brig_test.user (
694694
supported_protocols int,
695695
team uuid,
696696
text_status text,
697+
user_type int,
697698
write_time_bumper int
698699
) WITH bloom_filter_fp_chance = 0.1
699700
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
@@ -2143,6 +2144,7 @@ CREATE TABLE spar_test.meta (
21432144

21442145
CREATE TABLE spar_test.verdict (
21452146
req text PRIMARY KEY,
2147+
cookie_label text,
21462148
format_con int,
21472149
format_mobile_error text,
21482150
format_mobile_success text

charts/background-worker/templates/configmap.yaml

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,22 @@ data:
1818
port: {{ $.Values.service.internalPort }}
1919
2020
federatorInternal:
21-
host: federator
22-
port: 8080
21+
host: {{ .federatorInternal.host }}
22+
port: {{ .federatorInternal.port }}
2323
2424
brig:
25-
host: brig
26-
port: 8080
25+
host: {{ .brig.host }}
26+
port: {{ .brig.port }}
27+
galley:
28+
host: {{ .galley.host }}
29+
port: {{ .galley.port }}
2730
2831
gundeck:
29-
host: gundeck
30-
port: 8080
32+
host: {{ .gundeck.host }}
33+
port: {{ .gundeck.port }}
34+
spar:
35+
host: {{ .spar.host }}
36+
port: {{ .spar.port }}
3137
3238
cassandra:
3339
endpoint:

charts/background-worker/values.yaml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,21 @@ config:
1919
logLevel: Info
2020
logFormat: StructuredJSON
2121
enableFederation: false # keep in sync with brig, cargohold and galley charts' config.enableFederation as well as wire-server chart's tags.federation
22+
brig:
23+
host: brig
24+
port: 8080
25+
galley:
26+
host: galley
27+
port: 8080
28+
gundeck:
29+
host: gundeck
30+
port: 8080
31+
federatorInternal:
32+
host: federator
33+
port: 8080
34+
spar:
35+
host: spar
36+
port: 8080
2237
rabbitmq:
2338
host: rabbitmq
2439
port: 5672

charts/brig/templates/configmap.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,5 +390,8 @@ data:
390390
{{- end }}
391391
setChallengeTTL: {{ or .setChallengeTTL 604800 }}
392392
setEphemeralUserCreationEnabled: {{ .setEphemeralUserCreationEnabled }}
393+
{{- if hasKey . "setNomadProfiles" }}
394+
setNomadProfiles: {{ index . "setNomadProfiles" }}
395+
{{- end }}
393396
{{- end }}
394397
{{- end }}

charts/cannon/templates/statefulset.yaml

Lines changed: 51 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -52,23 +52,23 @@ spec:
5252
{{- toYaml .Values.podSecurityContext | nindent 10 }}
5353
{{- end }}
5454
env:
55-
# Any file changes to this path causes nginx to reload configs without
56-
# restarting or breaking any connections.
57-
- name: WATCH_PATHS
58-
value: "/etc/wire/nginz/tls"
55+
# Any file changes to this path causes nginx to reload configs without
56+
# restarting or breaking any connections.
57+
- name: WATCH_PATHS
58+
value: "/etc/wire/nginz/tls"
5959
volumeMounts:
60-
- name: nginz-config
61-
mountPath: /etc/wire/nginz/conf
62-
readOnly: true
63-
- name: nginz-secrets
64-
mountPath: /etc/wire/nginz/secrets
65-
readOnly: true
66-
- name: certificate
67-
mountPath: /etc/wire/nginz/tls
68-
readOnly: true
60+
- name: nginz-config
61+
mountPath: /etc/wire/nginz/conf
62+
readOnly: true
63+
- name: nginz-secrets
64+
mountPath: /etc/wire/nginz/secrets
65+
readOnly: true
66+
- name: certificate
67+
mountPath: /etc/wire/nginz/tls
68+
readOnly: true
6969
ports:
70-
- name: https
71-
containerPort: {{ .Values.service.nginz.internalPort }}
70+
- name: https
71+
containerPort: {{ .Values.service.nginz.internalPort }}
7272
readinessProbe:
7373
httpGet:
7474
path: /status
@@ -90,41 +90,43 @@ spec:
9090
# (SIGTERM is still sent, but afterwards)
9191
command: ["sh", "-c", "nginx -c /etc/wire/nginz/conf/nginx.conf -s quit && sleep {{ add .Values.config.drainOpts.gracePeriodSeconds 5 }}"]
9292
resources:
93-
{{ toYaml .Values.resources | indent 12 }}
93+
{{- toYaml .Values.resources | nindent 10 }}
9494
{{- end }}
9595
- name: cannon
9696
env:
97-
- name: RABBITMQ_USERNAME
98-
valueFrom:
99-
secretKeyRef:
100-
name: cannon
101-
key: rabbitmqUsername
102-
- name: RABBITMQ_PASSWORD
103-
valueFrom:
104-
secretKeyRef:
105-
name: cannon
106-
key: rabbitmqPassword
97+
- name: RABBITMQ_USERNAME
98+
valueFrom:
99+
secretKeyRef:
100+
name: cannon
101+
key: rabbitmqUsername
102+
- name: RABBITMQ_PASSWORD
103+
valueFrom:
104+
secretKeyRef:
105+
name: cannon
106+
key: rabbitmqPassword
107107
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
108108
{{- if eq (include "includeSecurityContext" .) "true" }}
109109
securityContext:
110110
{{- toYaml .Values.podSecurityContext | nindent 10 }}
111111
{{- end }}
112+
args:
113+
{{- toYaml .Values.cannonArgs | nindent 10 }}
112114
volumeMounts:
113-
- name: empty
114-
mountPath: /etc/wire/cannon/externalHost
115-
- name: cannon-config
116-
mountPath: /etc/wire/cannon/conf
115+
- name: empty
116+
mountPath: /etc/wire/cannon/externalHost
117+
- name: cannon-config
118+
mountPath: /etc/wire/cannon/conf
117119
{{- if .Values.config.rabbitmq.tlsCaSecretRef }}
118-
- name: rabbitmq-ca
119-
mountPath: "/etc/wire/cannon/rabbitmq-ca/"
120+
- name: rabbitmq-ca
121+
mountPath: "/etc/wire/cannon/rabbitmq-ca/"
120122
{{- end }}
121123
{{- if eq (include "useCassandraTLS" .Values.config) "true" }}
122-
- name: "cannon-cassandra"
123-
mountPath: "/etc/wire/cannon/cassandra"
124+
- name: "cannon-cassandra"
125+
mountPath: "/etc/wire/cannon/cassandra"
124126
{{- end }}
125127
ports:
126-
- name: http
127-
containerPort: {{ .Values.service.internalPort }}
128+
- name: http
129+
containerPort: {{ .Values.service.internalPort }}
128130
readinessProbe:
129131
httpGet:
130132
path: /i/status
@@ -138,7 +140,7 @@ spec:
138140
port: {{ .Values.service.internalPort }}
139141
scheme: HTTP
140142
resources:
141-
{{ toYaml .Values.resources | indent 12 }}
143+
{{- toYaml .Values.resources | nindent 10 }}
142144
initContainers:
143145
- name: cannon-configurator
144146
image: alpine:3.21.3
@@ -185,3 +187,15 @@ spec:
185187
secret:
186188
secretName: {{ (include "tlsSecretRef" .Values.config | fromYaml).name }}
187189
{{- end }}
190+
{{- with .Values.nodeSelector }}
191+
nodeSelector:
192+
{{- toYaml . | nindent 8 }}
193+
{{- end }}
194+
{{- with .Values.affinity }}
195+
affinity:
196+
{{- toYaml . | nindent 8 }}
197+
{{- end }}
198+
{{- with .Values.tolerations }}
199+
tolerations:
200+
{{- toYaml . | nindent 8 }}
201+
{{- end }}

charts/cannon/values.yaml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ image:
33
repository: quay.io/wire/cannon
44
tag: do-not-use
55
pullPolicy: IfNotPresent
6+
# Optional extra arguments passed to cannon (e.g. ["+RTS", "-M2g", "-RTS"])
7+
cannonArgs: []
68
nginzImage:
79
repository: quay.io/wire/nginz
810
tag: do-not-use
@@ -159,3 +161,25 @@ podSecurityContext:
159161
runAsNonRoot: true
160162
seccompProfile:
161163
type: RuntimeDefault
164+
165+
# nodeSelector:
166+
# wire.com/role: cannon
167+
nodeSelector: {}
168+
169+
# affinity:
170+
# nodeAffinity:
171+
# requiredDuringSchedulingIgnoredDuringExecution:
172+
# nodeSelectorTerms:
173+
# - matchExpressions:
174+
# - key: wire.com/role
175+
# operator: In
176+
# values:
177+
# - cannon
178+
affinity: {}
179+
180+
# tolerations:
181+
# - key: "wire.com/role"
182+
# operator: "Equal"
183+
# value: "cannon"
184+
# effect: "NoSchedule"
185+
tolerations: []

0 commit comments

Comments
 (0)