Skip to content

Commit 999d116

Browse files
committed
Merge remote-tracking branch 'origin/main' into feat(webapp)-filters-update
2 parents 39b88a8 + 5693b62 commit 999d116

51 files changed

Lines changed: 1576 additions & 102 deletions

Some content is hidden

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

.github/VOUCHED.td

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,5 @@ capaj
1919
chengzp
2020
bharathkumar39293
2121
bhekanik
22-
jrossi
22+
jrossi
23+
ThullyoCunha

.github/workflows/changesets-pr.yml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,3 +121,35 @@ jobs:
121121
else
122122
echo "No changes to commit"
123123
fi
124+
125+
bump-chart-version:
126+
name: Bump Helm chart version on release PR
127+
runs-on: ubuntu-latest
128+
needs: update-lockfile
129+
permissions:
130+
contents: write
131+
steps:
132+
- name: Checkout release branch
133+
uses: actions/checkout@v4
134+
with:
135+
ref: changeset-release/main
136+
137+
- name: Bump Chart.yaml
138+
run: |
139+
set -e
140+
VERSION=$(jq -r '.version' packages/cli-v3/package.json)
141+
sed -i "s/^version:.*/version: ${VERSION}/" ./hosting/k8s/helm/Chart.yaml
142+
sed -i "s/^appVersion:.*/appVersion: v${VERSION}/" ./hosting/k8s/helm/Chart.yaml
143+
144+
- name: Commit and push Chart.yaml bump
145+
run: |
146+
set -e
147+
git config user.name "github-actions[bot]"
148+
git config user.email "github-actions[bot]@users.noreply.github.com"
149+
git add hosting/k8s/helm/Chart.yaml
150+
if ! git diff --cached --quiet; then
151+
git commit -m "chore: bump helm chart version for release"
152+
git push origin changeset-release/main
153+
else
154+
echo "Chart.yaml already at target version, no-op"
155+
fi

.github/workflows/e2e-webapp.yml

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
name: "🧪 E2E Tests: Webapp"
2+
3+
permissions:
4+
contents: read
5+
6+
on:
7+
workflow_call:
8+
9+
jobs:
10+
e2eTests:
11+
name: "🧪 E2E Tests: Webapp"
12+
runs-on: ubuntu-latest
13+
timeout-minutes: 20
14+
env:
15+
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
16+
steps:
17+
- name: 🔧 Disable IPv6
18+
run: |
19+
sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
20+
sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
21+
sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=1
22+
23+
- name: 🔧 Configure docker address pool
24+
run: |
25+
CONFIG='{
26+
"default-address-pools" : [
27+
{
28+
"base" : "172.17.0.0/12",
29+
"size" : 20
30+
},
31+
{
32+
"base" : "192.168.0.0/16",
33+
"size" : 24
34+
}
35+
]
36+
}'
37+
mkdir -p /etc/docker
38+
echo "$CONFIG" | sudo tee /etc/docker/daemon.json
39+
40+
- name: 🔧 Restart docker daemon
41+
run: sudo systemctl restart docker
42+
43+
- name: ⬇️ Checkout repo
44+
uses: actions/checkout@v4
45+
with:
46+
fetch-depth: 0
47+
48+
- name: ⎔ Setup pnpm
49+
uses: pnpm/action-setup@v4
50+
with:
51+
version: 10.23.0
52+
53+
- name: ⎔ Setup node
54+
uses: buildjet/setup-node@v4
55+
with:
56+
node-version: 20.20.0
57+
cache: "pnpm"
58+
59+
# ..to avoid rate limits when pulling images
60+
- name: 🐳 Login to DockerHub
61+
if: ${{ env.DOCKERHUB_USERNAME }}
62+
uses: docker/login-action@v3
63+
with:
64+
username: ${{ secrets.DOCKERHUB_USERNAME }}
65+
password: ${{ secrets.DOCKERHUB_TOKEN }}
66+
- name: 🐳 Skipping DockerHub login (no secrets available)
67+
if: ${{ !env.DOCKERHUB_USERNAME }}
68+
run: echo "DockerHub login skipped because secrets are not available."
69+
70+
- name: 🐳 Pre-pull testcontainer images
71+
if: ${{ env.DOCKERHUB_USERNAME }}
72+
run: |
73+
echo "Pre-pulling Docker images with authenticated session..."
74+
docker pull postgres:14
75+
docker pull redis:7.2
76+
docker pull testcontainers/ryuk:0.11.0
77+
echo "Image pre-pull complete"
78+
79+
- name: 📥 Download deps
80+
run: pnpm install --frozen-lockfile
81+
82+
- name: 📀 Generate Prisma Client
83+
run: pnpm run generate
84+
85+
- name: 🏗️ Build Webapp
86+
run: pnpm run build --filter webapp
87+
88+
- name: 🧪 Run Webapp E2E Tests
89+
run: cd apps/webapp && pnpm exec vitest run --config vitest.e2e.config.ts --reporter=default
90+
env:
91+
WEBAPP_TEST_VERBOSE: "1"

.github/workflows/pr_checks.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ on:
66
paths-ignore:
77
- "docs/**"
88
- ".changeset/**"
9+
- "hosting/**"
910

1011
concurrency:
1112
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}

.github/workflows/release-helm.yml

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ on:
44
push:
55
tags:
66
- 'helm-v*'
7+
workflow_call:
8+
inputs:
9+
chart_version:
10+
description: 'Chart version to release'
11+
required: true
12+
type: string
713
workflow_dispatch:
814
inputs:
915
chart_version:
@@ -86,8 +92,8 @@ jobs:
8692
- name: Extract version from tag or input
8793
id: version
8894
run: |
89-
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
90-
VERSION="${{ github.event.inputs.chart_version }}"
95+
if [ -n "${{ inputs.chart_version }}" ]; then
96+
VERSION="${{ inputs.chart_version }}"
9197
else
9298
VERSION="${{ github.ref_name }}"
9399
VERSION="${VERSION#helm-v}"
@@ -122,9 +128,8 @@ jobs:
122128
- name: Create GitHub Release
123129
id: release
124130
uses: softprops/action-gh-release@v1
125-
if: github.event_name == 'push'
126131
with:
127-
tag_name: ${{ github.ref_name }}
132+
tag_name: helm-v${{ steps.version.outputs.version }}
128133
name: "Helm Chart ${{ steps.version.outputs.version }}"
129134
body: |
130135
### Installation

.github/workflows/release.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,13 @@ jobs:
142142
git tag "v.docker.${{ steps.get_version.outputs.package_version }}"
143143
git push origin "v.docker.${{ steps.get_version.outputs.package_version }}"
144144
145+
- name: Create and push Helm chart tag
146+
if: steps.changesets.outputs.published == 'true'
147+
run: |
148+
set -e
149+
git tag "helm-v${{ steps.get_version.outputs.package_version }}"
150+
git push origin "helm-v${{ steps.get_version.outputs.package_version }}"
151+
145152
# Trigger Docker builds directly via workflow_call since tags pushed with
146153
# GITHUB_TOKEN don't trigger other workflows (GitHub Actions limitation).
147154
publish-docker:
@@ -153,6 +160,21 @@ jobs:
153160
with:
154161
image_tag: v${{ needs.release.outputs.published_package_version }}
155162

163+
# Trigger Helm chart release directly via workflow_call (same GITHUB_TOKEN
164+
# limitation as the Docker path). Runs after Docker images are published so
165+
# the chart never references images that don't exist yet.
166+
publish-helm:
167+
name: 🧭 Publish Helm chart
168+
needs: [release, publish-docker]
169+
if: needs.release.outputs.published == 'true'
170+
permissions:
171+
contents: write
172+
packages: write
173+
uses: ./.github/workflows/release-helm.yml
174+
secrets: inherit
175+
with:
176+
chart_version: ${{ needs.release.outputs.published_package_version }}
177+
156178
# After Docker images are published, update the GitHub release with the exact GHCR tag URL.
157179
# The GHCR package version ID is only known after the image is pushed, so we query for it here.
158180
update-release:

.github/workflows/unit-tests.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ jobs:
1010
webapp:
1111
uses: ./.github/workflows/unit-tests-webapp.yml
1212
secrets: inherit
13+
e2e-webapp:
14+
uses: ./.github/workflows/e2e-webapp.yml
15+
secrets: inherit
1316
packages:
1417
uses: ./.github/workflows/unit-tests-packages.yml
1518
secrets: inherit
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
area: webapp
3+
type: feature
4+
---
5+
6+
Add a "Back office" tab to `/admin` and a per-organization detail page at `/admin/back-office/orgs/:orgId`. The first action available on that page is editing the org's API rate limit: admins can save a `tokenBucket` override (refill rate, interval, max tokens) and see a plain-English preview of the resulting sustained rate and burst allowance. Writes are audit-logged via the server logger.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
area: webapp
3+
type: fix
4+
---
5+
6+
Fix RSS memory leak in the realtime proxy routes. `/realtime/v1/runs`, `/realtime/v1/runs/:id`, and `/realtime/v1/batches/:id` called `fetch()` into Electric with no abort signal, so when a client disconnected mid long-poll, undici kept the upstream socket open and buffered response chunks that would never be consumed — retained only in RSS, invisible to V8 heap tooling. Thread `getRequestAbortSignal()` through `RealtimeClient.streamRun/streamRuns/streamBatch` to `longPollingFetch` and cancel the upstream body in the error path. Isolated reproducer showed ~44 KB retained per leaked request; signal propagation releases it cleanly.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
area: webapp
3+
type: fix
4+
---
5+
6+
Fix memory leak where every aborted SSE connection pinned the full request/response graph on Node 20, caused by `AbortSignal.any()` in `sse.ts` retaining its source signals indefinitely (see nodejs/node#54614, nodejs/node#55351). Also clear the `setTimeout(abort)` timer in `entry.server.tsx` so successful HTML renders don't pin the React tree for 30s per request.

0 commit comments

Comments
 (0)