Skip to content

Commit 37a82b5

Browse files
committed
Merge remote-tracking branch 'origin/main' into feat/dashboard-agent-bedrock
# Conflicts: # pnpm-lock.yaml
2 parents 39b9bfb + 6e77102 commit 37a82b5

383 files changed

Lines changed: 68275 additions & 1380 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@trigger.dev/redis-worker": patch
3+
---
4+
5+
Fair queue tenants can no longer get permanently stuck behind leaked concurrency slots. Slots are now freed on every path that finishes a message, a failed release no longer causes a message to run twice or lose its retry, and a background sweep frees any slot that does leak, so a tenant's queues recover on their own instead of needing manual cleanup.

.changeset/lucky-pillows-invite.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@trigger.dev/core": patch
3+
---
4+
5+
Task metrics no longer go missing for projects that configure their own `metricExporters` or `metricReaders`, and the flush error that came with it is gone.

.changeset/prebuilt-base-images.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"trigger.dev": patch
3+
---
4+
5+
Deployment builds now use custom base layer images and no longer install system packages during every build. This improves layer caching resulting in both faster deployments and faster image pulls on the worker cluster side.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@trigger.dev/core": patch
3+
"@trigger.dev/sdk": patch
4+
---
5+
6+
Define stable execution windows on declarative scheduled tasks. Schedule API responses now expose both the nominal CRON time and its assigned time, while the dashboard shows configured windows and upcoming assignments.

.claude/REVIEW.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ Every PR gets a performance pass — not just the ones that look perf-sensitive.
5656
## Always check
5757

5858
- **Tests use testcontainers, not mocks.** Vitest with `redisTest` / `postgresTest` / `containerTest` from `@internal/testcontainers`. Any new `vi.mock(...)` on Redis, Postgres, BullMQ, or other infra is wrong here — 🔴 if added in production-path tests, 🟡 if isolated unit test.
59-
- **Public-package changes have a changeset.** `pnpm run changeset:add` produces `.changeset/*.md`. Required for any edit under `packages/*`. Missing → 🟡; missing on a breaking change → 🔴.
60-
- **Server-only changes have `.server-changes/*.md`.** Required for `apps/webapp/`, `apps/supervisor/` edits with no public-package change. Body should be 1-2 sentences (it has to fit as one bullet in a future changelog). Missing → 🟡.
59+
- **User-facing public-package changes have a changeset.** `pnpm run changeset:add` produces `.changeset/*.md`. Changesets are user-facing release notes, not a catalog of every change: required when a `packages/*` or `integrations/*` change is something a user would notice or act on, skipped for internal-only changes, refactors, chores, and packages not consumed independently (e.g. `@trigger.dev/redis-worker`). Missing on a user-facing change → 🟡; missing on a breaking change → 🔴. Do not flag a missing note when the change is not user-facing.
60+
- **User-facing server-only changes have `.server-changes/*.md`.** Required for user-facing `apps/webapp/`, `apps/supervisor/` edits in a PR with no package or integration change that requires a changeset; skip internal-only or admin-only changes, refactors, and chores. Body should be 1-2 sentences (it has to fit as one bullet in a future changelog). Missing on a user-facing change → 🟡.
6161
- **Lua script naming.** Coexisting scripts use behavior-descriptive suffixes (`Tracked`), never `V2`. Old name must keep working until the next deploy clears it.
6262
- **RunQueue payload shape.** V2 run-queue payload's `projectId` is consumed by `workerQueueResolver` for override matching. If a PR drops it from the payload, 🔴.
6363
- **`safeSend` scope.** Defensive IPC wrappers belong on loop / interval / handler contexts, not one-shot terminal sends. If the PR adds `safeSend` to a single terminal call for consistency, 🟡 with a "remove this" suggestion.

.claude/rules/server-apps.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ paths:
55

66
# Server App Changes
77

8-
When modifying server apps (webapp, supervisor, etc.) with **no package changes**, add a `.server-changes/` file instead of a changeset:
8+
`.server-changes/` files are user-facing release notes, not a catalog of every change. When a user-facing server app change (webapp, supervisor, etc.) is in a PR with **no package or integration change that requires a changeset**, add a `.server-changes/` file instead of a changeset. Skip it for internal-only or admin-only changes, refactors, and chores:
99

1010
```bash
1111
cat > .server-changes/descriptive-name.md << 'EOF'
@@ -20,6 +20,6 @@ EOF
2020

2121
- **area**: `webapp` | `supervisor`
2222
- **type**: `feature` | `fix` | `improvement` | `breaking`
23-
- If the PR also touches `packages/`, just the changeset is sufficient (no `.server-changes/` needed).
23+
- If the PR also touches `packages/` or `integrations/` and that change needs a changeset, the changeset covers it (no `.server-changes/` needed). If the package or integration change is internal and needs no changeset, still add a `.server-changes/` file for the user-facing server change.
2424

2525
The body ships **verbatim in user-facing release notes**. Keep it to 1–2 short sentences, non-technical, written for a dashboard user: describe what changed for them, never the implementation (no header names, endpoints, middleware, storage mechanisms, internal tools). See `.server-changes/README.md` for full guidance.

.github/VOUCHED.td

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,5 @@ brentshulman-silkline
2828
Leafgard
2929
Rohan170603
3030
NERLOE
31-
Jakub-Vacek
31+
Jakub-Vacek
32+
gtremper

.github/workflows/base-images.yml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ jobs:
3939
build_packages: ${{ steps.config.outputs.build_packages }}
4040
suite: ${{ steps.config.outputs.suite }}
4141
snapshot: ${{ steps.config.outputs.snapshot }}
42+
publish_id: ${{ steps.config.outputs.publish_id }}
4243
source_date_epoch: ${{ steps.config.outputs.source_date_epoch }}
4344
push: ${{ steps.config.outputs.push }}
4445
steps:
@@ -52,6 +53,7 @@ jobs:
5253
SNAPSHOT_INPUT: ${{ inputs.debian_snapshot }}
5354
EVENT_NAME: ${{ github.event_name }}
5455
REF: ${{ github.ref }}
56+
SHA: ${{ github.sha }}
5557
run: |
5658
PACKAGES="$(jq -er '.packages' base-images/images.json)"
5759
BUILD_PACKAGES="$(jq -er '.buildPackages' base-images/images.json)"
@@ -89,6 +91,7 @@ jobs:
8991
echo "build_packages=$BUILD_PACKAGES"
9092
echo "suite=$SUITE"
9193
echo "snapshot=$SNAPSHOT"
94+
echo "publish_id=${SNAPSHOT:0:8}-${SNAPSHOT:9:6}-${SHA:0:7}"
9295
echo "source_date_epoch=$EPOCH"
9396
echo "push=$PUSH"
9497
} >> "$GITHUB_OUTPUT"
@@ -164,7 +167,11 @@ jobs:
164167
platforms: linux/amd64,linux/arm64
165168
provenance: false
166169
outputs: type=image,push=true,rewrite-timestamp=true
167-
tags: triggerdotdev/${{ matrix.image.repo }}:${{ matrix.image.tag }}
170+
# The dated tag is immutable and keeps every published digest
171+
# tag-referenced forever; shipped CLI releases pin these digests
172+
tags: |
173+
triggerdotdev/${{ matrix.image.repo }}:${{ matrix.image.tag }}
174+
triggerdotdev/${{ matrix.image.repo }}:${{ matrix.image.tag }}-${{ needs.setup.outputs.publish_id }}
168175
build-args: |
169176
BASE_IMAGE=${{ matrix.image.base }}
170177
DEBIAN_SNAPSHOT=${{ needs.setup.outputs.snapshot }}
@@ -187,7 +194,9 @@ jobs:
187194
platforms: linux/amd64,linux/arm64
188195
provenance: false
189196
outputs: type=image,push=true,rewrite-timestamp=true
190-
tags: triggerdotdev/${{ matrix.image.repo }}:${{ matrix.image.tag }}-build
197+
tags: |
198+
triggerdotdev/${{ matrix.image.repo }}:${{ matrix.image.tag }}-build
199+
triggerdotdev/${{ matrix.image.repo }}:${{ matrix.image.tag }}-build-${{ needs.setup.outputs.publish_id }}
191200
build-args: |
192201
BASE_IMAGE=${{ matrix.image.base }}
193202
DEBIAN_SNAPSHOT=${{ needs.setup.outputs.snapshot }}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: "🛡️ FK Cascade Index Guard"
2+
3+
on:
4+
workflow_call:
5+
6+
permissions:
7+
contents: read
8+
9+
jobs:
10+
fk-cascade-guard:
11+
runs-on: warp-ubuntu-latest-x64-16x
12+
13+
steps:
14+
- name: ⬇️ Checkout repo
15+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
16+
with:
17+
fetch-depth: 0
18+
persist-credentials: false
19+
20+
- name: ⎔ Setup pnpm
21+
uses: pnpm/action-setup@fc06bc1257f339d1d5d8b3a19a8cae5388b55320 # v5.0.0
22+
with:
23+
version: 10.33.2
24+
25+
- name: ⎔ Setup node
26+
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
27+
with:
28+
node-version: 24.18.0
29+
cache: "pnpm"
30+
31+
- name: 📥 Download deps
32+
run: pnpm install --frozen-lockfile
33+
34+
- name: 🛡️ FK cascade index guard
35+
run: pnpm --filter webapp run guard:fk-cascade-index -- --check

.github/workflows/pr_checks.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ jobs:
5858
- '.github/workflows/unit-tests-webapp.yml'
5959
- '.github/workflows/e2e-webapp.yml'
6060
- '.github/workflows/runops-guard.yml'
61+
- '.github/workflows/fk-cascade-guard.yml'
6162
- '.configs/**'
6263
- 'package.json'
6364
- 'pnpm-lock.yaml'
@@ -150,6 +151,11 @@ jobs:
150151
if: needs.changes.outputs.webapp == 'true'
151152
uses: ./.github/workflows/runops-guard.yml
152153

154+
fk-cascade-guard:
155+
needs: changes
156+
if: needs.changes.outputs.webapp == 'true'
157+
uses: ./.github/workflows/fk-cascade-guard.yml
158+
153159
webapp:
154160
needs: changes
155161
if: needs.changes.outputs.webapp == 'true'
@@ -206,6 +212,7 @@ jobs:
206212
- code-quality
207213
- typecheck
208214
- runops-guard
215+
- fk-cascade-guard
209216
- webapp
210217
- e2e-webapp
211218
- packages

0 commit comments

Comments
 (0)