Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
  •  
  •  
  •  
17 changes: 14 additions & 3 deletions .oxlintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,24 @@
"internal-packages/tsql/src/grammar/"
],
"rules": {
"no-unused-vars": "off",
"no-unused-vars": [
"error",
{
"args": "none",
"argsIgnorePattern": "^_",
"varsIgnorePattern": "^_",
"caughtErrors": "all",
"caughtErrorsIgnorePattern": "^_",
"destructuredArrayIgnorePattern": "^_",
"ignoreRestSiblings": true
}
],
"no-empty-pattern": "off",
"no-control-regex": "off",
"typescript/no-non-null-asserted-optional-chain": "off",
"no-unused-expressions": ["warn", { "allowShortCircuit": true, "allowTernary": true }],
"typescript/consistent-type-imports": "off",
"import/no-duplicates": "off",
"typescript/consistent-type-imports": "error",
"import/no-duplicates": "error",
"import/namespace": "off",
"react-hooks/exhaustive-deps": "off",
"react-hooks/rules-of-hooks": "off"
Expand Down
4 changes: 2 additions & 2 deletions apps/coordinator/src/checkpointer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -334,7 +334,7 @@ export class Checkpointer {

try {
await setTimeout(delayMs, undefined, { signal });
} catch (error) {
} catch (_error) {
this.#logger.log("Checkpoint canceled during initial delay", { runId });
return { success: false, reason: "CANCELED" };
}
Expand Down Expand Up @@ -364,7 +364,7 @@ export class Checkpointer {

try {
await setTimeout(delay.milliseconds, undefined, { signal });
} catch (error) {
} catch (_error) {
this.#logger.log("Checkpoint canceled during retry delay", { runId });
return { success: false, reason: "CANCELED" };
}
Expand Down
2 changes: 1 addition & 1 deletion apps/coordinator/src/exec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ export class Buildah {
try {
await x("buildah", ["login", "--get-login", registryHost], { throwOnError: true });
return true;
} catch (error) {
} catch (_error) {
return false;
}
}
Expand Down
2 changes: 1 addition & 1 deletion apps/coordinator/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { createServer } from "node:http";
import { Server } from "socket.io";
import type { WaitReason } from "@trigger.dev/core/v3";
import {
CoordinatorToPlatformMessages,
CoordinatorToProdWorkerMessages,
omit,
PlatformToCoordinatorMessages,
ProdWorkerSocketData,
ProdWorkerToCoordinatorMessages,
WaitReason,
} from "@trigger.dev/core/v3";
import { ZodNamespace } from "@trigger.dev/core/v3/zodNamespace";
import { ZodSocketConnection } from "@trigger.dev/core/v3/zodSocket";
Expand Down
2 changes: 1 addition & 1 deletion apps/coordinator/src/util.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ export function safeJsonParse(json?: string): unknown {

try {
return JSON.parse(json);
} catch (e) {
} catch (_e) {
return null;
}
}
10 changes: 4 additions & 6 deletions apps/docker-provider/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
import { $, type ExecaChildProcess, execa } from "execa";
import {
ProviderShell,
import type { PostStartCauses, PreStopCauses } from "@trigger.dev/core/v3";
import type {
TaskOperations,
TaskOperationsCreateOptions,
TaskOperationsIndexOptions,
TaskOperationsRestoreOptions,
} from "@trigger.dev/core/v3/apps";
import { SimpleLogger } from "@trigger.dev/core/v3/apps";
import { isExecaChildProcess } from "@trigger.dev/core/v3/apps";
import { ProviderShell, SimpleLogger, isExecaChildProcess } from "@trigger.dev/core/v3/apps";
import { testDockerCheckpoint } from "@trigger.dev/core/v3/serverOnly";
import { $, type ExecaChildProcess, execa } from "execa";
import { setTimeout } from "node:timers/promises";
import { PostStartCauses, PreStopCauses } from "@trigger.dev/core/v3";

const MACHINE_NAME = process.env.MACHINE_NAME || "local";
const COORDINATOR_PORT = process.env.COORDINATOR_PORT || 8020;
Expand Down
7 changes: 3 additions & 4 deletions apps/kubernetes-provider/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
import * as k8s from "@kubernetes/client-node";
import {
import type {
EnvironmentType,
MachinePreset,
PostStartCauses,
PreStopCauses,
} from "@trigger.dev/core/v3";
import {
ProviderShell,
SimpleLogger,
import type {
TaskOperations,
TaskOperationsCreateOptions,
TaskOperationsIndexOptions,
TaskOperationsPrePullDeploymentOptions,
TaskOperationsRestoreOptions,
} from "@trigger.dev/core/v3/apps";
import { ProviderShell, SimpleLogger } from "@trigger.dev/core/v3/apps";
import { PodCleaner } from "./podCleaner";
import { TaskMonitor } from "./taskMonitor";
import { UptimeHeartbeat } from "./uptimeHeartbeat";
Expand Down
11 changes: 7 additions & 4 deletions apps/kubernetes-provider/src/taskMonitor.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
import * as k8s from "@kubernetes/client-node";
import { SimpleLogger } from "@trigger.dev/core/v3/apps";
import { EXIT_CODE_ALREADY_HANDLED, EXIT_CODE_CHILD_NONZERO } from "@trigger.dev/core/v3/apps";
import { setTimeout } from "timers/promises";
import PQueue from "p-queue";
import { TaskRunErrorCodes, type Prettify, type TaskRunInternalError } from "@trigger.dev/core/v3";
import {
EXIT_CODE_ALREADY_HANDLED,
EXIT_CODE_CHILD_NONZERO,
SimpleLogger,
} from "@trigger.dev/core/v3/apps";
import PQueue from "p-queue";
import { setTimeout } from "timers/promises";

type FailureDetails = Prettify<{
exitCode: number;
Expand Down
6 changes: 2 additions & 4 deletions apps/supervisor/src/clients/kubernetes.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
import * as https from "node:https";
import * as k8s from "@kubernetes/client-node";
import { Informer } from "@kubernetes/client-node";
import { ListPromise } from "@kubernetes/client-node";
import { KubernetesObject } from "@kubernetes/client-node";
import type { Informer, KubernetesObject, ListPromise } from "@kubernetes/client-node";
import { assertExhaustive } from "@trigger.dev/core/utils";
import { SimpleStructuredLogger } from "@trigger.dev/core/v3/utils/structuredLogger";
import * as https from "node:https";

export const RUNTIME_ENV = process.env.KUBERNETES_PORT ? "kubernetes" : "local";

Expand Down
2 changes: 1 addition & 1 deletion apps/supervisor/src/services/failedPodHandler.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ describe.skipIf(!process.env.K8S_INTEGRATION_TESTS)("FailedPodHandler Integratio
// Create the test namespace if it doesn't exist
try {
await k8s.core.readNamespace({ name: namespace });
} catch (error) {
} catch (_error) {
await k8s.core.createNamespace({
body: {
metadata: {
Expand Down
9 changes: 5 additions & 4 deletions apps/supervisor/src/services/failedPodHandler.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import type { Informer, V1Pod } from "@kubernetes/client-node";
import { LogLevel, SimpleStructuredLogger } from "@trigger.dev/core/v3/utils/structuredLogger";
import { K8sApi } from "../clients/kubernetes.js";
import type { Registry } from "prom-client";
import { Counter, Histogram } from "prom-client";
import { setTimeout } from "timers/promises";
import type { K8sApi } from "../clients/kubernetes.js";
import { createK8sApi } from "../clients/kubernetes.js";
import { Informer, V1Pod } from "@kubernetes/client-node";
import { Counter, Registry, Histogram } from "prom-client";
import { register } from "../metrics.js";
import { setTimeout } from "timers/promises";

type PodStatus = "Pending" | "Running" | "Succeeded" | "Failed" | "Unknown" | "GracefulShutdown";

Expand Down
4 changes: 2 additions & 2 deletions apps/supervisor/src/services/podCleaner.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ describe.skipIf(!process.env.K8S_INTEGRATION_TESTS)("PodCleaner Integration Test
// Create the test namespace, only if it doesn't exist
try {
await k8s.core.readNamespace({ name: namespace });
} catch (error) {
} catch (_error) {
await k8s.core.createNamespace({
body: {
metadata: {
Expand Down Expand Up @@ -325,7 +325,7 @@ async function waitForPodDeletion({
name: podName,
});
await setTimeout(waitMs);
} catch (error) {
} catch (_error) {
// Pod was deleted
return;
}
Expand Down
7 changes: 4 additions & 3 deletions apps/supervisor/src/services/podCleaner.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { IntervalService } from "@trigger.dev/core/v3";
import { SimpleStructuredLogger } from "@trigger.dev/core/v3/utils/structuredLogger";
import { K8sApi } from "../clients/kubernetes.js";
import type { Registry } from "prom-client";
import { Counter, Gauge } from "prom-client";
import type { K8sApi } from "../clients/kubernetes.js";
import { createK8sApi } from "../clients/kubernetes.js";
import { IntervalService } from "@trigger.dev/core/v3";
import { Counter, Gauge, Registry } from "prom-client";
import { register } from "../metrics.js";

export type PodCleanerOptions = {
Expand Down
2 changes: 1 addition & 1 deletion apps/supervisor/src/workloadManager/ecrAuth.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ECRClient, GetAuthorizationTokenCommand } from "@aws-sdk/client-ecr";
import { SimpleStructuredLogger } from "@trigger.dev/core/v3/utils/structuredLogger";
import { tryCatch } from "@trigger.dev/core";
import Docker from "dockerode";
import type Docker from "dockerode";

interface ECRTokenCache {
token: string;
Expand Down
19 changes: 9 additions & 10 deletions apps/supervisor/src/workloadServer/index.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { type Namespace, Server, type Socket } from "socket.io";
import { SnapshotCallbackPayloadSchema } from "@internal/compute";
import { type CheckpointClient, HttpServer } from "@trigger.dev/core/v3/serverOnly";
import { SimpleStructuredLogger } from "@trigger.dev/core/v3/utils/structuredLogger";
import EventEmitter from "node:events";
import { z } from "zod";
import {
type WorkloadRunSnapshotsSinceResponseBody,
type SupervisorHttpClient,
WORKLOAD_HEADERS,
type WorkloadClientSocketData,
Expand All @@ -16,29 +16,28 @@ import {
type WorkloadRunAttemptCompleteResponseBody,
WorkloadRunAttemptStartRequestBody,
type WorkloadRunAttemptStartResponseBody,
WorkloadRunSnapshotsSinceResponseBody,
type WorkloadServerToClientEvents,
type WorkloadSuspendRunResponseBody,
} from "@trigger.dev/core/v3/workers";
import { HttpServer, type CheckpointClient } from "@trigger.dev/core/v3/serverOnly";
import { type IncomingMessage } from "node:http";
import { register } from "../metrics.js";
import EventEmitter from "node:events";
import type { IncomingMessage, ServerResponse } from "node:http";
import { type Namespace, Server, type Socket } from "socket.io";
import { z } from "zod";
import { env } from "../env.js";
import { SnapshotCallbackPayloadSchema } from "@internal/compute";
import { register } from "../metrics.js";
import {
ComputeSnapshotService,
type RunTraceContext,
} from "../services/computeSnapshotService.js";
import type { ComputeWorkloadManager } from "../workloadManager/compute.js";
import type { OtlpTraceService } from "../services/otlpTraceService.js";
import type { ServerResponse } from "node:http";
import {
emitOneShot,
runWideEvent,
setMeta,
type State,
type WideEventOptions,
} from "../wideEvents/index.js";
import type { ComputeWorkloadManager } from "../workloadManager/compute.js";

// Use the official export when upgrading to socket.io@4.8.0
interface DefaultEventsMap {
Expand Down
6 changes: 5 additions & 1 deletion apps/webapp/app/components/BulkActionFilterSummary.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,11 @@ export function BulkActionFilterSummary({
</Paragraph>
);
case "filter": {
const { label, valueLabel, rangeType } = timeFilterRenderValues({
const {
label,
valueLabel,
rangeType: _rangeType,
} = timeFilterRenderValues({
from: filters.from ? dateFromString(`${filters.from}`) : undefined,
to: filters.to ? dateFromString(`${filters.to}`) : undefined,
period: filters.period,
Expand Down
3 changes: 2 additions & 1 deletion apps/webapp/app/components/admin/debugRun.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ import { Button } from "../primitives/Buttons";
import { Dialog, DialogContent, DialogHeader, DialogTrigger } from "../primitives/Dialog";
import { Cog6ToothIcon } from "@heroicons/react/20/solid";
import { type loader } from "~/routes/resources.taskruns.$runParam.debug";
import { UseDataFunctionReturn, useTypedFetcher } from "remix-typedjson";
import type { UseDataFunctionReturn } from "remix-typedjson";
import { useTypedFetcher } from "remix-typedjson";
import { useEffect } from "react";
import { Spinner } from "../primitives/Spinner";
import * as Property from "~/components/primitives/PropertyTable";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ import { parseWithZod } from "@conform-to/zod";
import { Form, useActionData } from "@remix-run/react";
import { useEffect, useMemo, useRef, useState } from "react";
import { z } from "zod";
import { AnimatedCallout } from "~/components/primitives/AnimatedCallout";
import { getBillingLimitMode } from "~/components/billing/billingAlertsFormat";
import { formatGracePeriodMs } from "~/components/billing/billingLimitFormat";
import { AnimatedCallout } from "~/components/primitives/AnimatedCallout";
import { Button } from "~/components/primitives/Buttons";
import { CheckboxWithLabel } from "~/components/primitives/Checkbox";
import { Fieldset } from "~/components/primitives/Fieldset";
Expand All @@ -18,7 +18,6 @@ import { InputGroup } from "~/components/primitives/InputGroup";
import { Paragraph } from "~/components/primitives/Paragraph";
import { RadioGroup, RadioGroupItem } from "~/components/primitives/RadioButton";
import type { BillingLimitResult } from "~/services/billingLimit.schemas";
import { cn } from "~/utils/cn";
import { formatCurrency } from "~/utils/numberFormatter";

export const billingLimitFormSchema = z.discriminatedUnion("mode", [
Expand All @@ -45,8 +44,6 @@ export const billingLimitFormSchema = z.discriminatedUnion("mode", [
}),
]);

type BillingLimitFormValue = z.infer<typeof billingLimitFormSchema>;

type BillingLimitActionData = {
formIntent: "billing-limit";
submission: SubmissionResult;
Expand Down Expand Up @@ -141,8 +138,8 @@ export function BillingLimitConfigSection({
const limitSubmission =
actionData?.formIntent === "billing-limit" ? actionData.submission : undefined;

const needsInitialSave = !billingLimit.isConfigured;
const isLimitDirty =
const _needsInitialSave = !billingLimit.isConfigured;
const _isLimitDirty =
mode !== savedMode || (mode === "custom" && customAmount !== savedCustomAmount);
const isDirty = isBillingLimitFormDirty({
billingLimit,
Expand Down
3 changes: 1 addition & 2 deletions apps/webapp/app/components/billing/FreePlanUsage.tsx
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { ArrowUpCircleIcon } from "@heroicons/react/24/outline";
import { motion, useMotionValue, useTransform } from "framer-motion";
import { Paragraph } from "../primitives/Paragraph";
import { Link } from "@remix-run/react";
import { motion, useMotionValue, useTransform } from "framer-motion";
import { cn } from "~/utils/cn";

export function FreePlanUsage({ to, percentage }: { to: string; percentage: number }) {
Expand Down
9 changes: 0 additions & 9 deletions apps/webapp/app/components/billing/billingAlertsFormat.ts
Original file line number Diff line number Diff line change
Expand Up @@ -230,15 +230,6 @@ export function isLegacyDollarAmountField(

return rawAmount === planDollars || rawAmount === effectiveDollars;
}

function isAbsoluteDollarAlertLevels(levels: number[]): boolean {
if (levels.length === 0) {
return false;
}

return !usesFractionAlertLevelFormat(levels);
}

export function isAbsoluteSavedAlerts(alerts: BillingAlertsFormData): boolean {
return getSavedAlertAmountCents(alerts) === ABSOLUTE_ALERT_BASE_CENTS;
}
Expand Down
11 changes: 5 additions & 6 deletions apps/webapp/app/components/code/ChartConfigPanel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,16 @@ import { IconSortAscending, IconSortDescending } from "@tabler/icons-react";
import { BarChart, CheckIcon, LineChart, Plus, XIcon } from "lucide-react";
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
import { cn } from "~/utils/cn";
import { Paragraph } from "../primitives/Paragraph";
import { Popover, PopoverContent, PopoverTrigger } from "../primitives/Popover";
import { Select, SelectItem } from "../primitives/Select";
import { Switch } from "../primitives/Switch";
import SegmentedControl from "../primitives/SegmentedControl";
import { Button } from "../primitives/Buttons";
import {
type AggregationType,
type ChartConfiguration,
type SortDirection,
} from "../metrics/QueryWidget";
import { Paragraph } from "../primitives/Paragraph";
import { Popover, PopoverContent, PopoverTrigger } from "../primitives/Popover";
import SegmentedControl from "../primitives/SegmentedControl";
import { Select, SelectItem } from "../primitives/Select";
import { Switch } from "../primitives/Switch";
import { CHART_COLORS_BY_HUE, getSeriesColor } from "./chartColors";

export const defaultChartConfig: ChartConfiguration = {
Expand Down
3 changes: 2 additions & 1 deletion apps/webapp/app/components/code/CodeBlock.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ import { ArrowsPointingOutIcon } from "@heroicons/react/20/solid";
import { Clipboard, ClipboardCheck } from "lucide-react";
import type { Language, PrismTheme } from "prism-react-renderer";
import { Highlight, Prism } from "prism-react-renderer";
import { forwardRef, ReactNode, useCallback, useEffect, useState } from "react";
import type { ReactNode } from "react";
import { forwardRef, useCallback, useEffect, useState } from "react";
import { TextWrapIcon } from "~/assets/icons/TextWrapIcon";
import { cn } from "~/utils/cn";
import { highlightSearchText } from "~/utils/logUtils";
Expand Down
Loading
Loading