{% extends "admin/_layout.html" %} {% from "_macros.html" import icon %} {% set section = "updates" %} {% block title %}Updates - {{ brand.name }}{% endblock %} {% block heading %}Updates{% endblock %} {% block admin_content %}
This host follows the
{{ "stable" if state.channel == "stable" else "edge" }}
channel{% if state.channel == "stable" %} — the newest release tag{% else %} —
the tip of {{ state.branch }}, which is whatever was pushed most
recently and may be half finished{% endif %}.
Checking reaches the remote; opening this page does not.
{{ state.head.short }} {{ state.head.subject }}
{% if state.dirty %}{{ t("uncommitted changes") }}{% endif %}
{{ state.checkout }}{{ t("This was not installed from a git checkout — a container image, or a wheel — so there is nothing here to compare or update. Pull a new image instead.") }}
{% else %} {% endif %}
Nothing on {{ state.branch }} has been tagged as a release yet,
so the stable channel has nothing to offer. Switch this host to
edge in lembas.env to follow the branch instead.
{{ t("Nothing known about the remote yet. Check it above.") }}
{% elif state.up_to_date %}{{ state.available.label }} is what is running.
{% else %}{{ state.available.label }} — {{ state.available.subject }}
{# Release notes, out of the annotated tag itself. Escaped and preformatted, never through services/markdown.py: this comes from a tag object rather than from a template, and markdown is the one path allowed to emit HTML. #} {% if state.available.notes %}{{ state.available.notes }}
{% endif %}
{#
The commits between, not just a count. "3 behind" is a number somebody has to
go and look up; the subjects are what decides whether this is worth
restarting for right now.
#}
{% if state.behind %}
{{ commit.short }} {{ commit.subject }}
lembas.env and the systemd unit); re-run the installer with
INSTALL_UPDATE_HELPER=1 and the channel you want, which
writes both.
This host has the update helper installed, so the button below writes a request that a systemd unit picks up and runs as root. It always deploys the {{ state.channel }} channel — the request carries no ref and no channel, so pressing it is never “deploy something else”.
{{ t("Every restart ends every open terminal session — a command still running on the far side is cut off. A reply being written is saved with whatever it has.") }}
{% else %}{{ command }}
To install it, re-run the installer with
INSTALL_UPDATE_HELPER=1. Doing so means anybody who can
administer this web interface can deploy the {{ state.channel }}
channel — which is the point, and worth deciding on purpose rather than
arriving at.