nx/nx-dev/ui-remote-cache/src/lib/remote-cache-solutions.tsx
Benjamin Cabanes 3b0c456bbe
docs(nx-dev): add enterprise security page (#30852)
Introduce a new enterprise security page highlighting key features like cache poisoning protection, CI access, and personal access control.
2025-04-25 15:22:02 -04:00

275 lines
12 KiB
TypeScript

'use client';
import { ReactElement } from 'react';
import { CheckCircleIcon } from '@heroicons/react/24/solid';
import { ButtonLink, SectionHeading } from '@nx/nx-dev/ui-common';
import { sendCustomEvent } from '@nx/nx-dev/feature-analytics';
import Link from 'next/link';
import { ExclamationCircleIcon } from '@heroicons/react/24/outline';
export function RemoteCacheSolutions(): ReactElement {
return (
<section id="plans" className="scroll-mt-24">
<div className="mx-auto max-w-7xl px-4 sm:px-6 lg:px-8">
<header className="mx-auto max-w-3xl text-center">
<SectionHeading as="h2" variant="display">
Nx Remote Cache
</SectionHeading>
<SectionHeading as="p" variant="subtitle" className="mt-6">
Free remote caching solutions for any team.
</SectionHeading>
</header>
<div className="mt-24 flow-root">
<div className="-mt-16 grid max-w-full grid-cols-1 gap-12 sm:mx-auto lg:mt-0 lg:grid-cols-3 xl:-mx-4">
{/* NX CLOUD */}
<div>
<div className="rounded-xl border border-slate-200 bg-white p-8 dark:border-slate-800 dark:bg-slate-950">
<div className="flex items-center gap-x-2">
<h4 className="text-xl font-semibold leading-8 text-slate-950 dark:text-white">
Managed remote cache
</h4>
</div>
<p className="mt-2 text-sm">
Easiest setup, high performance, secure, fully managed by Nx
Cloud.
</p>
<div className="my-8">
<ButtonLink
href="https://cloud.nx.app/get-started/?utm_source=nx-dev&utm_medium=remote-cache&utm_campaign=self-hosted-cache&utm_content=manage-remote-cache-with-nx-cloud"
aria-describedby="nx-cloud-remote-cache"
title="Start caching your builds with Nx Cloud"
size="default"
variant="primary"
onClick={() =>
sendCustomEvent(
'manage-remote-cache-with-nx-cloud',
'managed-remote-cache',
'remote-cache'
)
}
className="w-full"
>
Get started
</ButtonLink>
</div>
<ul className="mt-4 divide-y divide-slate-200 border-t border-slate-200 text-sm dark:divide-slate-800 dark:border-slate-800">
<li className="flex items-start justify-start gap-x-2 py-2.5">
<CheckCircleIcon
aria-hidden="true"
className="h-6 w-5 flex-none text-blue-600 dark:text-sky-500"
/>
<span>Free plans available, no credit card required</span>
</li>
<li className="flex items-start justify-start gap-x-2 py-2.5">
<CheckCircleIcon
aria-hidden="true"
className="h-6 w-5 flex-none text-blue-600 dark:text-sky-500"
/>
<span>
Secure against cache poisoning (
<Link
href="/enterprise/security"
prefetch={false}
title="Remote caching security"
className="font-semibold underline"
>
Learn more
</Link>
)
</span>
</li>
<li className="flex items-start justify-start gap-x-2 py-2.5">
<CheckCircleIcon
aria-hidden="true"
className="h-6 w-5 flex-none text-blue-600 dark:text-sky-500"
/>
<span>Zero configuration</span>
</li>
<li className="flex items-start justify-start gap-x-2 py-2.5">
<CheckCircleIcon
aria-hidden="true"
className="h-6 w-5 flex-none text-blue-600 dark:text-sky-500"
/>
<span>
Hosted on Nx Cloud servers or on-premise with{' '}
<Link
href="/enterprise"
prefetch={false}
title="Learn about Nx Enterprise"
className="font-semibold underline"
>
Nx Enterprise
</Link>
</span>
</li>
<li className="flex items-start justify-start gap-x-2 py-2.5">
<CheckCircleIcon
aria-hidden="true"
className="h-6 w-5 flex-none text-blue-600 dark:text-sky-500"
/>
<span>
Enterprise grade access management and key revocation
</span>
</li>
<li className="flex items-start justify-start gap-x-2 py-2.5">
<CheckCircleIcon
aria-hidden="true"
className="h-6 w-5 flex-none text-blue-600 dark:text-sky-500"
/>
<span>
SOC-2 compliant (
<a
href="https://security.nx.app/"
title="Check our SOC 2 security report"
className="font-semibold underline"
>
view report
</a>
)
</span>
</li>
<li className="flex items-start justify-start gap-x-2 py-2.5">
<CheckCircleIcon
aria-hidden="true"
className="h-6 w-5 flex-none text-blue-600 dark:text-sky-500"
/>
<span>Support</span>
</li>
<li className="flex items-start justify-start gap-x-2 py-2.5">
<CheckCircleIcon
aria-hidden="true"
className="h-6 w-5 flex-none text-blue-600 dark:text-sky-500"
/>
<span>
Includes access to advanced CI features: distributed task
execution, re-running flaky tasks and automatic tasks
splitting
</span>
</li>
</ul>
</div>
</div>
{/*OFFICIAL PLUGINS*/}
<div>
<div className="rounded-xl border border-slate-200 bg-white p-8 dark:border-slate-800 dark:bg-slate-950">
<div className="flex items-center gap-x-2">
<h4 className="text-xl font-semibold leading-8 text-slate-950 dark:text-white">
Self-hosted cache
</h4>
</div>
<p className="mt-2 text-sm">
Dedicated NPM packages for major storage providers, Nx
managed.
</p>
<div className="my-8">
<ButtonLink
href="/recipes/running-tasks/self-hosted-caching"
aria-describedby="official-plugins"
title="Free official remote cache plugins"
size="default"
variant="primary"
onClick={() =>
sendCustomEvent(
'learn-more-self-hosted-cache-plugins',
'self-hosted-cache',
'remote-cache'
)
}
className="w-full"
>
Learn more
</ButtonLink>
</div>
<ul className="mt-4 divide-y divide-slate-200 border-t border-slate-200 text-sm dark:divide-slate-800 dark:border-slate-800">
<li className="flex items-start justify-start gap-x-2 py-2.5">
<CheckCircleIcon
aria-hidden="true"
className="h-6 w-5 flex-none text-blue-600 dark:text-sky-500"
/>
<span>Free for all users</span>
</li>
<li className="flex items-start justify-start gap-x-2 py-2.5">
<ExclamationCircleIcon
aria-hidden="true"
className="h-6 w-5 flex-none text-blue-600 dark:text-sky-500"
/>
<span>
Not recommended for organizations requiring HIPAA or SOC-2
compliance (
<Link
href="/enterprise/security"
prefetch={false}
title="Remote caching security"
className="font-semibold underline"
>
Learn more
</Link>
)
</span>
</li>
<li className="flex items-start justify-start gap-x-2 py-2.5">
<CheckCircleIcon
aria-hidden="true"
className="h-6 w-5 flex-none text-blue-600 dark:text-sky-500"
/>
<span>Supports Amazon S3, MinIO, GCP, Azure</span>
</li>
<li className="flex items-start justify-start gap-x-2 py-2.5">
<CheckCircleIcon
aria-hidden="true"
className="h-6 w-5 flex-none text-blue-600 dark:text-sky-500"
/>
<span>Supports shared network drives</span>
</li>
<li className="flex items-start justify-start gap-x-2 py-2.5">
<CheckCircleIcon
aria-hidden="true"
className="h-6 w-5 flex-none text-blue-600 dark:text-sky-500"
/>
<span>
Simple migration path from existing 3rd party plugins
</span>
</li>
</ul>
</div>
</div>
{/*OPENAPI*/}
<div>
<div className="rounded-xl border border-slate-200 bg-white p-8 dark:border-slate-800 dark:bg-slate-950">
<div className="flex items-center gap-x-2">
<h4 className="text-xl font-semibold leading-8 text-slate-950 dark:text-white">
Build your own
</h4>
</div>
<p className="mt-2 text-sm">
Create your own custom remote cache server.
</p>
<div className="mt-8">
<ButtonLink
href="/recipes/running-tasks/self-hosted-caching#build-your-own-caching-server"
aria-describedby="open-api"
title="Remote cache api specs"
size="default"
variant="primary"
onClick={() =>
sendCustomEvent(
'build-your-own-openapi',
'build-your-own',
'remote-cache'
)
}
className="w-full"
>
Learn more
</ButtonLink>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
);
}