diff --git a/frontend/src/__tests__/cypress/cypress/pages/pipelines/cloneRunPage.ts b/frontend/src/__tests__/cypress/cypress/pages/pipelines/duplicateRunPage.ts similarity index 90% rename from frontend/src/__tests__/cypress/cypress/pages/pipelines/cloneRunPage.ts rename to frontend/src/__tests__/cypress/cypress/pages/pipelines/duplicateRunPage.ts index d16290828e..1f4158a4bb 100644 --- a/frontend/src/__tests__/cypress/cypress/pages/pipelines/cloneRunPage.ts +++ b/frontend/src/__tests__/cypress/cypress/pages/pipelines/duplicateRunPage.ts @@ -7,8 +7,8 @@ import type { } from '~/concepts/pipelines/kfTypes'; import { CreateRunPage } from '~/__tests__/cypress/cypress/pages/pipelines/createRunPage'; -class CloneRunPage extends CreateRunPage { - protected testId = 'clone-run-page'; +class DuplicateRunPage extends CreateRunPage { + protected testId = 'duplicate-run-page'; constructor(type: 'run' | 'schedule') { super(type); @@ -67,5 +67,5 @@ class CloneRunPage extends CreateRunPage { } } -export const cloneRunPage = new CloneRunPage('run'); -export const cloneSchedulePage = new CloneRunPage('schedule'); +export const duplicateRunPage = new DuplicateRunPage('run'); +export const duplicateSchedulePage = new DuplicateRunPage('schedule'); diff --git a/frontend/src/__tests__/cypress/cypress/pages/pipelines/index.ts b/frontend/src/__tests__/cypress/cypress/pages/pipelines/index.ts index 05ea8be400..cbf0dee616 100644 --- a/frontend/src/__tests__/cypress/cypress/pages/pipelines/index.ts +++ b/frontend/src/__tests__/cypress/cypress/pages/pipelines/index.ts @@ -6,7 +6,7 @@ export * from './pipelineImportModal'; export * from './pipelineVersionImportModal'; export * from './pipelineRunTable'; export * from './createRunPage'; -export * from './cloneRunPage'; +export * from './duplicateRunPage'; export * from './pipelineFilterBar'; export * from './restoreModal'; export * from './archiveModal'; diff --git a/frontend/src/__tests__/cypress/cypress/tests/mocked/pipelines/pipelineCreateRuns.cy.ts b/frontend/src/__tests__/cypress/cypress/tests/mocked/pipelines/pipelineCreateRuns.cy.ts index 087718e4cf..43829f0dc4 100644 --- a/frontend/src/__tests__/cypress/cypress/tests/mocked/pipelines/pipelineCreateRuns.cy.ts +++ b/frontend/src/__tests__/cypress/cypress/tests/mocked/pipelines/pipelineCreateRuns.cy.ts @@ -11,12 +11,12 @@ import { } from '~/__mocks__'; import { createRunPage, - cloneRunPage, + duplicateRunPage, pipelineRecurringRunTable, pipelineRunsGlobal, activeRunsTable, createSchedulePage, - cloneSchedulePage, + duplicateSchedulePage, } from '~/__tests__/cypress/cypress/pages/pipelines'; import { verifyRelativeURL } from '~/__tests__/cypress/cypress/utils/url'; import { getCorePipelineSpec } from '~/concepts/pipelines/getCorePipelineSpec'; @@ -221,44 +221,48 @@ describe('Pipeline create runs', () => { }); // Mock experiments, pipelines & versions for form select dropdowns - cloneRunPage.mockGetExperiments(projectName, mockExperiments); - cloneRunPage.mockGetPipelines(projectName, [mockPipeline]); - cloneRunPage.mockGetPipelineVersions( + duplicateRunPage.mockGetExperiments(projectName, mockExperiments); + duplicateRunPage.mockGetPipelines(projectName, [mockPipeline]); + duplicateRunPage.mockGetPipelineVersions( projectName, [mockPipelineVersion], mockPipelineVersion.pipeline_id, ); - cloneRunPage.mockGetRun(projectName, mockRun); - cloneRunPage.mockGetPipelineVersion(projectName, mockPipelineVersion); - cloneRunPage.mockGetPipeline(projectName, mockPipeline); - cloneRunPage.mockGetExperiment(projectName, mockExperiment); + duplicateRunPage.mockGetRun(projectName, mockRun); + duplicateRunPage.mockGetPipelineVersion(projectName, mockPipelineVersion); + duplicateRunPage.mockGetPipeline(projectName, mockPipeline); + duplicateRunPage.mockGetExperiment(projectName, mockExperiment); - // Mock runs list with newly cloned run + // Mock runs list with newly duplicated run activeRunsTable.mockGetActiveRuns([...initialMockRuns, mockDuplicateRun], projectName); - // Navigate to clone run page for a given active run + // Navigate to duplicate run page for a given active run cy.visitWithLogin(`/experiments/${projectName}/experiment-1/runs`); pipelineRunsGlobal.findActiveRunsTab().click(); activeRunsTable.getRowByName(mockRun.display_name).findKebabAction('Duplicate').click(); - verifyRelativeURL(`/experiments/${projectName}/experiment-1/runs/clone/${mockRun.run_id}`); + verifyRelativeURL( + `/experiments/${projectName}/experiment-1/runs/duplicate/${mockRun.run_id}`, + ); // Verify pre-populated values & submit - cloneRunPage.experimentSelect + duplicateRunPage.experimentSelect .findToggleButton() .should('have.text', mockExperiment.display_name); - cloneRunPage.pipelineSelect.findToggleButton().should('have.text', mockPipeline.display_name); - cloneRunPage.pipelineVersionSelect + duplicateRunPage.pipelineSelect + .findToggleButton() + .should('have.text', mockPipeline.display_name); + duplicateRunPage.pipelineVersionSelect .findToggleButton() .should('have.text', mockPipelineVersion.display_name); - const paramsSection = cloneRunPage.getParamsSection(); + const paramsSection = duplicateRunPage.getParamsSection(); paramsSection.findParamById('radio-min_max_scaler-false').should('be.checked'); paramsSection.findParamById('neighbors').find('input').should('have.value', '1'); paramsSection.findParamById('standard_scaler').should('have.value', 'false'); - cloneRunPage + duplicateRunPage .mockCreateRun(projectName, mockPipelineVersion, mockDuplicateRun) .as('duplicateRun'); - cloneRunPage.submit(); + duplicateRunPage.submit(); cy.wait('@duplicateRun').then((interception) => { expect(interception.request.body).to.eql({ @@ -275,7 +279,7 @@ describe('Pipeline create runs', () => { }); }); - // Should redirect to the details of the newly cloned active run + // Should redirect to the details of the newly duplicated active run verifyRelativeURL(`/experiments/${projectName}/experiment-1/runs/${mockDuplicateRun.run_id}`); }); @@ -673,19 +677,19 @@ describe('Pipeline create runs', () => { }); // Mock experiments, pipelines & versions for form select dropdowns - cloneSchedulePage.mockGetExperiments(projectName, mockExperiments); - cloneSchedulePage.mockGetPipelines(projectName, [mockPipeline]); - cloneSchedulePage.mockGetPipelineVersions( + duplicateSchedulePage.mockGetExperiments(projectName, mockExperiments); + duplicateSchedulePage.mockGetPipelines(projectName, [mockPipeline]); + duplicateSchedulePage.mockGetPipelineVersions( projectName, [mockPipelineVersion], mockPipelineVersion.pipeline_id, ); - cloneSchedulePage.mockGetRecurringRun(projectName, mockRecurringRun); - cloneSchedulePage.mockGetPipelineVersion(projectName, mockPipelineVersion); - cloneSchedulePage.mockGetPipeline(projectName, mockPipeline); - cloneSchedulePage.mockGetExperiment(projectName, mockExperiment); + duplicateSchedulePage.mockGetRecurringRun(projectName, mockRecurringRun); + duplicateSchedulePage.mockGetPipelineVersion(projectName, mockPipelineVersion); + duplicateSchedulePage.mockGetPipeline(projectName, mockPipeline); + duplicateSchedulePage.mockGetExperiment(projectName, mockExperiment); - // Navigate to clone run page for a given schedule + // Navigate to duplicate run page for a given schedule cy.visitWithLogin(`/experiments/${projectName}/experiment-1/runs`); pipelineRunsGlobal.findSchedulesTab().click(); pipelineRecurringRunTable @@ -693,27 +697,27 @@ describe('Pipeline create runs', () => { .findKebabAction('Duplicate') .click(); verifyRelativeURL( - `/experiments/${projectName}/experiment-1/schedules/clone/${mockRecurringRun.recurring_run_id}`, + `/experiments/${projectName}/experiment-1/schedules/duplicate/${mockRecurringRun.recurring_run_id}`, ); // Verify pre-populated values & submit - cloneSchedulePage.experimentSelect + duplicateSchedulePage.experimentSelect .findToggleButton() .should('have.text', mockExperiment.display_name); - cloneSchedulePage.pipelineSelect + duplicateSchedulePage.pipelineSelect .findToggleButton() .should('have.text', mockPipeline.display_name); - cloneSchedulePage.pipelineVersionSelect + duplicateSchedulePage.pipelineVersionSelect .findToggleButton() .should('have.text', mockPipelineVersion.display_name); - const paramsSection = cloneSchedulePage.getParamsSection(); + const paramsSection = duplicateSchedulePage.getParamsSection(); paramsSection.findParamById('radio-min_max_scaler-false').should('be.checked'); paramsSection.findParamById('neighbors').find('input').should('have.value', '0'); paramsSection.findParamById('standard_scaler').should('have.value', 'yes'); - cloneSchedulePage + duplicateSchedulePage .mockCreateRecurringRun(projectName, mockPipelineVersion, mockDuplicateRecurringRun) .as('duplicateSchedule'); - cloneSchedulePage.submit(); + duplicateSchedulePage.submit(); cy.wait('@duplicateSchedule').then((interception) => { expect(interception.request.body).to.eql({ @@ -751,19 +755,19 @@ describe('Pipeline create runs', () => { const mockExperiment = { ...mockExperiments[0], storage_state: StorageStateKF.ARCHIVED }; // Mock experiments, pipelines & versions for form select dropdowns - cloneSchedulePage.mockGetExperiments(projectName, mockExperiments); - cloneSchedulePage.mockGetPipelines(projectName, [mockPipeline]); - cloneSchedulePage.mockGetPipelineVersions( + duplicateSchedulePage.mockGetExperiments(projectName, mockExperiments); + duplicateSchedulePage.mockGetPipelines(projectName, [mockPipeline]); + duplicateSchedulePage.mockGetPipelineVersions( projectName, [mockPipelineVersion], mockPipelineVersion.pipeline_id, ); - cloneSchedulePage.mockGetRecurringRun(projectName, mockRecurringRun); - cloneSchedulePage.mockGetPipelineVersion(projectName, mockPipelineVersion); - cloneSchedulePage.mockGetPipeline(projectName, mockPipeline); - cloneSchedulePage.mockGetExperiment(projectName, mockExperiment); + duplicateSchedulePage.mockGetRecurringRun(projectName, mockRecurringRun); + duplicateSchedulePage.mockGetPipelineVersion(projectName, mockPipelineVersion); + duplicateSchedulePage.mockGetPipeline(projectName, mockPipeline); + duplicateSchedulePage.mockGetExperiment(projectName, mockExperiment); - // Navigate to clone run page for a given schedule + // Navigate to duplicate run page for a given schedule cy.visitWithLogin(`/experiments/${projectName}/experiment-1/runs`); pipelineRunsGlobal.findSchedulesTab().click(); pipelineRecurringRunTable @@ -771,11 +775,11 @@ describe('Pipeline create runs', () => { .findKebabAction('Duplicate') .click(); verifyRelativeURL( - `/experiments/${projectName}/experiment-1/schedules/clone/${mockRecurringRun.recurring_run_id}`, + `/experiments/${projectName}/experiment-1/schedules/duplicate/${mockRecurringRun.recurring_run_id}`, ); // Verify pre-populated values & submit - cloneSchedulePage.experimentSelect + duplicateSchedulePage.experimentSelect .findToggleButton() .should('have.text', 'Select an experiment'); }); diff --git a/frontend/src/__tests__/cypress/cypress/tests/mocked/pipelines/pipelineRuns.cy.ts b/frontend/src/__tests__/cypress/cypress/tests/mocked/pipelines/pipelineRuns.cy.ts index 6c8db6a599..6ca02fb184 100644 --- a/frontend/src/__tests__/cypress/cypress/tests/mocked/pipelines/pipelineRuns.cy.ts +++ b/frontend/src/__tests__/cypress/cypress/tests/mocked/pipelines/pipelineRuns.cy.ts @@ -22,8 +22,8 @@ import { bulkRestoreRunModal, archiveRunModal, bulkArchiveRunModal, - cloneRunPage, - cloneSchedulePage, + duplicateRunPage, + duplicateSchedulePage, } from '~/__tests__/cypress/cypress/pages/pipelines'; import { verifyRelativeURL } from '~/__tests__/cypress/cypress/utils/url'; import { be } from '~/__tests__/cypress/cypress/utils/should'; @@ -330,9 +330,9 @@ describe('Pipeline runs', () => { ); }); - it('navigate to clone run page', () => { - cloneRunPage.mockGetExperiments(projectName, mockExperiments); - cloneRunPage.mockGetExperiment(projectName, mockExperiments[0]); + it('navigate to duplicate run page', () => { + duplicateRunPage.mockGetExperiments(projectName, mockExperiments); + duplicateRunPage.mockGetExperiment(projectName, mockExperiments[0]); cy.visitWithLogin(`/experiments/${projectName}/test-experiment-1/runs`); activeRunsTable @@ -341,7 +341,7 @@ describe('Pipeline runs', () => { .click(); verifyRelativeURL( - `/experiments/${projectName}/test-experiment-1/runs/clone/${mockActiveRuns[0].run_id}`, + `/experiments/${projectName}/test-experiment-1/runs/duplicate/${mockActiveRuns[0].run_id}`, ); }); @@ -1006,9 +1006,9 @@ describe('Pipeline runs', () => { ); }); - it('navigate to clone scheduled run page', () => { - cloneSchedulePage.mockGetExperiments(projectName, mockExperiments); - cloneSchedulePage.mockGetExperiment(projectName, mockExperiments[0]); + it('navigate to duplicate scheduled run page', () => { + duplicateSchedulePage.mockGetExperiments(projectName, mockExperiments); + duplicateSchedulePage.mockGetExperiment(projectName, mockExperiments[0]); cy.visitWithLogin(`/experiments/${projectName}/test-experiment-1/runs`); pipelineRunsGlobal.findSchedulesTab().click(); @@ -1018,7 +1018,7 @@ describe('Pipeline runs', () => { .click(); verifyRelativeURL( - `/experiments/${projectName}/test-experiment-1/schedules/clone/${mockRecurringRuns[0].recurring_run_id}`, + `/experiments/${projectName}/test-experiment-1/schedules/duplicate/${mockRecurringRuns[0].recurring_run_id}`, ); }); diff --git a/frontend/src/__tests__/cypress/cypress/tests/mocked/pipelines/pipelinesTopology.cy.ts b/frontend/src/__tests__/cypress/cypress/tests/mocked/pipelines/pipelinesTopology.cy.ts index 067acb4826..a1a2da601f 100644 --- a/frontend/src/__tests__/cypress/cypress/tests/mocked/pipelines/pipelinesTopology.cy.ts +++ b/frontend/src/__tests__/cypress/cypress/tests/mocked/pipelines/pipelinesTopology.cy.ts @@ -328,7 +328,7 @@ describe('Pipeline topology', () => { ); pipelineRunDetails.selectActionDropdownItem('Duplicate'); verifyRelativeURL( - `/pipelines/${projectId}/${mockVersion.pipeline_id}/${mockVersion.pipeline_version_id}/runs/clone/${mockRun.run_id}`, + `/pipelines/${projectId}/${mockVersion.pipeline_id}/${mockVersion.pipeline_version_id}/runs/duplicate/${mockRun.run_id}`, ); }); @@ -341,7 +341,7 @@ describe('Pipeline topology', () => { ); pipelineRecurringRunDetails.selectActionDropdownItem('Duplicate'); verifyRelativeURL( - `/pipelines/${projectId}/${mockVersion.pipeline_id}/${mockVersion.pipeline_version_id}/schedules/clone/${mockRecurringRun.recurring_run_id}`, + `/pipelines/${projectId}/${mockVersion.pipeline_id}/${mockVersion.pipeline_version_id}/schedules/duplicate/${mockRecurringRun.recurring_run_id}`, ); }); diff --git a/frontend/src/concepts/pipelines/content/createRun/CloneRecurringRunPage.tsx b/frontend/src/concepts/pipelines/content/createRun/DuplicateRecurringRunPage.tsx similarity index 88% rename from frontend/src/concepts/pipelines/content/createRun/CloneRecurringRunPage.tsx rename to frontend/src/concepts/pipelines/content/createRun/DuplicateRecurringRunPage.tsx index 65a635318f..5de57a56f7 100644 --- a/frontend/src/concepts/pipelines/content/createRun/CloneRecurringRunPage.tsx +++ b/frontend/src/concepts/pipelines/content/createRun/DuplicateRecurringRunPage.tsx @@ -9,14 +9,14 @@ import { ExperimentKFv2, PipelineKFv2, PipelineVersionKFv2 } from '~/concepts/pi import usePipelineRecurringRunById from '~/concepts/pipelines/apiHooks/usePipelineRecurringRunById'; import { RunTypeOption } from './types'; -type CloneRecurringRunPageProps = { +type DuplicateRecurringRunPageProps = { detailsRedirect: (recurringRunId: string) => string; contextExperiment?: ExperimentKFv2 | null; contextPipeline?: PipelineKFv2 | null; contextPipelineVersion?: PipelineVersionKFv2 | null; }; -const CloneRecurringRunPage: React.FC = ({ +const DuplicateRecurringRunPage: React.FC = ({ breadcrumbPath, contextPath, detailsRedirect, @@ -49,14 +49,14 @@ const CloneRecurringRunPage: React.FC = empty={false} > ); }; -export default CloneRecurringRunPage; +export default DuplicateRecurringRunPage; diff --git a/frontend/src/concepts/pipelines/content/createRun/CloneRunPage.tsx b/frontend/src/concepts/pipelines/content/createRun/DuplicateRunPage.tsx similarity index 89% rename from frontend/src/concepts/pipelines/content/createRun/CloneRunPage.tsx rename to frontend/src/concepts/pipelines/content/createRun/DuplicateRunPage.tsx index 856f4d9619..cf2b30c9ee 100644 --- a/frontend/src/concepts/pipelines/content/createRun/CloneRunPage.tsx +++ b/frontend/src/concepts/pipelines/content/createRun/DuplicateRunPage.tsx @@ -9,14 +9,14 @@ import { ExperimentKFv2, PipelineKFv2, PipelineVersionKFv2 } from '~/concepts/pi import usePipelineRunById from '~/concepts/pipelines/apiHooks/usePipelineRunById'; import { RunTypeOption } from './types'; -type CloneRunPageProps = { +type DuplicateRunPageProps = { detailsRedirect: (runId: string) => string; contextExperiment?: ExperimentKFv2 | null; contextPipeline?: PipelineKFv2 | null; contextPipelineVersion?: PipelineVersionKFv2 | null; }; -const CloneRunPage: React.FC = ({ +const DuplicateRunPage: React.FC = ({ breadcrumbPath, contextPath, detailsRedirect, @@ -49,14 +49,14 @@ const CloneRunPage: React.FC = ({ empty={false} > ); }; -export default CloneRunPage; +export default DuplicateRunPage; diff --git a/frontend/src/concepts/pipelines/content/createRun/RunForm.tsx b/frontend/src/concepts/pipelines/content/createRun/RunForm.tsx index 2d6df265e5..b6b3bddece 100644 --- a/frontend/src/concepts/pipelines/content/createRun/RunForm.tsx +++ b/frontend/src/concepts/pipelines/content/createRun/RunForm.tsx @@ -31,10 +31,10 @@ import { getInputDefinitionParams } from './utils'; type RunFormProps = { data: RunFormData; onValueChange: (key: keyof RunFormData, value: ValueOf) => void; - isCloned: boolean; + isDuplicated: boolean; }; -const RunForm: React.FC = ({ data, onValueChange, isCloned }) => { +const RunForm: React.FC = ({ data, onValueChange, isDuplicated }) => { const { api } = usePipelinesAPI(); const [latestVersion] = useLatestPipelineVersion(data.pipeline?.pipeline_id); // Use this state to avoid the pipeline version being set as the latest version at the initial load @@ -104,7 +104,7 @@ const RunForm: React.FC = ({ data, onValueChange, isCloned }) => { return (
e.preventDefault()} maxWidth="500px"> - + = ({ - cloneRun, + duplicateRun, contextPath, testId, runType, @@ -87,9 +87,12 @@ const RunPage: React.FC = ({ [isSchedule, triggerType], ); - const [formData, setFormDataValue] = useRunFormData(cloneRun, { - nameDesc: cloneRun - ? { name: `Duplicate of ${cloneRun.display_name}`, description: cloneRun.description } + const [formData, setFormDataValue] = useRunFormData(duplicateRun, { + nameDesc: duplicateRun + ? { + name: `Duplicate of ${duplicateRun.display_name}`, + description: duplicateRun.description, + } : locationNameDesc || { name: '', description: '' }, runType: runTypeData, pipeline: locationPipeline || contextPipeline, @@ -106,7 +109,7 @@ const RunPage: React.FC = ({
- + diff --git a/frontend/src/concepts/pipelines/content/createRun/contentSections/RunTypeSection.tsx b/frontend/src/concepts/pipelines/content/createRun/contentSections/RunTypeSection.tsx index 45b28a584e..1367a97db6 100644 --- a/frontend/src/concepts/pipelines/content/createRun/contentSections/RunTypeSection.tsx +++ b/frontend/src/concepts/pipelines/content/createRun/contentSections/RunTypeSection.tsx @@ -13,10 +13,10 @@ import { RunFormData, RunTypeOption } from '~/concepts/pipelines/content/createR interface RunTypeSectionProps { data: RunFormData; - isCloned: boolean; + isDuplicated: boolean; } -export const RunTypeSection: React.FC = ({ data, isCloned }) => { +export const RunTypeSection: React.FC = ({ data, isDuplicated }) => { const { namespace, experimentId, pipelineId, pipelineVersionId } = useParams(); const [isAlertOpen, setIsAlertOpen] = React.useState(true); @@ -59,7 +59,7 @@ export const RunTypeSection: React.FC = ({ data, isCloned } > {runTypeValue} - {isAlertOpen && !isCloned && ( + {isAlertOpen && !isDuplicated && ( , initialData?: PipelineRunKFv2 | PipelineRecurringRunKFv2 | null, ) => { - const cloneRunPipelineId = initialData?.pipeline_version_reference?.pipeline_id || ''; - const cloneRunVersionId = initialData?.pipeline_version_reference?.pipeline_version_id || ''; - const cloneRunExperimentId = initialData?.experiment_id || ''; - const [cloneRunPipelineVersion] = usePipelineVersionById(cloneRunPipelineId, cloneRunVersionId); - const [cloneRunPipeline] = usePipelineById(cloneRunPipelineId); - const [cloneExperiment] = useExperimentById(cloneRunExperimentId); + const duplicateRunPipelineId = initialData?.pipeline_version_reference?.pipeline_id || ''; + const duplicateRunVersionId = initialData?.pipeline_version_reference?.pipeline_version_id || ''; + const duplicateRunExperimentId = initialData?.experiment_id || ''; + const [duplicateRunPipelineVersion] = usePipelineVersionById( + duplicateRunPipelineId, + duplicateRunVersionId, + ); + const [duplicateRunPipeline] = usePipelineById(duplicateRunPipelineId); + const [duplicateExperiment] = useExperimentById(duplicateRunExperimentId); React.useEffect(() => { if (!initialData) { return; } - setFunction('experiment', cloneExperiment); - setFunction('pipeline', cloneRunPipeline); - setFunction('version', cloneRunPipelineVersion); - }, [setFunction, initialData, cloneExperiment, cloneRunPipeline, cloneRunPipelineVersion]); + setFunction('experiment', duplicateExperiment); + setFunction('pipeline', duplicateRunPipeline); + setFunction('version', duplicateRunPipelineVersion); + }, [ + setFunction, + initialData, + duplicateExperiment, + duplicateRunPipeline, + duplicateRunPipelineVersion, + ]); }; const useRunFormData = ( @@ -166,7 +175,7 @@ const useRunFormData = ( useUpdateExperimentFormData(formState, experiment); useUpdateRunType(setFormValue, run); - useUpdateCloneData(setFormValue, run); + useUpdateDuplicateData(setFormValue, run); return formState; }; diff --git a/frontend/src/concepts/pipelines/content/pipelinesDetails/pipelineRecurringRun/PipelineRecurringRunDetailsActions.tsx b/frontend/src/concepts/pipelines/content/pipelinesDetails/pipelineRecurringRun/PipelineRecurringRunDetailsActions.tsx index ddeb5e812b..abf3c96f7c 100644 --- a/frontend/src/concepts/pipelines/content/pipelinesDetails/pipelineRecurringRun/PipelineRecurringRunDetailsActions.tsx +++ b/frontend/src/concepts/pipelines/content/pipelinesDetails/pipelineRecurringRun/PipelineRecurringRunDetailsActions.tsx @@ -11,7 +11,7 @@ import { } from '@patternfly/react-core'; import { usePipelinesAPI } from '~/concepts/pipelines/context'; import { PipelineRecurringRunKFv2, RecurringRunStatus } from '~/concepts/pipelines/kfTypes'; -import { cloneRecurringRunRoute } from '~/routes'; +import { duplicateRecurringRunRoute } from '~/routes'; import { getDashboardMainContainer } from '~/utilities/utils'; type PipelineRecurringRunDetailsActionsProps = { @@ -104,10 +104,10 @@ const PipelineRecurringRunDetailsActions: React.FC, navigate( - cloneRecurringRunRoute( + duplicateRecurringRunRoute( namespace, recurringRun.recurring_run_id, experimentId, diff --git a/frontend/src/concepts/pipelines/content/pipelinesDetails/pipelineRun/PipelineRunDetailsActions.tsx b/frontend/src/concepts/pipelines/content/pipelinesDetails/pipelineRun/PipelineRunDetailsActions.tsx index 4bc014027a..d88ab86ff6 100644 --- a/frontend/src/concepts/pipelines/content/pipelinesDetails/pipelineRun/PipelineRunDetailsActions.tsx +++ b/frontend/src/concepts/pipelines/content/pipelinesDetails/pipelineRun/PipelineRunDetailsActions.tsx @@ -12,7 +12,7 @@ import { useNavigate, useParams } from 'react-router-dom'; import { usePipelinesAPI } from '~/concepts/pipelines/context'; import useNotification from '~/utilities/useNotification'; import { PipelineRunKFv2, RuntimeStateKF, StorageStateKF } from '~/concepts/pipelines/kfTypes'; -import { cloneRunRoute, experimentsCompareRunsRoute } from '~/routes'; +import { duplicateRunRoute, experimentsCompareRunsRoute } from '~/routes'; import useExperimentById from '~/concepts/pipelines/apiHooks/useExperimentById'; import { getDashboardMainContainer } from '~/utilities/utils'; @@ -94,10 +94,10 @@ const PipelineRunDetailsActions: React.FC = ({ Retry , navigate( - cloneRunRoute( + duplicateRunRoute( namespace, run.run_id, experimentId, diff --git a/frontend/src/concepts/pipelines/content/tables/pipelineRecurringRun/PipelineRecurringRunTableRow.tsx b/frontend/src/concepts/pipelines/content/tables/pipelineRecurringRun/PipelineRecurringRunTableRow.tsx index 66bd802403..9f75e25fb3 100644 --- a/frontend/src/concepts/pipelines/content/tables/pipelineRecurringRun/PipelineRecurringRunTableRow.tsx +++ b/frontend/src/concepts/pipelines/content/tables/pipelineRecurringRun/PipelineRecurringRunTableRow.tsx @@ -6,7 +6,7 @@ import { TableRowTitleDescription, CheckboxTd } from '~/components/table'; import { usePipelinesAPI } from '~/concepts/pipelines/context'; import usePipelineRunVersionInfo from '~/concepts/pipelines/content/tables/usePipelineRunVersionInfo'; import { PipelineVersionLink } from '~/concepts/pipelines/content/PipelineVersionLink'; -import { cloneRecurringRunRoute, recurringRunDetailsRoute } from '~/routes'; +import { duplicateRecurringRunRoute, recurringRunDetailsRoute } from '~/routes'; import { RecurringRunCreated, RecurringRunScheduled, @@ -114,7 +114,7 @@ const PipelineRecurringRunTableRow: React.FC title: 'Duplicate', onClick: () => { navigate( - cloneRecurringRunRoute( + duplicateRecurringRunRoute( namespace, recurringRun.recurring_run_id, experimentId, diff --git a/frontend/src/concepts/pipelines/content/tables/pipelineRun/PipelineRunTableRow.tsx b/frontend/src/concepts/pipelines/content/tables/pipelineRun/PipelineRunTableRow.tsx index 716fdade69..f2a626c607 100644 --- a/frontend/src/concepts/pipelines/content/tables/pipelineRun/PipelineRunTableRow.tsx +++ b/frontend/src/concepts/pipelines/content/tables/pipelineRun/PipelineRunTableRow.tsx @@ -15,7 +15,7 @@ import usePipelineRunVersionInfo from '~/concepts/pipelines/content/tables/usePi import { PipelineVersionLink } from '~/concepts/pipelines/content/PipelineVersionLink'; import { PipelineRunType } from '~/pages/pipelines/global/runs'; import { RestoreRunModal } from '~/pages/pipelines/global/runs/RestoreRunModal'; -import { cloneRunRoute } from '~/routes'; +import { duplicateRunRoute } from '~/routes'; import { ArchiveRunModal } from '~/pages/pipelines/global/runs/ArchiveRunModal'; import PipelineRunTableRowExperiment from '~/concepts/pipelines/content/tables/pipelineRun/PipelineRunTableRowExperiment'; import { useContextExperimentArchived } from '~/pages/pipelines/global/experiments/ExperimentContext'; @@ -53,10 +53,12 @@ const PipelineRunTableRow: React.FC = ({ const [pipelineRunExperiment, pipelineRunExperimentLoaded] = useExperimentById(pipelineRunExperimentId); const actions: IAction[] = React.useMemo(() => { - const cloneAction: IAction = { + const duplicateAction: IAction = { title: 'Duplicate', onClick: () => { - navigate(cloneRunRoute(namespace, run.run_id, experimentId, pipelineId, pipelineVersionId)); + navigate( + duplicateRunRoute(namespace, run.run_id, experimentId, pipelineId, pipelineVersionId), + ); }, }; @@ -73,7 +75,7 @@ const PipelineRunTableRow: React.FC = ({ }, }), }, - ...(!version && experimentId ? [] : [cloneAction]), + ...(!version && experimentId ? [] : [duplicateAction]), { isSeparator: true, }, @@ -97,7 +99,7 @@ const PipelineRunTableRow: React.FC = ({ .catch((e) => notification.error('Unable to stop the pipeline run.', e.message)); }, }, - ...(!version && experimentId ? [] : [cloneAction]), + ...(!version && experimentId ? [] : [duplicateAction]), { isSeparator: true, }, diff --git a/frontend/src/pages/pipelines/GlobalPipelineExperimentsRoutes.tsx b/frontend/src/pages/pipelines/GlobalPipelineExperimentsRoutes.tsx index de8227e151..190703f488 100644 --- a/frontend/src/pages/pipelines/GlobalPipelineExperimentsRoutes.tsx +++ b/frontend/src/pages/pipelines/GlobalPipelineExperimentsRoutes.tsx @@ -20,8 +20,8 @@ import { ExperimentCreateSchedulePage, } from '~/pages/pipelines/global/experiments/ExperimentCreateRunPage'; import PipelineAvailabilityLoader from '~/pages/pipelines/global/pipelines/PipelineAvailabilityLoader'; -import ExperimentCloneRunPage from '~/pages/pipelines/global/experiments/ExperimentCloneRunPage'; -import ExperimentCloneRecurringRunPage from '~/pages/pipelines/global/experiments/ExperimentCloneRecurringRunPage'; +import ExperimentDuplicateRunPage from '~/pages/pipelines/global/experiments/ExperimentDuplicateRunPage'; +import ExperimentDuplicateRecurringRunPage from '~/pages/pipelines/global/experiments/ExperimentDuplicateRecurringRunPage'; import { ExperimentCoreDetails } from './global/GlobalPipelineCoreDetails'; import GlobalComparePipelineRunsLoader from './global/experiments/compareRuns/GlobalComparePipelineRunsLoader'; import CompareRunsPage from './global/experiments/compareRuns/CompareRunsPage'; @@ -78,9 +78,9 @@ const GlobalPipelineExperimentsRoutes: React.FC = () => ( } /> + } /> @@ -100,10 +100,10 @@ const GlobalPipelineExperimentsRoutes: React.FC = () => ( } /> } /> diff --git a/frontend/src/pages/pipelines/GlobalPipelinesRoutes.tsx b/frontend/src/pages/pipelines/GlobalPipelinesRoutes.tsx index 16a92d694b..1b82c5bf17 100644 --- a/frontend/src/pages/pipelines/GlobalPipelinesRoutes.tsx +++ b/frontend/src/pages/pipelines/GlobalPipelinesRoutes.tsx @@ -19,9 +19,9 @@ import { PipelineVersionCreateRunPage, PipelineVersionCreateRecurringRunPage, } from '~/pages/pipelines/global/pipelines/PipelineVersionCreateRunPage'; -import PipelineVersionCloneRunPage from '~/pages/pipelines/global/pipelines/PipelineVersionCloneRunPage'; +import PipelineVersionDuplicateRunPage from '~/pages/pipelines/global/pipelines/PipelineVersionDuplicateRunPage'; import PipelineVersionRecurringRunDetails from '~/pages/pipelines/global/pipelines/PipelineVersionRecurringRunDetails'; -import PipelineVersionCloneRecurringRunPage from '~/pages/pipelines/global/pipelines/PipelineVersionCloneRecurringRunPage'; +import PipelineVersionDuplicateRecurringRunPage from '~/pages/pipelines/global/pipelines/PipelineVersionDuplicateRecurringRunPage'; import GlobalPipelines from './global/pipelines/GlobalPipelines'; const GlobalPipelinesRoutes: React.FC = () => ( @@ -76,10 +76,10 @@ const GlobalPipelinesRoutes: React.FC = () => ( } /> } /> @@ -102,10 +102,10 @@ const GlobalPipelinesRoutes: React.FC = () => ( } /> } /> diff --git a/frontend/src/pages/pipelines/global/experiments/ExperimentCloneRecurringRunPage.tsx b/frontend/src/pages/pipelines/global/experiments/ExperimentDuplicateRecurringRunPage.tsx similarity index 83% rename from frontend/src/pages/pipelines/global/experiments/ExperimentCloneRecurringRunPage.tsx rename to frontend/src/pages/pipelines/global/experiments/ExperimentDuplicateRecurringRunPage.tsx index fef104f0ef..66aa749d1d 100644 --- a/frontend/src/pages/pipelines/global/experiments/ExperimentCloneRecurringRunPage.tsx +++ b/frontend/src/pages/pipelines/global/experiments/ExperimentDuplicateRecurringRunPage.tsx @@ -5,14 +5,14 @@ import { PathProps } from '~/concepts/pipelines/content/types'; import { usePipelinesAPI } from '~/concepts/pipelines/context'; import { ExperimentContext } from '~/pages/pipelines/global/experiments/ExperimentContext'; import { experimentRecurringRunDetailsRoute, experimentRecurringRunsRoute } from '~/routes'; -import CloneRecurringRunPage from '~/concepts/pipelines/content/createRun/CloneRecurringRunPage'; +import DuplicateRecurringRunPage from '~/concepts/pipelines/content/createRun/DuplicateRecurringRunPage'; -const ExperimentCloneRecurringRunPage: React.FC = ({ breadcrumbPath }) => { +const ExperimentDuplicateRecurringRunPage: React.FC = ({ breadcrumbPath }) => { const { experiment } = React.useContext(ExperimentContext); const { namespace } = usePipelinesAPI(); return ( - @@ -35,4 +35,4 @@ const ExperimentCloneRecurringRunPage: React.FC = ({ breadcrumbPath } ); }; -export default ExperimentCloneRecurringRunPage; +export default ExperimentDuplicateRecurringRunPage; diff --git a/frontend/src/pages/pipelines/global/experiments/ExperimentCloneRunPage.tsx b/frontend/src/pages/pipelines/global/experiments/ExperimentDuplicateRunPage.tsx similarity index 84% rename from frontend/src/pages/pipelines/global/experiments/ExperimentCloneRunPage.tsx rename to frontend/src/pages/pipelines/global/experiments/ExperimentDuplicateRunPage.tsx index e4ff55678e..d5f9945171 100644 --- a/frontend/src/pages/pipelines/global/experiments/ExperimentCloneRunPage.tsx +++ b/frontend/src/pages/pipelines/global/experiments/ExperimentDuplicateRunPage.tsx @@ -5,14 +5,14 @@ import { PathProps } from '~/concepts/pipelines/content/types'; import { usePipelinesAPI } from '~/concepts/pipelines/context'; import { ExperimentContext } from '~/pages/pipelines/global/experiments/ExperimentContext'; import { experimentRunDetailsRoute, experimentRunsRoute } from '~/routes'; -import CloneRunPage from '~/concepts/pipelines/content/createRun/CloneRunPage'; +import DuplicateRunPage from '~/concepts/pipelines/content/createRun/DuplicateRunPage'; -const ExperimentCloneRunPage: React.FC = ({ breadcrumbPath }) => { +const ExperimentDuplicateRunPage: React.FC = ({ breadcrumbPath }) => { const { experiment } = React.useContext(ExperimentContext); const { namespace } = usePipelinesAPI(); return ( - @@ -35,4 +35,4 @@ const ExperimentCloneRunPage: React.FC = ({ breadcrumbPath }) => { ); }; -export default ExperimentCloneRunPage; +export default ExperimentDuplicateRunPage; diff --git a/frontend/src/pages/pipelines/global/pipelines/PipelineVersionCloneRecurringRunPage.tsx b/frontend/src/pages/pipelines/global/pipelines/PipelineVersionDuplicateRecurringRunPage.tsx similarity index 88% rename from frontend/src/pages/pipelines/global/pipelines/PipelineVersionCloneRecurringRunPage.tsx rename to frontend/src/pages/pipelines/global/pipelines/PipelineVersionDuplicateRecurringRunPage.tsx index 3563cac83e..db332900b7 100644 --- a/frontend/src/pages/pipelines/global/pipelines/PipelineVersionCloneRecurringRunPage.tsx +++ b/frontend/src/pages/pipelines/global/pipelines/PipelineVersionDuplicateRecurringRunPage.tsx @@ -8,15 +8,15 @@ import { pipelineVersionRecurringRunDetailsRoute, pipelineVersionRecurringRunsRoute, } from '~/routes'; -import CloneRecurringRunPage from '~/concepts/pipelines/content/createRun/CloneRecurringRunPage'; +import DuplicateRecurringRunPage from '~/concepts/pipelines/content/createRun/DuplicateRecurringRunPage'; import { PipelineVersionContext } from '~/pages/pipelines/global/pipelines/PipelineVersionContext'; -const PipelineVersionCloneRecurringRunPage: React.FC = ({ breadcrumbPath }) => { +const PipelineVersionDuplicateRecurringRunPage: React.FC = ({ breadcrumbPath }) => { const { pipeline, version } = React.useContext(PipelineVersionContext); const { namespace } = usePipelinesAPI(); return ( - @@ -70,4 +70,4 @@ const PipelineVersionCloneRecurringRunPage: React.FC = ({ breadcrumbP ); }; -export default PipelineVersionCloneRecurringRunPage; +export default PipelineVersionDuplicateRecurringRunPage; diff --git a/frontend/src/pages/pipelines/global/pipelines/PipelineVersionCloneRunPage.tsx b/frontend/src/pages/pipelines/global/pipelines/PipelineVersionDuplicateRunPage.tsx similarity index 79% rename from frontend/src/pages/pipelines/global/pipelines/PipelineVersionCloneRunPage.tsx rename to frontend/src/pages/pipelines/global/pipelines/PipelineVersionDuplicateRunPage.tsx index 2c869d4848..0cbcce5bbe 100644 --- a/frontend/src/pages/pipelines/global/pipelines/PipelineVersionCloneRunPage.tsx +++ b/frontend/src/pages/pipelines/global/pipelines/PipelineVersionDuplicateRunPage.tsx @@ -2,15 +2,15 @@ import React from 'react'; import { PathProps } from '~/concepts/pipelines/content/types'; import { usePipelinesAPI } from '~/concepts/pipelines/context'; import { pipelineVersionRunDetailsRoute, pipelineVersionRunsRoute } from '~/routes'; -import CloneRunPage from '~/concepts/pipelines/content/createRun/CloneRunPage'; +import DuplicateRunPage from '~/concepts/pipelines/content/createRun/DuplicateRunPage'; import { PipelineVersionContext } from '~/pages/pipelines/global/pipelines/PipelineVersionContext'; -const PipelineVersionCloneRunPage: React.FC = ({ breadcrumbPath }) => { +const PipelineVersionDuplicateRunPage: React.FC = ({ breadcrumbPath }) => { const { pipeline, version } = React.useContext(PipelineVersionContext); const { namespace } = usePipelinesAPI(); return ( - = ({ breadcrumbPath }) => ); }; -export default PipelineVersionCloneRunPage; +export default PipelineVersionDuplicateRunPage; diff --git a/frontend/src/routes/pipelines/experiments.ts b/frontend/src/routes/pipelines/experiments.ts index 8a0eea9548..677c7f6363 100644 --- a/frontend/src/routes/pipelines/experiments.ts +++ b/frontend/src/routes/pipelines/experiments.ts @@ -19,17 +19,17 @@ export const experimentsCreateRecurringRunRoute = ( experimentId: string, ): string => `${experimentRecurringRunsRoute(namespace, experimentId)}/create`; -export const experimentsCloneRunRoute = ( +export const experimentsDuplicateRunRoute = ( namespace: string | undefined, experimentId: string, runId: string, -): string => `${experimentRunsRoute(namespace, experimentId)}/clone/${runId}`; +): string => `${experimentRunsRoute(namespace, experimentId)}/duplicate/${runId}`; -export const experimentsCloneRecurringRunRoute = ( +export const experimentsDuplicateRecurringRunRoute = ( namespace: string | undefined, experimentId: string, recurringRunId: string, -): string => `${experimentRecurringRunsRoute(namespace, experimentId)}/clone/${recurringRunId}`; +): string => `${experimentRecurringRunsRoute(namespace, experimentId)}/duplicate/${recurringRunId}`; export const experimentRoute = ( namespace: string | undefined, diff --git a/frontend/src/routes/pipelines/global.ts b/frontend/src/routes/pipelines/global.ts index fd48aa620f..42d82a32d3 100644 --- a/frontend/src/routes/pipelines/global.ts +++ b/frontend/src/routes/pipelines/global.ts @@ -55,14 +55,15 @@ export const pipelineVersionCreateRecurringRunRoute = ( ): string => `${pipelineVersionRecurringRunsRoute(namespace, pipelineId, pipelineVersionId)}/create`; -export const pipelineVersionCloneRunRoute = ( +export const pipelineVersionDuplicateRunRoute = ( namespace: string | undefined, pipelineId: string | undefined, pipelineVersionId: string | undefined, runId: string, -): string => `${pipelineVersionRunsRoute(namespace, pipelineId, pipelineVersionId)}/clone/${runId}`; +): string => + `${pipelineVersionRunsRoute(namespace, pipelineId, pipelineVersionId)}/duplicate/${runId}`; -export const pipelineVersionCloneRecurringRunRoute = ( +export const pipelineVersionDuplicateRecurringRunRoute = ( namespace: string | undefined, pipelineId: string | undefined, pipelineVersionId: string | undefined, @@ -72,7 +73,7 @@ export const pipelineVersionCloneRecurringRunRoute = ( namespace, pipelineId, pipelineVersionId, - )}/clone/${recurringRunId}`; + )}/duplicate/${recurringRunId}`; export const pipelineVersionRunDetailsRoute = ( namespace: string, diff --git a/frontend/src/routes/pipelines/runs.ts b/frontend/src/routes/pipelines/runs.ts index fc20b029df..6c5fa1934b 100644 --- a/frontend/src/routes/pipelines/runs.ts +++ b/frontend/src/routes/pipelines/runs.ts @@ -1,6 +1,6 @@ import { - pipelineVersionCloneRunRoute, - pipelineVersionCloneRecurringRunRoute, + pipelineVersionDuplicateRunRoute, + pipelineVersionDuplicateRecurringRunRoute, pipelineVersionCreateRunRoute, pipelineVersionCreateRecurringRunRoute, pipelineVersionRunDetailsRoute, @@ -9,13 +9,13 @@ import { import { experimentRecurringRunDetailsRoute, experimentRunDetailsRoute, - experimentsCloneRecurringRunRoute, - experimentsCloneRunRoute, + experimentsDuplicateRecurringRunRoute, + experimentsDuplicateRunRoute, experimentsCreateRecurringRunRoute, experimentsCreateRunRoute, } from './experiments'; -export const cloneRecurringRunRoute = ( +export const duplicateRecurringRunRoute = ( namespace: string, recurringRunId: string, experimentId: string | undefined, @@ -23,8 +23,8 @@ export const cloneRecurringRunRoute = ( pipelineVersionId: string | undefined, ): string => experimentId - ? experimentsCloneRecurringRunRoute(namespace, experimentId, recurringRunId) - : pipelineVersionCloneRecurringRunRoute( + ? experimentsDuplicateRecurringRunRoute(namespace, experimentId, recurringRunId) + : pipelineVersionDuplicateRecurringRunRoute( namespace, pipelineId, pipelineVersionId, @@ -78,7 +78,7 @@ export const runDetailsRoute = ( ? experimentRunDetailsRoute(namespace, experimentId, runId) : pipelineVersionRunDetailsRoute(namespace, pipelineId, pipelineVersionId, runId); -export const cloneRunRoute = ( +export const duplicateRunRoute = ( namespace: string, runId: string, experimentId: string | undefined, @@ -86,5 +86,5 @@ export const cloneRunRoute = ( pipelineVersionId: string | undefined, ): string => experimentId - ? experimentsCloneRunRoute(namespace, experimentId, runId) - : pipelineVersionCloneRunRoute(namespace, pipelineId, pipelineVersionId, runId); + ? experimentsDuplicateRunRoute(namespace, experimentId, runId) + : pipelineVersionDuplicateRunRoute(namespace, pipelineId, pipelineVersionId, runId);