mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-07 21:27:31 +00:00
updated integrations page
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 3.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 9.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 26 KiB |
@@ -1,28 +1,4 @@
|
|||||||
[
|
[
|
||||||
{
|
|
||||||
"name": "Docker",
|
|
||||||
"slug": "docker",
|
|
||||||
"image": "Docker",
|
|
||||||
"docsLink": "https://infisical.com/docs/integrations/platforms/docker"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Docker Compose",
|
|
||||||
"slug": "docker-compose",
|
|
||||||
"image": "Docker Compose",
|
|
||||||
"docsLink": "https://infisical.com/docs/integrations/platforms/docker-compose"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Kubernetes",
|
|
||||||
"slug": "kubernetes",
|
|
||||||
"image": "Kubernetes",
|
|
||||||
"docsLink": "https://infisical.com/docs/integrations/platforms/kubernetes"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Terraform",
|
|
||||||
"slug": "terraform",
|
|
||||||
"image": "Terraform",
|
|
||||||
"docsLink": "https://infisical.com/docs/integrations/frameworks/terraform"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "React",
|
"name": "React",
|
||||||
"slug": "react",
|
"slug": "react",
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "Docker",
|
||||||
|
"slug": "docker",
|
||||||
|
"image": "Docker",
|
||||||
|
"docsLink": "https://infisical.com/docs/integrations/platforms/docker"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Docker Compose",
|
||||||
|
"slug": "docker-compose",
|
||||||
|
"image": "Docker Compose",
|
||||||
|
"docsLink": "https://infisical.com/docs/integrations/platforms/docker-compose"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Kubernetes",
|
||||||
|
"slug": "kubernetes",
|
||||||
|
"image": "Kubernetes",
|
||||||
|
"docsLink": "https://infisical.com/docs/integrations/platforms/kubernetes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Terraform",
|
||||||
|
"slug": "terraform",
|
||||||
|
"image": "Terraform",
|
||||||
|
"docsLink": "https://infisical.com/docs/integrations/frameworks/terraform"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jenkins",
|
||||||
|
"slug": "jenkins",
|
||||||
|
"image": "Jenkins",
|
||||||
|
"docsLink": "https://infisical.com/docs/integrations/cicd/jenkins"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Infisical Agent",
|
||||||
|
"slug": "agent",
|
||||||
|
"image": "Agent",
|
||||||
|
"docsLink": "https://infisical.com/docs/integrations/platforms/infisical-agent"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Amazon ECS",
|
||||||
|
"slug": "ecs",
|
||||||
|
"image": "ECS",
|
||||||
|
"docsLink": "https://infisical.com/docs/integrations/platforms/ecs-with-agent"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Ansible",
|
||||||
|
"slug": "ansible",
|
||||||
|
"image": "Ansible",
|
||||||
|
"docsLink": "https://infisical.com/docs/integrations/platforms/ansible"
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -120,7 +120,7 @@
|
|||||||
"available": "Platform & Cloud Integrations",
|
"available": "Platform & Cloud Integrations",
|
||||||
"available-text1": "Click on the integration you want to connect. This will let your environment variables flow automatically into selected third-party services.",
|
"available-text1": "Click on the integration you want to connect. This will let your environment variables flow automatically into selected third-party services.",
|
||||||
"available-text2": "Note: during an integration with Heroku, for security reasons, it is impossible to maintain end-to-end encryption. In theory, this lets Infisical decrypt yor environment variables. In practice, we can assure you that this will never be done, and it allows us to protect your secrets from bad actors online. The core Infisical service will always stay end-to-end encrypted. With any questions, reach out [email protected].",
|
"available-text2": "Note: during an integration with Heroku, for security reasons, it is impossible to maintain end-to-end encryption. In theory, this lets Infisical decrypt yor environment variables. In practice, we can assure you that this will never be done, and it allows us to protect your secrets from bad actors online. The core Infisical service will always stay end-to-end encrypted. With any questions, reach out [email protected].",
|
||||||
"cloud-integrations": "Cloud Integrations",
|
"cloud-integrations": "Native Integrations",
|
||||||
"framework-integrations": "Framework Integrations",
|
"framework-integrations": "Framework Integrations",
|
||||||
"click-to-start": "Click on an integration to begin syncing secrets to it.",
|
"click-to-start": "Click on an integration to begin syncing secrets to it.",
|
||||||
"click-to-setup": "Click on a framework to get the setup instructions.",
|
"click-to-setup": "Click on a framework to get the setup instructions.",
|
||||||
|
|||||||
@@ -1,14 +1,16 @@
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import Head from "next/head";
|
import Head from "next/head";
|
||||||
import frameworkIntegrationOptions from "public/json/frameworkIntegrations.json";
|
import frameworkIntegrationOptions from "public/json/frameworkIntegrations.json";
|
||||||
|
import infrastructureIntegrationOptions from "public/json/infrastructureIntegrations.json";
|
||||||
|
|
||||||
import { IntegrationsPage } from "@app/views/IntegrationsPage";
|
import { IntegrationsPage } from "@app/views/IntegrationsPage";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
frameworkIntegrations: typeof frameworkIntegrationOptions;
|
frameworkIntegrations: typeof frameworkIntegrationOptions;
|
||||||
|
infrastructureIntegrations: typeof infrastructureIntegrationOptions;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Integration = ({ frameworkIntegrations }: Props) => {
|
const Integration = ({ frameworkIntegrations, infrastructureIntegrations }: Props) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@@ -20,7 +22,7 @@ const Integration = ({ frameworkIntegrations }: Props) => {
|
|||||||
<meta property="og:title" content="Manage your .env files in seconds" />
|
<meta property="og:title" content="Manage your .env files in seconds" />
|
||||||
<meta name="og:description" content={t("integrations.description") as string} />
|
<meta name="og:description" content={t("integrations.description") as string} />
|
||||||
</Head>
|
</Head>
|
||||||
<IntegrationsPage frameworkIntegrations={frameworkIntegrations} />
|
<IntegrationsPage frameworkIntegrations={frameworkIntegrations} infrastructureIntegrations={infrastructureIntegrations} />
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
@@ -28,7 +30,8 @@ const Integration = ({ frameworkIntegrations }: Props) => {
|
|||||||
export const getStaticProps = () => {
|
export const getStaticProps = () => {
|
||||||
return {
|
return {
|
||||||
props: {
|
props: {
|
||||||
frameworkIntegrations: frameworkIntegrationOptions
|
frameworkIntegrations: frameworkIntegrationOptions,
|
||||||
|
infrastructureIntegrations: infrastructureIntegrationOptions
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -21,15 +21,17 @@ import { ProjectVersion } from "@app/hooks/api/workspace/types";
|
|||||||
|
|
||||||
import { CloudIntegrationSection } from "./components/CloudIntegrationSection";
|
import { CloudIntegrationSection } from "./components/CloudIntegrationSection";
|
||||||
import { FrameworkIntegrationSection } from "./components/FrameworkIntegrationSection";
|
import { FrameworkIntegrationSection } from "./components/FrameworkIntegrationSection";
|
||||||
|
import { InfrastructureIntegrationSection } from "./components/InfrastructureIntegrationSection/InfrastructureIntegrationSection";
|
||||||
import { IntegrationsSection } from "./components/IntegrationsSection";
|
import { IntegrationsSection } from "./components/IntegrationsSection";
|
||||||
import { generateBotKey, redirectForProviderAuth } from "./IntegrationPage.utils";
|
import { generateBotKey, redirectForProviderAuth } from "./IntegrationPage.utils";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
frameworkIntegrations: Array<{ name: string; slug: string; image: string; docsLink: string }>;
|
frameworkIntegrations: Array<{ name: string; slug: string; image: string; docsLink: string }>;
|
||||||
|
infrastructureIntegrations: Array<{ name: string; slug: string; image: string; docsLink: string }>;
|
||||||
};
|
};
|
||||||
|
|
||||||
export const IntegrationsPage = withProjectPermission(
|
export const IntegrationsPage = withProjectPermission(
|
||||||
({ frameworkIntegrations }: Props) => {
|
({ frameworkIntegrations, infrastructureIntegrations }: Props) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
|
||||||
@@ -228,6 +230,7 @@ export const IntegrationsPage = withProjectPermission(
|
|||||||
</ModalContent>
|
</ModalContent>
|
||||||
</Modal>
|
</Modal>
|
||||||
<FrameworkIntegrationSection frameworks={frameworkIntegrations} />
|
<FrameworkIntegrationSection frameworks={frameworkIntegrations} />
|
||||||
|
<InfrastructureIntegrationSection integrations={infrastructureIntegrations} />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
+33
@@ -1,4 +1,7 @@
|
|||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
|
import { faKeyboard } from "@fortawesome/free-regular-svg-icons";
|
||||||
|
import { faComputer } from "@fortawesome/free-solid-svg-icons";
|
||||||
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
frameworks: Array<{
|
frameworks: Array<{
|
||||||
@@ -50,6 +53,36 @@ export const FrameworkIntegrationSection = ({ frameworks }: Props) => {
|
|||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
))}
|
))}
|
||||||
|
<a
|
||||||
|
key="framework-integration-more"
|
||||||
|
href="https://infisical.com/docs/cli/commands/run"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
target="_blank"
|
||||||
|
className="relative flex h-32 cursor-pointer flex-row items-center justify-center rounded-md p-0.5 duration-200"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
className="flex h-full w-full cursor-pointer flex-col items-center justify-center rounded-md border border-mineshaft-600 bg-mineshaft-800 font-semibold text-gray-300 duration-200 hover:bg-mineshaft-700 group-hover:text-gray-200 px-1 text-xl w-full max-w-xs text-center"
|
||||||
|
>
|
||||||
|
<FontAwesomeIcon className="text-5xl mb-2 text-white/90" icon={faKeyboard} />
|
||||||
|
<div className="h-2" />
|
||||||
|
CLI
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
<a
|
||||||
|
key="framework-integration-more"
|
||||||
|
href="https://infisical.com/docs/sdks/overview"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
target="_blank"
|
||||||
|
className="relative flex h-32 cursor-pointer flex-row items-center justify-center rounded-md p-0.5 duration-200"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
className="flex h-full w-full cursor-pointer flex-col items-center justify-center rounded-md border border-mineshaft-600 bg-mineshaft-800 font-semibold text-gray-300 duration-200 hover:bg-mineshaft-700 group-hover:text-gray-200 px-1 text-xl w-full max-w-xs text-center"
|
||||||
|
>
|
||||||
|
<FontAwesomeIcon className="text-5xl mb-1 text-white/90" icon={faComputer} />
|
||||||
|
<div className="h-2" />
|
||||||
|
SDKs
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
+50
@@ -0,0 +1,50 @@
|
|||||||
|
type Props = {
|
||||||
|
integrations: Array<{
|
||||||
|
name: string;
|
||||||
|
image: string;
|
||||||
|
slug: string;
|
||||||
|
docsLink: string;
|
||||||
|
}>;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const InfrastructureIntegrationSection = ({ integrations }: Props) => {
|
||||||
|
const sortedIntegrations = integrations.sort((a, b) => a.name.localeCompare(b.name));
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<div className="mx-4 mt-12 mb-4 flex flex-col items-start justify-between px-2 text-xl">
|
||||||
|
<h1 className="text-3xl font-semibold">Infrastructure Integrations</h1>
|
||||||
|
<p className="text-base text-gray-400">Click on of the integration to read the documentation.</p>
|
||||||
|
</div>
|
||||||
|
<div className="mx-6 grid grid-cols-2 gap-4 lg:grid-cols-3 2xl:grid-cols-4">
|
||||||
|
{sortedIntegrations.map((integration) => (
|
||||||
|
<a
|
||||||
|
key={`framework-integration-${integration.slug}`}
|
||||||
|
href={integration.docsLink}
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
target="_blank"
|
||||||
|
className="relative w-full flex h-32 cursor-pointer flex-row items-center justify-center rounded-md p-0.5 duration-200"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
onKeyDown={() => null}
|
||||||
|
role="button"
|
||||||
|
tabIndex={0}
|
||||||
|
className="group relative w-full cursor-pointer duration-200 hover:bg-mineshaft-700 flex h-32 flex-row items-center rounded-md border border-mineshaft-600 bg-mineshaft-800 p-4"
|
||||||
|
key={integration?.name}
|
||||||
|
>
|
||||||
|
<img
|
||||||
|
src={`/images/integrations/${integration.image}.png`}
|
||||||
|
height={integration?.name ? 60 : 90}
|
||||||
|
width={integration?.name ? 60 : 90}
|
||||||
|
alt="integration logo"
|
||||||
|
/>
|
||||||
|
<div className="ml-4 max-w-xs text-xl font-semibold text-gray-300 duration-200 group-hover:text-gray-200">
|
||||||
|
{integration?.name && integration.name}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
+1
@@ -0,0 +1 @@
|
|||||||
|
export { InfrastructureIntegrationSection } from "./InfrastructureIntegrationSection";
|
||||||
Reference in New Issue
Block a user