Skip to content

Commit b272e30

Browse files
committed
Merge remote-tracking branch 'origin/main' into pr/2192
2 parents 32e4175 + b7134dd commit b272e30

116 files changed

Lines changed: 5064 additions & 1785 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": patch
3+
---
4+
5+
experimental processKeepAlive

.changeset/wet-dragons-boil.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+
Serialize metadata to prevent invalid metadata from breaking run completions

.github/workflows/release-helm.yml

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@ jobs:
2929
with:
3030
version: "3.18.3"
3131

32+
- name: Build dependencies
33+
run: helm dependency build ./hosting/k8s/helm/
34+
35+
- name: Extract dependency charts
36+
run: |
37+
cd ./hosting/k8s/helm/
38+
for file in ./charts/*.tgz; do echo "Extracting $file"; tar -xzf "$file" -C ./charts; done
39+
3240
- name: Lint Helm Chart
3341
run: |
3442
helm lint ./hosting/k8s/helm/
@@ -60,6 +68,14 @@ jobs:
6068
with:
6169
version: "3.18.3"
6270

71+
- name: Build dependencies
72+
run: helm dependency build ./hosting/k8s/helm/
73+
74+
- name: Extract dependency charts
75+
run: |
76+
cd ./hosting/k8s/helm/
77+
for file in ./charts/*.tgz; do echo "Extracting $file"; tar -xzf "$file" -C ./charts; done
78+
6379
- name: Log in to Container Registry
6480
uses: docker/login-action@v3
6581
with:
@@ -115,7 +131,7 @@ jobs:
115131
```bash
116132
helm upgrade --install trigger \
117133
oci://${{ env.REGISTRY }}/${{ github.repository_owner }}/charts/${{ env.CHART_NAME }} \
118-
--version ${{ steps.version.outputs.version }}
134+
--version "${{ steps.version.outputs.version }}"
119135
```
120136
121137
### Changes

apps/supervisor/src/util.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
import { isMacOS, isWindows } from "std-env";
22

3+
export function normalizeDockerHostUrl(url: string) {
4+
const $url = new URL(url);
5+
6+
if ($url.hostname === "localhost") {
7+
$url.hostname = getDockerHostDomain();
8+
}
9+
10+
return $url.toString();
11+
}
12+
313
export function getDockerHostDomain() {
414
return isMacOS || isWindows ? "host.docker.internal" : "localhost";
515
}

apps/supervisor/src/workloadManager/docker.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import {
55
type WorkloadManagerOptions,
66
} from "./types.js";
77
import { env } from "../env.js";
8-
import { getDockerHostDomain, getRunnerId } from "../util.js";
8+
import { getDockerHostDomain, getRunnerId, normalizeDockerHostUrl } from "../util.js";
99
import Docker from "dockerode";
1010
import { tryCatch } from "@trigger.dev/core";
1111

@@ -78,7 +78,7 @@ export class DockerWorkloadManager implements WorkloadManager {
7878
];
7979

8080
if (this.opts.warmStartUrl) {
81-
envVars.push(`TRIGGER_WARM_START_URL=${this.opts.warmStartUrl}`);
81+
envVars.push(`TRIGGER_WARM_START_URL=${normalizeDockerHostUrl(this.opts.warmStartUrl)}`);
8282
}
8383

8484
if (this.opts.metadataUrl) {

apps/webapp/app/components/SetupCommands.tsx

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { createContext, useContext, useState } from "react";
22
import { useAppOrigin } from "~/hooks/useAppOrigin";
33
import { useProject } from "~/hooks/useProject";
4+
import { useTriggerCliTag } from "~/hooks/useTriggerCliTag";
45
import {
56
ClientTabs,
67
ClientTabsContent,
@@ -35,8 +36,6 @@ function usePackageManager() {
3536
return context;
3637
}
3738

38-
const v3PackageTag = "latest";
39-
4039
function getApiUrlArg() {
4140
const appOrigin = useAppOrigin();
4241

@@ -69,8 +68,9 @@ export function InitCommandV3({ title }: TabsProps) {
6968
const project = useProject();
7069
const projectRef = project.externalRef;
7170
const apiUrlArg = getApiUrlArg();
71+
const triggerCliTag = useTriggerCliTag();
7272

73-
const initCommandParts = [`trigger.dev@${v3PackageTag}`, "init", `-p ${projectRef}`, apiUrlArg];
73+
const initCommandParts = [`trigger.dev@${triggerCliTag}`, "init", `-p ${projectRef}`, apiUrlArg];
7474
const initCommand = initCommandParts.filter(Boolean).join(" ");
7575

7676
const { activePackageManager, setActivePackageManager } = usePackageManager();
@@ -118,6 +118,7 @@ export function InitCommandV3({ title }: TabsProps) {
118118
}
119119

120120
export function TriggerDevStepV3({ title }: TabsProps) {
121+
const triggerCliTag = useTriggerCliTag();
121122
const { activePackageManager, setActivePackageManager } = usePackageManager();
122123

123124
return (
@@ -139,30 +140,31 @@ export function TriggerDevStepV3({ title }: TabsProps) {
139140
variant="secondary/medium"
140141
iconButton
141142
className="mb-4"
142-
value={`npx trigger.dev@${v3PackageTag} dev`}
143+
value={`npx trigger.dev@${triggerCliTag} dev`}
143144
/>
144145
</ClientTabsContent>
145146
<ClientTabsContent value={"pnpm"}>
146147
<ClipboardField
147148
variant="secondary/medium"
148149
iconButton
149150
className="mb-4"
150-
value={`pnpm dlx trigger.dev@${v3PackageTag} dev`}
151+
value={`pnpm dlx trigger.dev@${triggerCliTag} dev`}
151152
/>
152153
</ClientTabsContent>
153154
<ClientTabsContent value={"yarn"}>
154155
<ClipboardField
155156
variant="secondary/medium"
156157
iconButton
157158
className="mb-4"
158-
value={`yarn dlx trigger.dev@${v3PackageTag} dev`}
159+
value={`yarn dlx trigger.dev@${triggerCliTag} dev`}
159160
/>
160161
</ClientTabsContent>
161162
</ClientTabs>
162163
);
163164
}
164165

165166
export function TriggerLoginStepV3({ title }: TabsProps) {
167+
const triggerCliTag = useTriggerCliTag();
166168
const { activePackageManager, setActivePackageManager } = usePackageManager();
167169

168170
return (
@@ -184,23 +186,23 @@ export function TriggerLoginStepV3({ title }: TabsProps) {
184186
variant="secondary/medium"
185187
iconButton
186188
className="mb-4"
187-
value={`npx trigger.dev@${v3PackageTag} login`}
189+
value={`npx trigger.dev@${triggerCliTag} login`}
188190
/>
189191
</ClientTabsContent>
190192
<ClientTabsContent value={"pnpm"}>
191193
<ClipboardField
192194
variant="secondary/medium"
193195
iconButton
194196
className="mb-4"
195-
value={`pnpm dlx trigger.dev@${v3PackageTag} login`}
197+
value={`pnpm dlx trigger.dev@${triggerCliTag} login`}
196198
/>
197199
</ClientTabsContent>
198200
<ClientTabsContent value={"yarn"}>
199201
<ClipboardField
200202
variant="secondary/medium"
201203
iconButton
202204
className="mb-4"
203-
value={`yarn dlx trigger.dev@${v3PackageTag} login`}
205+
value={`yarn dlx trigger.dev@${triggerCliTag} login`}
204206
/>
205207
</ClientTabsContent>
206208
</ClientTabs>

apps/webapp/app/env.server.ts

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { z } from "zod";
22
import { isValidDatabaseUrl } from "./utils/db";
33
import { isValidRegex } from "./utils/regex";
44
import { BoolEnv } from "./utils/boolEnv";
5+
import { OTEL_ATTRIBUTE_PER_LINK_COUNT_LIMIT, OTEL_LINK_COUNT_LIMIT } from "@trigger.dev/core/v3";
56

67
const EnvironmentSchema = z.object({
78
NODE_ENV: z.union([z.literal("development"), z.literal("production"), z.literal("test")]),
@@ -276,6 +277,15 @@ const EnvironmentSchema = z.object({
276277
PROD_OTEL_LOG_EXPORT_TIMEOUT_MILLIS: z.string().default("30000"),
277278
PROD_OTEL_LOG_MAX_QUEUE_SIZE: z.string().default("512"),
278279

280+
TRIGGER_OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT: z.string().default("256"),
281+
TRIGGER_OTEL_LOG_ATTRIBUTE_COUNT_LIMIT: z.string().default("256"),
282+
TRIGGER_OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT: z.string().default("131072"),
283+
TRIGGER_OTEL_LOG_ATTRIBUTE_VALUE_LENGTH_LIMIT: z.string().default("131072"),
284+
TRIGGER_OTEL_SPAN_EVENT_COUNT_LIMIT: z.string().default("10"),
285+
TRIGGER_OTEL_LINK_COUNT_LIMIT: z.string().default("2"),
286+
TRIGGER_OTEL_ATTRIBUTE_PER_LINK_COUNT_LIMIT: z.string().default("10"),
287+
TRIGGER_OTEL_ATTRIBUTE_PER_EVENT_COUNT_LIMIT: z.string().default("10"),
288+
279289
CHECKPOINT_THRESHOLD_IN_MS: z.coerce.number().int().default(30000),
280290

281291
// Internal OTEL environment variables
@@ -428,6 +438,10 @@ const EnvironmentSchema = z.object({
428438
RUN_ENGINE_PROCESS_WORKER_QUEUE_DEBOUNCE_MS: z.coerce.number().int().default(200),
429439
RUN_ENGINE_DEQUEUE_BLOCKING_TIMEOUT_SECONDS: z.coerce.number().int().default(10),
430440
RUN_ENGINE_MASTER_QUEUE_CONSUMERS_INTERVAL_MS: z.coerce.number().int().default(500),
441+
RUN_ENGINE_CONCURRENCY_SWEEPER_SCAN_SCHEDULE: z.string().optional(),
442+
RUN_ENGINE_CONCURRENCY_SWEEPER_PROCESS_MARKED_SCHEDULE: z.string().optional(),
443+
RUN_ENGINE_CONCURRENCY_SWEEPER_SCAN_JITTER_IN_MS: z.coerce.number().int().optional(),
444+
RUN_ENGINE_CONCURRENCY_SWEEPER_PROCESS_MARKED_JITTER_IN_MS: z.coerce.number().int().optional(),
431445

432446
RUN_ENGINE_RUN_LOCK_DURATION: z.coerce.number().int().default(5000),
433447
RUN_ENGINE_RUN_LOCK_AUTOMATIC_EXTENSION_THRESHOLD: z.coerce.number().int().default(1000),
@@ -593,6 +607,7 @@ const EnvironmentSchema = z.object({
593607

594608
RUN_ENGINE_WORKER_ENABLED: z.string().default("1"),
595609
RUN_ENGINE_WORKER_LOG_LEVEL: z.enum(["log", "error", "warn", "info", "debug"]).default("info"),
610+
RUN_ENGINE_RUN_QUEUE_LOG_LEVEL: z.enum(["log", "error", "warn", "info", "debug"]).default("info"),
596611

597612
/** How long should the presence ttl last */
598613
DEV_PRESENCE_SSE_TIMEOUT: z.coerce.number().int().default(30_000),
@@ -837,9 +852,13 @@ const EnvironmentSchema = z.object({
837852
RUN_REPLICATION_LEADER_LOCK_ADDITIONAL_TIME_MS: z.coerce.number().int().default(10_000),
838853
RUN_REPLICATION_LEADER_LOCK_RETRY_INTERVAL_MS: z.coerce.number().int().default(500),
839854
RUN_REPLICATION_WAIT_FOR_ASYNC_INSERT: z.string().default("0"),
840-
RUN_REPLICATION_KEEP_ALIVE_ENABLED: z.string().default("1"),
855+
RUN_REPLICATION_KEEP_ALIVE_ENABLED: z.string().default("0"),
841856
RUN_REPLICATION_KEEP_ALIVE_IDLE_SOCKET_TTL_MS: z.coerce.number().int().optional(),
842857
RUN_REPLICATION_MAX_OPEN_CONNECTIONS: z.coerce.number().int().default(10),
858+
// Retry configuration for insert operations
859+
RUN_REPLICATION_INSERT_MAX_RETRIES: z.coerce.number().int().default(3),
860+
RUN_REPLICATION_INSERT_BASE_DELAY_MS: z.coerce.number().int().default(100),
861+
RUN_REPLICATION_INSERT_MAX_DELAY_MS: z.coerce.number().int().default(2000),
843862

844863
// Clickhouse
845864
CLICKHOUSE_URL: z.string().optional(),
@@ -856,6 +875,9 @@ const EnvironmentSchema = z.object({
856875

857876
// Machine presets
858877
MACHINE_PRESETS_OVERRIDE_PATH: z.string().optional(),
878+
879+
// CLI package tag (e.g. "latest", "v4-beta", "4.0.0") - used for setup commands
880+
TRIGGER_CLI_TAG: z.string().default("latest"),
859881
});
860882

861883
export type Environment = z.infer<typeof EnvironmentSchema>;
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { useTypedRouteLoaderData } from "remix-typedjson";
2+
import { type loader } from "~/root";
3+
4+
export function useTriggerCliTag() {
5+
const routeMatch = useTypedRouteLoaderData<typeof loader>("root");
6+
7+
return routeMatch!.triggerCliTag;
8+
}

apps/webapp/app/root.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ export const loader = async ({ request }: LoaderFunctionArgs) => {
5656
features,
5757
appEnv: env.APP_ENV,
5858
appOrigin: env.APP_ORIGIN,
59+
triggerCliTag: env.TRIGGER_CLI_TAG,
5960
kapa,
6061
},
6162
{ headers: { "Set-Cookie": await commitSession(session) } }

apps/webapp/app/services/runsReplicationInstance.server.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ function initializeRunsReplicationInstance() {
6262
logLevel: env.RUN_REPLICATION_LOG_LEVEL,
6363
waitForAsyncInsert: env.RUN_REPLICATION_WAIT_FOR_ASYNC_INSERT === "1",
6464
tracer: provider.getTracer("runs-replication-service"),
65+
insertMaxRetries: env.RUN_REPLICATION_INSERT_MAX_RETRIES,
66+
insertBaseDelayMs: env.RUN_REPLICATION_INSERT_BASE_DELAY_MS,
67+
insertMaxDelayMs: env.RUN_REPLICATION_INSERT_MAX_DELAY_MS,
6568
});
6669

6770
if (env.RUN_REPLICATION_ENABLED === "1") {

0 commit comments

Comments
 (0)