Groups allow multiple modules to be run sequentially in a defined order. Adds full CRUD (repo, engine orchestrator, web routes, templates) for grp, group_member, and group_run tables that were previously schema-only. Module index now shows group membership badges per module. Wizard default dest name now sanitizes source column names with spaces or special characters to valid identifiers rather than failing at CREATE TABLE time. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
61 lines
2.2 KiB
HTML
61 lines
2.2 KiB
HTML
{% extends "base.html" %}
|
|
{% set section = "groups" %}
|
|
{% block title %}Groups — Pipekit{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="panel">
|
|
<header>
|
|
Groups
|
|
<span class="subtitle">{{ groups|length }} total</span>
|
|
<span style="margin-left:auto">
|
|
<a class="btn" href="/groups/new">New group…</a>
|
|
</span>
|
|
</header>
|
|
<div class="body tight">
|
|
{% if groups %}
|
|
<table class="grid">
|
|
<thead>
|
|
<tr>
|
|
<th>name</th>
|
|
<th>members</th>
|
|
<th>last run</th>
|
|
<th style="width:9em">status</th>
|
|
<th></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
{% for g in groups %}
|
|
<tr>
|
|
<td><a href="/groups/{{ g.id }}"><strong>{{ g.name }}</strong></a></td>
|
|
<td class="mono">{{ g.member_count }}</td>
|
|
<td class="mono">{{ g.last_run_at or "—" }}</td>
|
|
<td>
|
|
{% if g.last_status %}
|
|
<span class="pill {{ g.last_status }}">{{ g.last_status }}</span>
|
|
{% else %}
|
|
<span class="pill">never ran</span>
|
|
{% endif %}
|
|
</td>
|
|
<td style="text-align:right">
|
|
<form class="inline" method="post" action="/groups/{{ g.id }}/run">
|
|
<button type="submit">Run</button>
|
|
</form>
|
|
<form class="inline" method="post" action="/groups/{{ g.id }}/run">
|
|
<input type="hidden" name="dry_run" value="1">
|
|
<button type="submit" class="ghost">Dry run</button>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
{% else %}
|
|
<div class="empty">
|
|
No groups yet.<br>
|
|
<a class="btn" href="/groups/new" style="margin-top:0.7rem; display:inline-block">Create one</a>
|
|
</div>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|