{% extends "base.html" %} {% import "settings_tabs.html" as t %} {% block title %}Backups{% if kind == "org" %} · {{ owner }}{% endif %}{% endblock %} {% block tabs %}{% if kind == "user" %}{% call t::tabs("backups") %}{% endif %}{% endblock %} {% block content %} {% include "backdrop.html" %}

Backups {% if kind == "org" %}{{ owner }}'s repositories{% else %}your repositories{% endif %}, copied to a place you control

{% if let Some(n) = notice %}

{{ n }}

{% endif %} {% if let Some(e) = error %}

{{ e }}

{% endif %}

Each run copies every repository {% if kind == "org" %}the organisation{% else %}you{% endif %} own, with its wiki, byte for byte (signatures and all), its issues, proposals, releases and settings (never a secret value){% if kind == "org" %}, and the organisation's members and teams{% endif %}. Only what changed since the last run travels, and any kept run can be restored with oxygenhub admin restore.

Where and how often

How often {% for (v, label) in every() %}{% endfor %}
Where {% if !dirs.is_empty() %}{% endif %}
{% if !dirs.is_empty() %} {% endif %}

The hub signs in as backup:{{ owner }} with a token it issues itself; Google exchanges it for a few minutes' access to this bucket. No key file exists. One-time setup: Help › Backups (docs/backups.md §6).

The hub signs in to AWS as backup:{{ owner }} with a token it issues itself (audience sts.amazonaws.com); AWS gives it an hour's credentials of this role. No access key exists. One-time setup: docs/backups.md §6.

Runs

{{ runs.len() }}
{% if runs.is_empty() %}

No runs yet.{% if setting.every == "off" %} Pick how often and where, then save.{% endif %}

{% else %}
{% for r in runs %} {% endfor %}
StartedTookOutcomeRepositoriesFiles sentSize sent
{% if r.trigger == "now" %} by hand{% endif %} {% if let Some(f) = r.finished_ms %}{{ ((f - r.started_ms) / 1000) }} s{% else %}running{% endif %} {{ r.status }} {{ r.repos }} {{ r.sent }} of {{ r.files }} {{ (r.bytes / 1024) }} KiB {{ r.detail }}
{% endif %}
{% endblock %}