From 96f67712d83d9d89b1575b32f256522220a8ed94 Mon Sep 17 00:00:00 2001 From: Gyanendra Mishra Date: Tue, 12 Mar 2024 13:14:24 +0000 Subject: [PATCH] feat: add an add to GitHub button on an encalve (#2256) First frontend PR, please review properly Note that the instance id and api key should fill up when in cloud! --- .../modals/AddGithubActionModal.tsx | 50 +++++++++++++++++ .../widgets/AddGithubActionButton.tsx | 54 +++++++++++++++++++ .../app/src/emui/enclaves/enclave/Enclave.tsx | 2 + 3 files changed, 106 insertions(+) create mode 100644 enclave-manager/web/packages/app/src/emui/enclaves/components/modals/AddGithubActionModal.tsx create mode 100644 enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/AddGithubActionButton.tsx diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/AddGithubActionModal.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/AddGithubActionModal.tsx new file mode 100644 index 0000000000..e0ee6609b1 --- /dev/null +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/modals/AddGithubActionModal.tsx @@ -0,0 +1,50 @@ +import { + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalFooter, + ModalHeader, + ModalOverlay, +} from "@chakra-ui/react"; +import { FileDisplay } from "kurtosis-ui-components"; +import { apiKey, instanceUUID } from "../../../../cookies"; + +export type AddGithubActionModalProps = { + packageId: string; + isOpen: boolean; + onClose: () => void; +}; + +export const AddGithubActionModal = ({ isOpen, onClose, packageId }: AddGithubActionModalProps) => { + const commands = ` +name: CI +on: + pull_request: + +jobs: + run_kurtosis: + runs-on: ubuntu-latest + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + - name: Run Kurtosis + uses: kurtosis-tech/kurtosis-github-action@v1 + with: + path: ${packageId} + cloud_instance_id: ${instanceUUID} + cloud_api_key: ${apiKey} # We recommend placing this in repository secrets;`; + return ( + + + + Run this enclave from GitHub + + + + + The GitHub Action allows you to run this package directly in CI + + + ); +}; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/AddGithubActionButton.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/AddGithubActionButton.tsx new file mode 100644 index 0000000000..d827b2e56e --- /dev/null +++ b/enclave-manager/web/packages/app/src/emui/enclaves/components/widgets/AddGithubActionButton.tsx @@ -0,0 +1,54 @@ +import { Button, ButtonProps, Tooltip } from "@chakra-ui/react"; +import { isDefined } from "kurtosis-ui-components"; +import { useState } from "react"; +import { FiGithub } from "react-icons/fi"; +import { EnclaveFullInfo } from "../../types"; +import { AddGithubActionModal } from "../modals/AddGithubActionModal"; + +type AddGithubActionButtonProps = ButtonProps & { + enclave: EnclaveFullInfo; +}; + +export const AddGithubActionButton = ({ enclave, ...buttonProps }: AddGithubActionButtonProps) => { + const [showModal, setShowModal] = useState(false); + + if (!isDefined(enclave.starlarkRun)) { + return ( + + ); + } + + if (enclave.starlarkRun.isErr) { + return ( + + + + ); + } + + return ( + <> + + + + setShowModal(false)} + /> + + ); +}; diff --git a/enclave-manager/web/packages/app/src/emui/enclaves/enclave/Enclave.tsx b/enclave-manager/web/packages/app/src/emui/enclaves/enclave/Enclave.tsx index c13856c970..1ffbfd1820 100644 --- a/enclave-manager/web/packages/app/src/emui/enclaves/enclave/Enclave.tsx +++ b/enclave-manager/web/packages/app/src/emui/enclaves/enclave/Enclave.tsx @@ -4,6 +4,7 @@ import { useNavigate, useParams } from "react-router-dom"; import { AppPageLayout, HoverLineTabList, KurtosisAlert, PageTitle } from "kurtosis-ui-components"; import { FunctionComponent } from "react"; import { EditEnclaveButton } from "../components/EditEnclaveButton"; +import { AddGithubActionButton } from "../components/widgets/AddGithubActionButton"; import { ConnectEnclaveButton } from "../components/widgets/ConnectEnclaveButton"; import { DeleteEnclavesButton } from "../components/widgets/DeleteEnclavesButton"; import { useFullEnclave } from "../EnclavesContext"; @@ -56,6 +57,7 @@ const EnclaveImpl = ({ enclave }: EnclaveImplProps) => { +