import type { LabelRow, RepositoryRow } from "../../db/index.ts"; interface SecretSummary { id: number; name: string; description: string | null; created_at: string; } import type { SessionUser } from "../../middleware/session.ts"; import { Layout } from "../layout.tsx"; import { RepoHeader } from "./RepoHeader.tsx"; import { RepoNav } from "./RepoNav.tsx"; interface RepoSettingsProps { user: SessionUser; repo: RepositoryRow; branches: string[]; labels: LabelRow[]; secrets: SecretSummary[]; success?: string; error?: string; } export function RepoSettings({ user, repo, branches, labels, secrets, success, error, }: RepoSettingsProps) { return (
{!!success && (

{success}

)} {!!error && (

{error}

)}
{branches.length > 0 ? ( ) : (

No branches yet — push your first commit to set the default branch.

)}

Labels

{labels.length > 0 && (
{labels.map((label) => (
{label.name}
))}
)}

CI Secrets

Secrets are injected as environment variables into pipeline runs and masked in logs. Values are write-only — they cannot be retrieved after saving.

{secrets.length > 0 && (
{secrets.map((secret) => (
{secret.name} {!!secret.description && ( {secret.description} )} ●●●●●●
))}
)}

Danger zone

Rename this repository

Changing the name breaks existing clone URLs and links to this repo. Collaborators will need to update their remotes.

Rename repository
Rename {repo.name}?
Delete this repository

Once deleted, there is no going back.

Delete repository
Delete {repo.name}? This cannot be undone.
); }