diff --git a/src/backends/ContainerBackend.cpp b/src/backends/ContainerBackend.cpp index b1073de..6433137 100644 --- a/src/backends/ContainerBackend.cpp +++ b/src/backends/ContainerBackend.cpp @@ -28,7 +28,18 @@ bool ContainerBackend::executeStep(const core::WorkflowStep& step, QStringList args; // Use specified shell or default to sh + // Common shells: bash, sh, dash, ash QString shell = step.shell.isEmpty() ? "sh" : step.shell; + + // Basic shell validation - prefer bash if available, fallback to sh + if (shell == "bash" || shell == "/bin/bash") { + // Try bash first, will fail if not available + shell = "bash"; + } else if (shell == "sh" || shell == "/bin/sh") { + shell = "sh"; + } + // For other shells, use as specified and let container fail if unavailable + args << "exec" << m_containerId << shell << "-c" << step.run; process.start(m_containerRuntime, args); diff --git a/src/core/WorkflowParser.cpp b/src/core/WorkflowParser.cpp index 899833a..5b9f9d8 100644 --- a/src/core/WorkflowParser.cpp +++ b/src/core/WorkflowParser.cpp @@ -145,7 +145,7 @@ Workflow WorkflowParser::parse(const QString& filePath) { } } catch (const YAML::Exception& e) { - m_errors << QString("YAML parsing error: %1").arg(e.what()); + m_errors << QString("YAML parsing error in %1: %2").arg(filePath, e.what()); } return workflow; diff --git a/src/gui/JobView.cpp b/src/gui/JobView.cpp index 65256af..f698799 100644 --- a/src/gui/JobView.cpp +++ b/src/gui/JobView.cpp @@ -20,9 +20,13 @@ void JobView::setupUI() { } void JobView::setJobInfo(const QString& jobId, const QString& status) { + // TODO: Implement job details display + // - Show job ID and name + // - Display job status with color coding + // - Show step progress + // - Display logs for individual steps Q_UNUSED(jobId); Q_UNUSED(status); - // Implementation for job details } } // namespace gui diff --git a/src/gui/WorkflowView.cpp b/src/gui/WorkflowView.cpp index a238b86..3d3de8a 100644 --- a/src/gui/WorkflowView.cpp +++ b/src/gui/WorkflowView.cpp @@ -20,8 +20,12 @@ void WorkflowView::setupUI() { } void WorkflowView::loadWorkflow(const QString& workflowPath) { + // TODO: Implement detailed workflow visualization + // - Show workflow name and triggers + // - Display job graph with dependencies + // - Show step details + // - Highlight matrix expansions Q_UNUSED(workflowPath); - // Implementation for detailed workflow view } } // namespace gui