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
Delete this repository

Once deleted, there is no going back.

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