Skip to content
Merged
Show file tree
Hide file tree
Changes from 30 commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
a2333ac
[WPB-23764] app events (#5139)
fisx Mar 24, 2026
6bbbe43
WPB-5989 Move verify code action as preparation for polysemy create c…
battermann Mar 25, 2026
7bba758
Merge pull request #5155 from wireapp/master
stefanwire Mar 25, 2026
80d9fc1
WPB-5989 Client Subsystem (part 1) (#5147)
battermann Mar 26, 2026
1135567
remove brig-types (#5157)
battermann Mar 27, 2026
bdd2471
WPB-5989 polysemy create client subsystem (part 2) (#5156)
battermann Apr 1, 2026
bc5dbd5
WPB-5989 polysemy create client subsystem part 3 (#5163)
battermann Apr 1, 2026
ab211e8
Sunset restund (and rex) (#5162)
jschaul Apr 1, 2026
8450389
Follow-up to #5072 (#5091)
jschaul Apr 2, 2026
d4a86c3
WPB-24481 helm make proxy deployment optional (#5161)
battermann Apr 2, 2026
3880480
WPB-5989 replace Brig.Federation.Client with FederationAPIAccess (#5165)
battermann Apr 2, 2026
be8a397
Some additions to SBOM creation epic (#5167)
supersven Apr 7, 2026
34ba0c0
Make schema-profunctor schema names derived and avoid name clashes be…
fisx Apr 8, 2026
df05bca
[WPB-23995] app visibility accross teams (#5171)
fisx Apr 11, 2026
f9c52fc
nginx-ingress-services: fix ingress class check (#5174)
jschaul Apr 13, 2026
a8272c0
WPB-22293 Remove Server response header value (#5179)
battermann Apr 14, 2026
04de704
[WPB-23995] fix app access in search, fetch. (#5173)
fisx Apr 14, 2026
80e3f73
[WPB-24569] remove apps from conversations if apps are disabled in co…
fisx Apr 14, 2026
8570336
WPB-5989 polysemy create client subsystem (part 4 - final) (#5168)
battermann Apr 14, 2026
6134218
fix: flaky notification spec (#5183)
battermann Apr 15, 2026
72ab6ed
WPB-24777 fix GalleyAPIAccess interpreter for getTeamContacts (#5184)
battermann Apr 16, 2026
3bba4f7
[WPB-24627] Fix: allow removal of bots from conversation after switch…
fisx Apr 16, 2026
32cea10
remove tom-bombadil usage (#5181)
supersven Apr 17, 2026
6186271
WPB-24072 mount galley.yaml into background-worker (#5180)
battermann Apr 17, 2026
5c111ba
[WPB-23806] (Un-)suspend apps if en-/disabled in the team. (#5177)
fisx Apr 17, 2026
5b57aa8
[WPB-24553] Send team.member-join to all apps in team. (#5187)
fisx Apr 17, 2026
7f392b3
Handle missing supported protocols in mls-users (#5190)
pcapriotti Apr 17, 2026
788ddd2
WPB-24490 fix: users can escape sso via password reset (#5191)
battermann Apr 20, 2026
34e47f1
[WPB-24871] Hotfix: handle NULL in brig-cassandra:user.user_type. (#5…
fisx Apr 20, 2026
81f4280
Add changelog for Release 2026-04-20
zebot Apr 20, 2026
2b0d199
Mark 5.29 as broken in CHANGELOG.md.
fisx Apr 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
73 changes: 73 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,76 @@
# [2026-04-20] (Chart Release 5.30.0)

## Release notes


* `background-worker` now reuses `galley`'s configmap and secrets for cassandra, postgres and federation domain settings. This removes redundant settings and keeps the two services aligned. No operator action is strictly required; however, we advise removing the `background-worker` value overrides for galley's cassandra, postgres, and federation domain settings, as they are duplicated and no longer needed:

- background-worker.config.cassandraGalley
- background-worker.config.postgresql
- background-worker.secrets.pgPassword
- background-worker.config.federationDomain (#5180)

* Operators upgrading from the previous wire-server chart release, where the service charts were consolidated into the umbrella chart, must now set `tags.proxy` explicitly again.

If your currently installed values no longer contain a `proxy` tag because of that consolidation, add one before upgrading to this release and set it to the intended state:
- `tags.proxy: true` to deploy the `proxy` chart
- `tags.proxy: false` to keep the `proxy` chart disabled (#5161)

* The Restund helm chart and code stops being supported and shipped. If you have not already, please migrate to coturn which continues to be supported. (#5162)


## Features


* Send team.member-join to all apps in team. (#5187)


## Bug fixes and other updates


* Remove the Server response header value for entire API. (#5179)

* Integration tests for user events when user type is app. Replace redundant app-created event with team.member-join. (#5139)

* (Un-)suspend apps if en-/disabled in the team. (#5177)

* Apps from outside own team do not appear in contact search. (#5173)

* Fix: apps cannot form connections accross teams. Integration test for cross-team conversations working with apps as expected. (#5171)

* Prevent password reset for SAML users (#5191)

* Remove apps from conversations when apps are disabled in conversation. (#5176)

* Fix: allow removal of bots from conversation after switching it to MLS. (#5186)

* Hotfix: handle NULL in brig-cassandra:user.user_type. (#5193)

* Fix bug where the mls-users tool would crash for users with null `supported_protocols` (#5190)


## Documentation


* Make schema-profunctor schema names derived and avoid name clashes between scopes. (#5151)


## Internal changes


* Propagate error from brig on stern API call `GET i/domain-registration/:domain` (#5179)

* The status code for rate limit responses from nginz and cannon is now configurable and set to 420 per default (#5154)

* Moved code from galley to ClientSubsystem (#5154, #5147, #5157, #5156, #5165, #5168)

* The defaults in k8ssandra-test-cluster should now work for both a fresh cassandra 4.1 pod as well as an upgrade of an existing previous k8ssandra-test-cluster deployment. We assume k8ssandra-operator helm chart version 1.20.2. (#5091)

* Use sbomnix to generate SBOMs for Nix-built Docker images and devShells. Adjust Helm chart values for inlined wire-server chart. (#5167)

* Remove tom-bombadil SBOM creation targets from `Makefile`. There's a better approach to create SBOMs in place (in `Makefile` and CI). (#5181)


# [2026-03-24] (Chart Release 5.29.0)

## Release notes
Expand Down
47 changes: 27 additions & 20 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ DOCKER_TAG ?= $(USER)
# default helm chart version must be 0.0.42 for local development (because 42 is the answer to the universe and everything)
HELM_SEMVER ?= 0.0.42
# The list of helm charts needed on internal kubernetes testing environments
CHARTS_INTEGRATION := wire-server databases-ephemeral rabbitmq fake-aws ingress-nginx-controller nginx-ingress-services fluent-bit kibana restund k8ssandra-test-cluster wire-server-enterprise
CHARTS_INTEGRATION := wire-server databases-ephemeral rabbitmq fake-aws ingress-nginx-controller nginx-ingress-services fluent-bit kibana k8ssandra-test-cluster wire-server-enterprise
# The list of helm charts to publish on S3
# FUTUREWORK: after we "inline local subcharts",
# (e.g. move charts/brig to charts/wire-server/brig)
Expand All @@ -17,7 +17,7 @@ CHARTS_RELEASE := wire-server redis-ephemeral rabbitmq rabbitmq-external databas
fake-aws fake-aws-s3 fake-aws-sqs aws-ingress fluent-bit kibana backoffice \
calling-test demo-smtp elasticsearch-curator elasticsearch-external \
elasticsearch-ephemeral minio-external cassandra-external \
ingress-nginx-controller nginx-ingress-services reaper restund \
ingress-nginx-controller nginx-ingress-services reaper \
k8ssandra-test-cluster ldap-scim-bridge wire-server-enterprise
KIND_CLUSTER_NAME := wire-server
HELM_PARALLELISM ?= 1 # 1 for sequential tests; 6 for all-parallel tests
Expand Down Expand Up @@ -699,22 +699,9 @@ diff-live-manifest: clean-charts charts-integration
DIFF_OUTPUT_FILE="$(DIFF_OUTPUT_FILE)" ./hack/bin/diff-wire-server-manifests.sh "$(LIVE_MANIFEST_FILE)" /tmp/wire-server.yaml

render-ci-manifest: clean-charts charts-integration
VALUES_FILE="$${VALUES_FILE:-$$(mktemp).yaml}"; \
./hack/bin/helm-render-ci-values.sh \
./hack/bin/render-manifest.sh "$$VALUES_FILE"

sbom.json:
nix -Lv build '.#wireServer.bomDependencies' && \
nix run 'github:wireapp/tom-bombadil#create-sbom' -- --root-package-name "wire-server"

# Ask the security team for the `DEPENDENCY_TRACK_API_KEY` (if you need it)
.PHONY: upload-bombon
upload-bombon: sbom.json
nix run 'github:wireapp/tom-bombadil#upload-bom' -- \
--project-name "wire-server" \
--project-version $(HELM_SEMVER) \
--auto-create \
--bom-file ./sbom.json
VALUES_FILE="$${VALUES_FILE:-$$(mktemp).yaml}"; export VALUES_FILE; \
./hack/bin/helm-render-ci-values.sh && \
./hack/bin/render-manifest.sh "$$VALUES_FILE"

# SBOM creation and uploading (Helm charts, Helmfile, docker-compose)
#
Expand All @@ -729,9 +716,9 @@ upload-bombon: sbom.json
# Targets should be independently executable and creating a Nix env in a Nix
# env doesn't play well.

# Generate all SBOMs (Helm + Docker Compose + Helmfile)
# Generate all SBOMs (Helm + Docker Compose + Helmfile + Nix Docker Images + Nix DevShell)
.PHONY: sboms
sboms: sboms-helm sboms-docker-compose sboms-helmfile
sboms: sboms-helm sboms-docker-compose sboms-helmfile sboms-nix-docker-images sboms-nix-devshell

# Generate SBOMs for Helm charts
.PHONY: sboms-helm
Expand All @@ -756,6 +743,26 @@ sboms-helmfile: .local/charts
fi
./hack/bin/create-helmfile-sboms.sh tmp/sboms/helmfile $(HELM_SEMVER)

# Generate SBOMs for Nix-built Docker images using sbomnix
# This generates SBOMs from the Nix store paths of executables that go into Docker images
.PHONY: sboms-nix-docker-images
sboms-nix-docker-images:
@if [ "$(HELM_SEMVER)" = "0.0.42" ]; then \
echo "Environment variable HELM_SEMVER not set to non-default value. Re-run with HELM_SEMVER=<version>"; \
exit 1; \
fi
./hack/bin/create-nix-docker-image-sboms.sh tmp/sboms/nix-docker-images $(HELM_SEMVER) imagesUnoptimizedNoDocs

# Generate SBOMs for Nix devShells using sbomnix
# This generates SBOMs from the Nix store paths of packages in the development environments
.PHONY: sboms-nix-devshell
sboms-nix-devshell:
@if [ "$(HELM_SEMVER)" = "0.0.42" ]; then \
echo "Environment variable HELM_SEMVER not set to non-default value. Re-run with HELM_SEMVER=<version>"; \
exit 1; \
fi
./hack/bin/create-nix-devshell-sbom.sh tmp/sboms/nix-devshell $(HELM_SEMVER)

# Validate all SBOM files using cyclonedx
.PHONY: validate-sboms
validate-sboms:
Expand Down
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ This repository contains the following source code:
- **cannon**: WebSocket Push Notifications
- **cargohold**: Asset (image, file, ...) Storage
- **proxy**: 3rd Party API Integration
- **restund**: STUN/TURN server for use in Audio/Video calls
- **spar**: Single-Sign-On (SSO)

- **tools**
Expand Down
2 changes: 0 additions & 2 deletions cabal.project
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ index-state: 2023-10-03T15:17:00Z
packages:
integration
, libs/bilge/
, libs/brig-types/
, libs/cargohold-types/
, libs/cassandra-util/
, libs/extended/
Expand Down Expand Up @@ -57,7 +56,6 @@ packages:
, tools/db/repair-brig-clients-table/
, tools/db/service-backfill/
, tools/rabbitmq-consumer
, tools/rex/
, tools/stern/
, tools/mlsstats/
, tools/test-stats/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ kind: Job
metadata:
name: check-cluster-job
namespace: {{ .Release.Namespace }}
annotations:
"helm.sh/hook": post-install,post-upgrade
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
"helm.sh/hook-weight": "10"
spec:
template:
spec:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ spec:
auth: false
cassandra:
serverVersion: "4.1.10"
serverImage: "docker.io/k8ssandra/cass-management-api:4.1.10-ubi"
telemetry:
prometheus:
enabled: {{ .Values.prometheus.enabled }}
Expand All @@ -30,6 +31,9 @@ spec:
client_encryption_options:
enabled: {{ .Values.client_encryption_options.enabled }}
optional: {{ .Values.client_encryption_options.optional }}
server_encryption_options:
internode_encryption: none

datacenters:
- metadata:
name: datacenter-1
Expand Down
2 changes: 1 addition & 1 deletion charts/k8ssandra-test-cluster/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ storageSize: 10G
# https://cassandra.apache.org/doc/stable/cassandra/configuration/cass_yaml_file.html#client_encryption_options
client_encryption_options:
enabled: false
optional: true
optional: false
# The password could be secured better. However, this chart is meant to be
# used as test setup. And, protecting a self-signed certificate isn't very
# useful.
Expand Down
2 changes: 1 addition & 1 deletion charts/nginx-ingress-services/templates/ingress.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ metadata:
name: {{ include "nginx-ingress-services.getIngressName" . | quote }}
{{- if .Values.config.renderCSPInIngress }}
annotations:
{{- if not (contains .Values.config.ingressClass "nginx") }}
{{- if not (hasPrefix "nginx" .Values.config.ingressClass) }}
{{ fail "In ingress CSP header setting only works with a 'nginx' controller. (Rename it to 'nginx-*' if it is one.)" }}
{{- end }}
{{/* We need to add CSP headers here for webapp, team-settings and
Expand Down
21 changes: 21 additions & 0 deletions charts/proxy/.helmignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*~
# Various IDEs
.project
.idea/
*.tmproj
4 changes: 4 additions & 0 deletions charts/proxy/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
apiVersion: v1
description: Proxy (part of Wire Server) - 3rd party proxy service
name: proxy
version: 0.0.42
8 changes: 8 additions & 0 deletions charts/proxy/templates/_helpers.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{{/* Allow KubeVersion to be overridden. */}}
{{- define "kubeVersion" -}}
{{- default .Capabilities.KubeVersion.Version .Values.kubeVersionOverride -}}
{{- end -}}

{{- define "includeSecurityContext" -}}
{{- (semverCompare ">= 1.24-0" (include "kubeVersion" .)) -}}
{{- end -}}
16 changes: 16 additions & 0 deletions charts/proxy/templates/configmap.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: "proxy"
data:
proxy.yaml: |
logFormat: {{ .Values.config.logFormat }}
logLevel: {{ .Values.config.logLevel }}
logNetStrings: {{ .Values.config.logNetStrings }}
disabledAPIVersions: {{ toJson .Values.config.disabledAPIVersions }}
proxy:
host: 0.0.0.0
port: {{ .Values.service.internalPort }}
httpPoolSize: 1000
maxConns: 5000
secretsConfig: /etc/wire/proxy/secrets/proxy.config
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ metadata:
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
replicas: {{ .Values.proxy.replicaCount }}
replicas: {{ .Values.replicaCount }}
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 0
maxSurge: {{ .Values.proxy.replicaCount }}
maxSurge: {{ .Values.replicaCount }}
selector:
matchLabels:
app: proxy
Expand All @@ -24,8 +24,8 @@ spec:
release: {{ .Release.Name }}
annotations:
# An annotation of the configmap checksum ensures changes to the configmap cause a redeployment upon `helm upgrade`
checksum/configmap: {{ include (print .Template.BasePath "/proxy/configmap.yaml") . | sha256sum }}
checksum/secret: {{ include (print .Template.BasePath "/proxy/secret.yaml") . | sha256sum }}
checksum/configmap: {{ include (print .Template.BasePath "/configmap.yaml") . | sha256sum }}
checksum/secret: {{ include (print .Template.BasePath "/secret.yaml") . | sha256sum }}
spec:
topologySpreadConstraints:
- maxSkew: 1
Expand All @@ -43,19 +43,19 @@ spec:
secretName: "proxy"
containers:
- name: proxy
image: "{{ .Values.proxy.image.repository }}:{{ .Values.proxy.image.tag }}"
imagePullPolicy: {{ default "" .Values.proxy.imagePullPolicy | quote }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ default "" .Values.imagePullPolicy | quote }}
{{- if eq (include "includeSecurityContext" .) "true" }}
securityContext:
{{- toYaml .Values.proxy.podSecurityContext | nindent 12 }}
{{- toYaml .Values.podSecurityContext | nindent 12 }}
{{- end }}
volumeMounts:
- name: "proxy-secrets"
mountPath: "/etc/wire/proxy/secrets"
- name: "proxy-config"
mountPath: "/etc/wire/proxy/conf"
env:
{{- with .Values.proxy.config.proxy }}
{{- with .Values.config.proxy }}
{{- if .httpProxy }}
- name: http_proxy
value: {{ .httpProxy | quote }}
Expand All @@ -74,18 +74,18 @@ spec:
- name: NO_PROXY
value: {{ join "," .noProxyList | quote }}
{{- end }}
{{- end }}
{{- end }}
ports:
- containerPort: {{ .Values.proxy.service.internalPort }}
- containerPort: {{ .Values.service.internalPort }}
livenessProbe:
httpGet:
scheme: HTTP
path: /i/status
port: {{ .Values.proxy.service.internalPort }}
port: {{ .Values.service.internalPort }}
readinessProbe:
httpGet:
scheme: HTTP
path: /i/status
port: {{ .Values.proxy.service.internalPort }}
port: {{ .Values.service.internalPort }}
resources:
{{ toYaml .Values.proxy.resources | indent 12 }}
{{ toYaml .Values.resources | indent 12 }}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{{- if gt (int .Values.proxy.replicaCount) 1 }}
{{- if gt (int .Values.replicaCount) 1 }}
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
Expand All @@ -9,7 +9,7 @@ metadata:
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
maxUnavailable: {{ sub (int .Values.proxy.replicaCount) 1 }}
maxUnavailable: {{ sub (int .Values.replicaCount) 1 }}
selector:
matchLabels:
app: proxy
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ metadata:
heritage: "{{ .Release.Service }}"
type: Opaque
data:
proxy.config: {{ .Values.proxy.secrets.proxy_config | b64enc | quote }}
proxy.config: {{ .Values.secrets.proxy_config | b64enc | quote }}
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ spec:
type: ClusterIP
ports:
- name: http
port: {{ .Values.proxy.service.externalPort }}
targetPort: {{ .Values.proxy.service.internalPort }}
port: {{ .Values.service.externalPort }}
targetPort: {{ .Values.service.internalPort }}
selector:
app: proxy
release: {{ .Release.Name }}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{{- if .Values.proxy.metrics.serviceMonitor.enabled }}
{{- if .Values.metrics.serviceMonitor.enabled }}
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
Expand Down
Loading