// Aba Secrets do projeto; a condição de carregamento vai na chamada.
component {
resources {
// Estados vazios das abas Secrets e Jobs do projeto (`fallback` do <foreach>).
component(name = SemSecretsNoProjeto) {
text(class = u-muted, content = "Nenhum secret neste projeto ainda.")
}
}
column(class = env, if = @project_loading, not_equals = true) {
column(class = webhook) {
text(
class = "u-muted u-fill",
content = """
Valores sensíveis (tokens, senhas, chaves de API) cifrados
com a chave mestre do servidor. Depois de salvo, o valor
nunca mais é exibido — para trocá-lo, salve um novo com o
mesmo nome.
""",
)
text(
class = "u-muted u-fill",
content = """
Para usar num serviço: na aba Variáveis, ligue "usar secret"
e escolha o nome; ou escreva <secret:NOME> (ou secret:NOME)
como valor, no editor .env do projeto ou do serviço. Para
clonar um repositório Git privado, use o nome do secret
puro, sem prefixo, no campo Credentials da aba General do
serviço.
""",
)
text(
class = "u-muted u-fill",
content = """
O valor real só é decifrado em memória, na hora do deploy.
""",
)
}
form(
name = secret_add,
on_submit = secret_add,
on_validation_error = secret_add_show_validation_errors,
width = fill,
spacing = 8,
) {
row(class = env__add) {
input(
class = env__input,
form_control = project_secret_new_name,
rules = required,
msg = "informe um nome",
placeholder = NOME,
)
}
text(
class = u-error,
if = @error_project_secret_new_name,
not_empty,
content = "@error_project_secret_new_name",
)
row(class = env__add) {
input(
class = env__input,
form_control = project_secret_new_value,
rules = required,
msg = "informe um valor",
placeholder = "valor (cifrado ao salvar)",
)
}
text(
class = u-error,
if = @error_project_secret_new_value,
not_empty,
content = "@error_project_secret_new_value",
)
row {
button(
type = submit,
disabled = @busy_secret_add,
class = "btn btn--primary",
text = "Salvar secret",
)
}
}
hr
scrollable(direction = vertical, class = u-fill-all) {
column(class = kv-list) {
each @project_secrets as s (fallback = SemSecretsNoProjeto) {
row(class = kv-list__row) {
button(
class = env__del,
on_click = secret_delete:@s.name,
disabled = @busy_secret_delete,
text = "✕",
)
text(class = env__sep)
text(class = env__key, content = "@s.name_display")
text(class = "kv-list__val kv-list__val--compact", content = "cifrado")
}
}
}
}
}
}