From: Michal Klobukowski Date: Tue, 2 Oct 2018 12:34:51 +0000 (+0200) Subject: Merge branch 'master' X-Git-Tag: 1.3.0~72^2 X-Git-Url: https://git.arvados.org/arvados-workbench2.git/commitdiff_plain/8a85c509e4f2100082cfed6157d31c8651b861c9 Merge branch 'master' Feature #13863 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- 8a85c509e4f2100082cfed6157d31c8651b861c9 diff --cc src/store/run-process-panel/run-process-panel-actions.ts index a58eff8a,3a3f6b05..7112f715 --- a/src/store/run-process-panel/run-process-panel-actions.ts +++ b/src/store/run-process-panel/run-process-panel-actions.ts @@@ -49,45 -41,4 +50,46 @@@ export const setWorkflow = (workflow: W export const goToStep = (step: number) => runProcessPanelActions.SET_CURRENT_STEP(step); -export const searchWorkflows = (term: string) => runProcessPanelActions.SEARCH_WORKFLOWS(term); +export const runProcess = async (dispatch: Dispatch, getState: () => RootState, services: ServiceRepository) => { + const state = getState(); + const basicForm = getFormValues(RUN_PROCESS_BASIC_FORM)(state) as RunProcessBasicFormData; + const inputsForm = getFormValues(RUN_PROCESS_INPUTS_FORM)(state) as WorkflowInputsData; + const advancedForm = getFormValues(RUN_PROCESS_ADVANCED_FORM)(state) as RunProcessAdvancedFormData; + const { processOwnerUuid, selectedWorkflow } = state.runProcessPanel; + if (selectedWorkflow) { + const newProcessData = { + ownerUuid: processOwnerUuid, + name: basicForm.name, + description: basicForm.description, + state: ContainerRequestState.COMMITTED, + mounts: createWorkflowMounts(selectedWorkflow, normalizeInputKeys(inputsForm)), + runtimeConstraints: { + API: true, + vcpus: 1, + ram: 1073741824, + }, + containerImage: 'arvados/jobs:1.1.4.20180618144723', + cwd: '/var/spool/cwl', + command: [ + 'arvados-cwl-runner', + '--local', + '--api=containers', + `--project-uuid=${processOwnerUuid}`, + '/var/lib/cwl/workflow.json#main', + '/var/lib/cwl/cwl.input.json' + ], + outputPath: '/var/spool/cwl', + priority: 1, + outputName: advancedForm && advancedForm.output ? advancedForm.output : undefined, + }; + const newProcess = await services.containerRequestService.create(newProcessData); + dispatch(navigateToProcess(newProcess.uuid)); + } +}; + +const normalizeInputKeys = (inputs: WorkflowInputsData): WorkflowInputsData => + Object.keys(inputs).reduce((normalizedInputs, key) => ({ + ...normalizedInputs, + [key.split('/').slice(1).join('/')]: inputs[key], - }), {}); ++ }), {}); ++export const searchWorkflows = (term: string) => runProcessPanelActions.SEARCH_WORKFLOWS(term); diff --cc src/store/run-process-panel/run-process-panel-reducer.ts index 2470de14,10cdaeb7..0ad06bee --- a/src/store/run-process-panel/run-process-panel-reducer.ts +++ b/src/store/run-process-panel/run-process-panel-reducer.ts @@@ -3,33 -3,27 +3,36 @@@ // SPDX-License-Identifier: AGPL-3.0 import { RunProcessPanelAction, runProcessPanelActions } from '~/store/run-process-panel/run-process-panel-actions'; -import { WorkflowResource } from '~/models/workflow'; +import { WorkflowResource, CommandInputParameter, getWorkflowInputs, parseWorkflowDefinition } from '~/models/workflow'; interface RunProcessPanel { + processOwnerUuid: string; currentStep: number; workflows: WorkflowResource[]; + searchWorkflows: WorkflowResource[]; selectedWorkflow: WorkflowResource | undefined; + inputs: CommandInputParameter[]; } const initialState: RunProcessPanel = { + processOwnerUuid: '', currentStep: 0, workflows: [], + selectedWorkflow: undefined, + inputs: [], + searchWorkflows: [], - selectedWorkflow: undefined }; export const runProcessPanelReducer = (state = initialState, action: RunProcessPanelAction): RunProcessPanel => runProcessPanelActions.match(action, { + SET_PROCESS_OWNER_UUID: processOwnerUuid => ({ ...state, processOwnerUuid }), SET_CURRENT_STEP: currentStep => ({ ...state, currentStep }), - SET_WORKFLOWS: workflows => ({ ...state, workflows }), + SET_SELECTED_WORKFLOW: selectedWorkflow => ({ + ...state, + selectedWorkflow, + inputs: getWorkflowInputs(parseWorkflowDefinition(selectedWorkflow)) || [], + }), + SET_WORKFLOWS: workflows => ({ ...state, workflows, searchWorkflows: workflows }), - SET_SELECTED_WORKFLOW: selectedWorkflow => ({ ...state, selectedWorkflow }), + SEARCH_WORKFLOWS: term => ({ ...state, searchWorkflows: state.workflows.filter(workflow => workflow.name.includes(term)) }), default: () => state }); diff --cc src/views/run-process-panel/run-process-panel-root.tsx index da21d704,b656ba1f..14895275 --- a/src/views/run-process-panel/run-process-panel-root.tsx +++ b/src/views/run-process-panel/run-process-panel-root.tsx @@@ -17,15 -15,16 +17,16 @@@ export type RunProcessPanelRootActionPr type RunProcessPanelRootProps = RunProcessPanelRootDataProps & RunProcessPanelRootActionProps; - export const RunProcessPanelRoot = ({ runProcess, currentStep, onSetStep, onSetWorkflow, workflows, selectedWorkflow }: RunProcessPanelRootProps) => -export const RunProcessPanelRoot = ({ currentStep, onSearch, onSetStep, onRunProcess, onSetWorkflow, workflows, selectedWorkflow }: RunProcessPanelRootProps) => ++export const RunProcessPanelRoot = ({ runProcess, currentStep, onSearch, onSetStep, onSetWorkflow, workflows, selectedWorkflow }: RunProcessPanelRootProps) => Choose a workflow - diff --cc src/views/run-process-panel/run-process-panel.tsx index 68917c2c,1f43e05c..42324ab0 --- a/src/views/run-process-panel/run-process-panel.tsx +++ b/src/views/run-process-panel/run-process-panel.tsx @@@ -6,7 -6,7 +6,7 @@@ import { Dispatch } from 'redux' import { connect } from 'react-redux'; import { RootState } from '~/store/store'; import { RunProcessPanelRootDataProps, RunProcessPanelRootActionProps, RunProcessPanelRoot } from '~/views/run-process-panel/run-process-panel-root'; - import { goToStep, setWorkflow, runProcess } from '~/store/run-process-panel/run-process-panel-actions'; -import { goToStep, setWorkflow, searchWorkflows } from '~/store/run-process-panel/run-process-panel-actions'; ++import { goToStep, setWorkflow, runProcess, searchWorkflows } from '~/store/run-process-panel/run-process-panel-actions'; import { WorkflowResource } from '~/models/workflow'; const mapStateToProps = ({ runProcessPanel }: RootState): RunProcessPanelRootDataProps => { @@@ -24,8 -24,11 +24,11 @@@ const mapDispatchToProps = (dispatch: D onSetWorkflow: (workflow: WorkflowResource) => { dispatch(setWorkflow(workflow)); }, - onRunProcess: () => { - + runProcess: () => { + dispatch(runProcess); + }, + onSearch: (term: string) => { + dispatch(searchWorkflows(term)); } });