diff --git a/site/src/modules/dashboard/Navbar/UserDropdown/UserDropdown.stories.tsx b/site/src/modules/dashboard/Navbar/UserDropdown/UserDropdown.stories.tsx index 9c488d0ffba28..b6b6baf0c405a 100644 --- a/site/src/modules/dashboard/Navbar/UserDropdown/UserDropdown.stories.tsx +++ b/site/src/modules/dashboard/Navbar/UserDropdown/UserDropdown.stories.tsx @@ -31,7 +31,7 @@ const Example: Story = { await step("click to open", async () => { await userEvent.click(canvas.getByRole("button")); await waitFor(() => - expect(screen.getByText(/v99\.999\.9999/i)).toBeInTheDocument(), + expect(screen.getByText(/v2\.99\.99/i)).toBeInTheDocument(), ); }); }, diff --git a/site/src/modules/provisioners/ProvisionerGroup.tsx b/site/src/modules/provisioners/ProvisionerGroup.tsx index eb8bf154bd808..9b9d3bb539c09 100644 --- a/site/src/modules/provisioners/ProvisionerGroup.tsx +++ b/site/src/modules/provisioners/ProvisionerGroup.tsx @@ -1,13 +1,20 @@ -import { useTheme } from "@emotion/react"; +import { type Interpolation, type Theme, useTheme } from "@emotion/react"; import Business from "@mui/icons-material/Business"; import Person from "@mui/icons-material/Person"; import Button from "@mui/material/Button"; +import Link from "@mui/material/Link"; import Tooltip from "@mui/material/Tooltip"; import type { BuildInfoResponse, ProvisionerDaemon } from "api/typesGenerated"; import { DropdownArrow } from "components/DropdownArrow/DropdownArrow"; import { Pill } from "components/Pill/Pill"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "components/Popover/Popover"; import { type FC, useState } from "react"; import { createDayString } from "utils/createDayString"; +import { docs } from "utils/docs"; import { ProvisionerTag } from "./ProvisionerTag"; type ProvisionerGroupType = "builtin" | "psk" | "key"; @@ -159,14 +166,51 @@ export const ProvisionerGroup: FC = ({ width: 310, }} > -
+

{provisioner.name}

- + {type === "builtin" ? ( Built-in ) : ( <> - {upToDate ? "Up to date" : provisioner.version} —{" "} + + + + {buildInfo + ? provisioner.version === buildInfo.version + ? "Up to date" + : "Out of date" + : provisioner.version} + + + +

Release version

+

{provisioner.version}

+

Protocol version

+

{provisioner.api_version}

+ {provisioner.api_version !== + buildInfo?.provisioner_api_version && ( +

+ This provisioner is out of date. You may + experience issues when using a provisioner version + that doesn’t match your Coder deployment. Please + upgrade to a newer version.{" "} + Learn more… +

+ )} +
+
{" "} + —{" "} {provisioner.last_seen_at && ( Last seen {createDayString(provisioner.last_seen_at)} @@ -211,3 +255,19 @@ export const ProvisionerGroup: FC = ({
); }; + +const styles = { + title: (theme) => ({ + marginTop: 0, + marginBottom: 0, + color: theme.palette.text.primary, + fontSize: 14, + lineHeight: "150%", + fontWeight: 600, + }), + + text: (theme) => ({ + marginTop: 0, + marginBottom: 12, + }), +} satisfies Record>; diff --git a/site/src/pages/ManagementSettingsPage/OrganizationProvisionersPageView.stories.tsx b/site/src/pages/ManagementSettingsPage/OrganizationProvisionersPageView.stories.tsx index 3960c36358294..1306f0e74b649 100644 --- a/site/src/pages/ManagementSettingsPage/OrganizationProvisionersPageView.stories.tsx +++ b/site/src/pages/ManagementSettingsPage/OrganizationProvisionersPageView.stories.tsx @@ -26,6 +26,19 @@ export const Provisioners: Story = { psk: [MockProvisioner, MockUserProvisioner, MockProvisionerWithTags], userAuth: [], keys: new Map([ + [ + "ベン", + [ + MockProvisioner, + { + ...MockProvisioner2, + version: "2.0.0", + api_version: "1.0", + warnings: [{ code: "EUNKNOWN", message: "私は時代遅れです" }], + }, + ], + ], + ["ジャイデン", [MockProvisioner, MockProvisioner2]], [ "ケイラ", [ diff --git a/site/src/testHelpers/entities.ts b/site/src/testHelpers/entities.ts index 989e837a2b3b8..7a6e0b1fd8190 100644 --- a/site/src/testHelpers/entities.ts +++ b/site/src/testHelpers/entities.ts @@ -217,7 +217,7 @@ export const MockBuildInfo: TypesGen.BuildInfoResponse = { agent_api_version: "1.0", provisioner_api_version: "1.1", external_url: "file:///mock-url", - version: "v99.999.9999+c9cdf14", + version: "v2.99.99", dashboard_url: "https:///mock-url", workspace_proxy: false, upgrade_message: "My custom upgrade message",