{% extends "base.html" %} {% block title %}{{ pipeline.title }} - Piply{% endblock %} {% block content %}
Pipeline

{{ pipeline.title }}

{{ pipeline.pipeline_id }}
{% if pipeline.description %}

{{ pipeline.description }}

{% endif %}
{% if pipeline.last_run %}{{ pipeline.last_run.status }}{% else %}no runs yet{% endif %}
next {{ pipeline.next_run_label }} {{ pipeline.schedule_text }} {{ pipeline.task_count }} tasks {{ pipeline.execution_summary }}
next {{ pipeline.next_run_label }} {{ pipeline.schedule_text }} {{ pipeline.task_count }} tasks {{ pipeline.execution_summary }} {{ pipeline.retry_summary }} {% if pipeline_definition.timeout_seconds %} timeout {{ pipeline_definition.timeout_seconds }}s {% endif %} max concurrent {{ pipeline.max_concurrent_runs }} {% if pipeline.template_id %} template {{ pipeline.template_id }} {% endif %} {% if pipeline.deployment_id %} deployment {{ pipeline.deployment_id }} {% endif %} {% for source in pipeline.triggered_by %} ← {{ source }} {% endfor %} {% for target in pipeline.trigger_targets %} → {{ target }} {% endfor %} {% for tag in pipeline.tags %} {{ tag }} {% endfor %} {{ pipeline.primary_entry }}
{% if pipeline_definition.variables %}
Variables {% for key, value in pipeline_definition.variables.items() %} {{ key }}={{ value }} {% endfor %}
{% endif %}

Task graph

Select a node to inspect dependencies, see the latest status, and run just that task with its upstream prerequisites.

success running failed timed out interrupted skipped
{% set cli_tasks = tasks | selectattr("task_type", "equalto", "cli") | list %} {% if cli_tasks %}

Manual command overrides

For manual runs you can replace the configured CLI command with any command directly from the UI. Batch files and shell chains are supported.

{% for task in cli_tasks %}
{{ task.task_id }}
{% endfor %}
{% endif %}

Tasks

Commands and scripts stay visible so operators can see exactly what will execute.

{% for task in tasks %} {% set latest = task_run_map.get(task.task_id) %}

{{ task.title }}

{{ task.task_id }}
{{ task.operator_label }} {% if latest %} {{ latest.status }} {% endif %}

{{ task.description or "No task-specific description provided." }}

depends_on {{ task.depends_on|join(', ') if task.depends_on else 'none' }} {% if latest %} logs {{ latest.log_count }} duration {% if latest.duration_seconds is not none %}{{ "%.1fs"|format(latest.duration_seconds) }}{% else %}-{% endif %} {% endif %}
Command or target
{{ task.command_preview }}
{% endfor %}

Recent runs

Each run keeps task-level status counts and raw log history.

{% if runs %}
{% for run in runs %}
{{ run.run_id }}

{{ run.started_at or run.created_at }}

{{ run.status }} {% if run.status not in ['queued', 'running'] %} {% endif %}
trigger {{ run.trigger }} tasks {{ run.successful_tasks }}/{{ run.task_count }} logs {{ run.log_count }} duration {% if run.duration_seconds is not none %}{{ "%.1fs"|format(run.duration_seconds) }}{% else %}-{% endif %}
{% if run.retry_of %} {% endif %} {% if run.error %} {% endif %}
{% endfor %}
{% else %}
This pipeline has not been executed yet. Use the run button above to create its first run record.
{% endif %}
{% endblock %} {% block scripts %} {% endblock %}