{% extends "base.html" %} {% import "webhooks_panel.html" as w %} {% import "assistants_panel.html" as ai %} {% import "variables_panel.html" as va %} {% import "secrets_panel.html" as se %} {% import "repo_tabs.html" as m %} {% block title %}Settings · {{ repo.owner }}/{{ repo.name }}{% endblock %} {% block bodyattrs %} data-repo="{{ repo.url }}"{% endblock %} {% block tabs %}{% call m::tabs(repo, "settings") %}{% endblock %} {% block content %}
{{ n }}
{% endif %} {% if let Some(e) = error %}{{ e }}
{% endif %}The OxygenFlow runners that may take this repository's jobs: the site's, {{ row.owner }}'s, and this repository's own.
{% if let Some(t) = runner_token %}Register a runner for this repository with:
flow runner register {{ shell.base_url }} --token {{ t }} --name NAME{% endif %}
{% if runners.is_empty() %}None yet: runs wait until a runner that serves this repository is added.
{% else %}| Runner | Status | Serves | Machine | |
|---|---|---|---|---|
| {{ r.name }} | {{ r.status() }} | {{ serves }} | {% if r.arch.is_empty() %}unknown{% else %}{{ r.arch }} · {{ r.os }}{% endif %} | {% if *own %}{% endif %} |
The hub keeps this repository's Terraform and OpenTofu state, sealed at rest, with its last {{ crate::terraform::VERSIONS_KEPT }} versions. A pipeline's job uses it with an identity token of this hub's (no cloud credential): give the job identity "{{ shell.base_url }}/terraform" {% raw %}{{% endraw %} mount-path "/run/secrets/tf" {% raw %}}{% endraw %}, and TF_HTTP_PASSWORD=$(cat /run/secrets/tf) beside:
terraform {
backend "http" {
address = "{{ shell.base_url }}/api/v1/repos/{{ row.owner }}/{{ row.name }}/terraform/state/NAME"
lock_address = "{{ shell.base_url }}/api/v1/repos/{{ row.owner }}/{{ row.name }}/terraform/state/NAME"
unlock_address = "{{ shell.base_url }}/api/v1/repos/{{ row.owner }}/{{ row.name }}/terraform/state/NAME"
username = "flow"
}
}
{% if tf_states.is_empty() %}No state yet.
{% else %}| State | Serial | Last written | Lock | Versions kept |
|---|---|---|---|---|
| {{ s.name }} | {{ s.serial }} | {% if s.updated_by.is_empty() %}never{% else %}by {{ s.updated_by }} {% endif %} | {% if s.lock_id.is_empty() %}free{% else %}held by {{ s.locked_by }}{% if let Some(t) = s.locked_ms %} {% endif %}{% endif %} | {{ n }} |
This repository's data lives in {{ st.url }}, your bucket. This server keeps a cache and the credentials, sealed.
Nobody beyond the owner{% if !teams.is_empty() %} and the organisation's members{% endif %}.
{% else %}| {% if let Some(a) = c.account %}{{ a.username }}{% else if let Some(t) = c.team %}team {{ t.name }}{% endif %} | {{ c.role }} |
Settings that change what this repository is. Each asks you to confirm; none can be undone from here except archiving.
Move this repository to a user or an organisation you may create repositories under. Its address changes to /OWNER/{{ repo.name }}; the old address redirects, and oxy remotes keep working.
{% if row.archived %}It is archived: read-only for everyone, shown with a badge.{% if !row.archived_reason.is_empty() %} Reason: {{ row.archived_reason }}{% endif %}{% else %}Read-only for everyone, including you: no pushes, edits, issues, proposals or comments, until an admin brings it back. Say why, for whoever finds it later.{% endif %}
{% if repo.wiki %}The wiki's repository moves to the trash with its history; a new first page starts a fresh one.{% else %}This repository has no wiki.{% endif %}
The repository moves to the trash and is removed after the retention period.