Files
triggerdotdev--trigger.dev/apps/webapp/app/components/RuntimeIcon.tsx
nicktrn 0c71dc74df feat: add node 22 and bun runtime support with version display (#2254)
* update node-22 image

* update bun image

* disable io_uring

* fix fallback bun path

* prevent duplicate warnings

* add runtime and version to deployments

* runtime icons

* fallback to nodejs

* prevent empty table cell menu

* log if local build on deploy

* pass io_uring env var to child

* denormalize runtime and version, display on run details

* add changesets

* disable pr checks for changeset commits..

* add runtime data to deployed bg workers
2025-07-10 16:43:10 +01:00

59 lines
1.6 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { SimpleTooltip } from "~/components/primitives/Tooltip";
import { BunLogoIcon } from "~/assets/icons/BunLogoIcon";
import { NodejsLogoIcon } from "~/assets/icons/NodejsLogoIcon";
import { parseRuntime, formatRuntimeWithVersion, type NormalizedRuntime } from "~/utils/runtime";
interface RuntimeIconProps {
runtime?: string | null;
runtimeVersion?: string | null;
className?: string;
withLabel?: boolean;
}
const getIcon = (runtime: NormalizedRuntime, className: string) => {
switch (runtime) {
case "bun":
return <BunLogoIcon className={className} />;
case "node":
return <NodejsLogoIcon className={className} />;
default:
return <span className="text-text-dimmed"></span>;
}
};
export function RuntimeIcon({
runtime,
runtimeVersion,
className = "h-4 w-4",
withLabel = false,
}: RuntimeIconProps) {
const parsedRuntime = parseRuntime(runtime);
// Default to Node.js if no runtime is specified
const effectiveRuntime = parsedRuntime || {
runtime: "node" as const,
originalRuntime: "node",
displayName: "Node.js",
};
const icon = getIcon(effectiveRuntime.runtime, className);
const formattedText = formatRuntimeWithVersion(effectiveRuntime.originalRuntime, runtimeVersion);
if (withLabel) {
return (
<span className="flex items-center gap-1">
{icon}
<span>{formattedText}</span>
</span>
);
}
if (typeof icon === "object" && "type" in icon) {
return (
<SimpleTooltip button={icon} content={formattedText} side="top" disableHoverableContent />
);
}
return icon;
}