From 2b74f40446020b62818d4400f752a24a0f0e35fe Mon Sep 17 00:00:00 2001 From: Philippe Virouleau <philippe.virouleau@inria.fr> Date: Mon, 25 Nov 2024 11:24:31 +0100 Subject: [PATCH] Introduce a postinstall branch selector --- src/components/CreatePipeline.tsx | 19 ++++++++++++------- src/components/RemoteBranchSelector.tsx | 11 ++++++----- src/components/TestImagesTabContent.tsx | 15 +++++++++++++-- src/lib/requests.ts | 4 ++-- 4 files changed, 33 insertions(+), 16 deletions(-) diff --git a/src/components/CreatePipeline.tsx b/src/components/CreatePipeline.tsx index 3aa7cfd..71dad6b 100644 --- a/src/components/CreatePipeline.tsx +++ b/src/components/CreatePipeline.tsx @@ -9,7 +9,6 @@ import Button from '@mui/material/Button'; import Container from '@mui/material/Container'; import EnabledEnvAlert from './EnabledEnvAlert'; import GenerationTabContent from './GenerationTabContent'; -import PushImagesTabContent from './PushImagesTabContent'; import RemoteBranchSelector from './RemoteBranchSelector'; import Tab from '@mui/material/Tab'; import Tabs from '@mui/material/Tabs'; @@ -56,7 +55,7 @@ type Pipeline = { // FIXME: can we do something like typeof(useRouter()) ? function createPipelineAction(generations: GenState, clusters: TestState, - ref: string, refApiBranch: string, + ref: string, refApiBranch: string, postinstallBranch: string | null, token: string | undefined, router: AppRouterInstance, setLoading: Dispatch<SetStateAction<boolean>>) { @@ -75,6 +74,9 @@ function createPipelineAction(generations: GenState, clusters: TestState, { key: 'CLUSTERS', value: getValidSelectedClusters(generations, clusters).join(',')}, ] }; + if (postinstallBranch) { + payload.variables.push({ key: 'CUSTOM_POSTINSTALL_BRANCH', value: postinstallBranch}); + } setLoading(true); fetch(CREATE_PIPELINE_URL, { method: 'POST', @@ -97,9 +99,11 @@ function CreatePipelineButton({ clusters, branch, refApiBranch, + postinstallBranch, }: { branch: string | null, refApiBranch: string | null, + postinstallBranch: string | null, generations: GenState, clusters: TestState, }) { @@ -118,7 +122,7 @@ function CreatePipelineButton({ if (branch === null || refApiBranch === null) { return; } - createPipelineAction(generations, clusters, branch, refApiBranch, auth.user?.access_token, router, setLoading) + createPipelineAction(generations, clusters, branch, refApiBranch, postinstallBranch, auth.user?.access_token, router, setLoading) }} sx={{ ml: 'auto' }} > @@ -148,6 +152,7 @@ export default function CreatePipeline() { const [clusters, setClusters] = useState<TestState>([]); const [branch, setBranch] = useState<string | null>(null); const [refApiBranch, setRefApiBranch] = useState<string | null>(null); + const [postinstallBranch, setPostinstallBranch] = useState<string | null>(null); return ( <Container maxWidth="xl"> @@ -158,16 +163,17 @@ export default function CreatePipeline() { branch={branch} setBranch={setBranch} label="Environments recipes branch" + useDefault /> </Box> <Box sx={{ borderBottom: 1, borderColor: 'divider', mb: 2 }}> <Tabs value={value} onChange={handleChange}> <Tab label="Generation" /> <Tab label="Tests" /> - <Tab label="Push" /> <CreatePipelineButton branch={branch} refApiBranch={refApiBranch} + postinstallBranch={postinstallBranch} generations={generations} clusters={clusters} /> @@ -186,11 +192,10 @@ export default function CreatePipeline() { setClusters={setClusters} branch={refApiBranch} setBranchState={setRefApiBranch} + postinstallBranch={postinstallBranch} + setPostinstallBranch={setPostinstallBranch} /> </CustomTabPanel> - <CustomTabPanel value={value} index={2}> - <PushImagesTabContent /> - </CustomTabPanel> </Container> ); } diff --git a/src/components/RemoteBranchSelector.tsx b/src/components/RemoteBranchSelector.tsx index 991b166..d51b74c 100644 --- a/src/components/RemoteBranchSelector.tsx +++ b/src/components/RemoteBranchSelector.tsx @@ -17,10 +17,11 @@ const GET_BRANCHES = gql` `; export default function RemoteBranchSelector({ - branch, setBranch, label, project + branch, setBranch, label, project, useDefault, helperText } : { branch: string | null, setBranch: Dispatch<string | null>, - label: string, project: string, + label: string, project: string, useDefault?: boolean, + helperText?: string, }) { const { loading, error, data } = useQuery(GET_BRANCHES, { variables: { project }, @@ -28,10 +29,10 @@ export default function RemoteBranchSelector({ // Set the default branch when we have one. useEffect(() => { - if (data && !branch) { + if (useDefault && data && !branch) { setBranch(data.project.repository.rootRef); } - }, [branch, data, setBranch]); + }, [branch, data, setBranch, useDefault]); const options = useMemo(() => { if (data) { @@ -52,7 +53,7 @@ export default function RemoteBranchSelector({ <TextField {...params} error={error ? true : false} - helperText={error ? error.message : ''} + helperText={error ? error.message : helperText} label={label} /> )} diff --git a/src/components/TestImagesTabContent.tsx b/src/components/TestImagesTabContent.tsx index db335a5..01e189d 100644 --- a/src/components/TestImagesTabContent.tsx +++ b/src/components/TestImagesTabContent.tsx @@ -315,10 +315,13 @@ function AllClustersAccordion({ export default function TestImagesTabContent({ clusters, setClusters, generations, branch, setBranchState, + postinstallBranch, setPostinstallBranch, }: { generations: GenState, branch: string | null, setBranchState: Dispatch<SetStateAction<string | null>>, + postinstallBranch: string | null, + setPostinstallBranch: Dispatch<SetStateAction<string | null>>, } & TestClustersProps) { const [showInfo, setShowInfo] = useState(false); @@ -334,7 +337,7 @@ export default function TestImagesTabContent({ <Stack direction="row" sx={{ - minWidth: '300px', mb: 2, alignItems: 'center' + minWidth: '300px', mb: 2, alignItems: 'flex-start' }} spacing={2} > @@ -343,9 +346,17 @@ export default function TestImagesTabContent({ branch={branch} setBranch={setBranch} label="Ref API branch" + useDefault + /> + <RemoteBranchSelector + project="grid5000/g5k-postinstall" + branch={postinstallBranch} + setBranch={setPostinstallBranch} + label="Postinstall branch" + helperText="Leave empty to use the default" /> - <Legend /> </Stack> + <Legend /> {branch && ( <AllClustersAccordion clusters={clusters} diff --git a/src/lib/requests.ts b/src/lib/requests.ts index a1ed032..cfb3c8b 100644 --- a/src/lib/requests.ts +++ b/src/lib/requests.ts @@ -2,9 +2,9 @@ export function defaultFetch(url: string, options = {}) { return fetch(url, options).then(r => { if (!r.ok) { const error = new Error( - `An error ${r.status} occurred while fetching data` + `An error ${r.status} occurred while fetching data`, + { cause: r.statusText } ); - error.cause = r.statusText; throw error; } return r.json(); -- GitLab