{% extends "base.html" %} {% import "admin_nav.html" as an %} {% block title %}Images · Administration{% endblock %} {% block content %} {# The swarm (docs/backgrounds.md §2): the hub and the runners, and the images moving between them. #} {% include "backdrop.html" %}

Runners {{ images.len()|plural("image", "images") }} · {{ on_hub }} on the hub · Administration

{% call an::nav(crate::web::admin::AdminSection::Images) %}

Every rootfs image a runner holds, the hub keeps, or a job ran on in the last 90 days, newest use first. {% if swarm.is_empty() %}No runner shares images peer to peer yet: give one a [runner.swarm] section.{% else %}Sharing images peer to peer: {% for s in swarm %}{{ s }}{% if !loop.last %}, {% endif %}{% endfor %}.{% endif %} Send an image to the hub with flow rootfs push HASH.

{% if images.is_empty() %}

No images yet.

{% else %}
{% for i in images %} {% endfor %}
ImageSizeWhereUsed bySent
{{ i.hash|short }}{% if !i.arch.is_empty() %} {{ i.arch }}{% endif %} {% if let Some(s) = i.size %}{{ s|bytes }}{% else %}—{% endif %} {% if i.stranded() %}nowhere{% endif %}{% for p in i.places %}{% if p.kind == "fetching" %}⇣ {% endif %}{{ p.name }}{% endfor %} {% for (repo, jobs, last) in i.uses %}
{{ repo }} {{ jobs|plural("job", "jobs") }},
{% endfor %}{% if i.uses.is_empty() %}no recent jobs{% endif %}
{% if let Some((who, when)) = i.sent %}{{ who }} {% else %}not on the hub{% endif %}
{% endif %}
{% endblock %}