import { createServerFn } from "@tanstack/react-start";
import { z } from "zod";
import { requireViewer, viewerMiddleware } from "./middleware";
import { all, first } from "~/server/db";
import { accountDb, repoDb } from "~/server/scoped-db";
import { randomId } from "~/server/crypto";
import { assertNotArchived, requireRepoAccess } from "~/server/repos";
import { accountsById } from "~/server/people";
import { assertBelowCap, CAPS, limitWrite } from "~/server/limits";
import { badRequest, notFoundError } from "~/server/errors";
import {
deleteConfigValue,
listSecretNames,
listVariables,
ownerRepoIds,
requireOwnerAdmin,
upsertSecret,
upsertVariable,
} from "~/server/ci/config-admin";
import type { ConfigScope } from "~/server/ci/config-admin";
import type { EnvironmentRow } from "~/server/ci/deployments";
import { repoRef, secretName } from "~/lib/validation";
const MAX_VALUE_BYTES = 48 * 1024;
const MAX_WAIT_MINUTES = 43_200;
const MAX_REVIEWERS = 6;
const MAX_BRANCH_PATTERNS = 20;
const configValue = z.object({
kind: z.enum(["secret", "variable"]),
name: secretName,
value: z.string().min(1).max(MAX_VALUE_BYTES),
});
const environmentName = z
.string()
.trim()
.regex(/^[A-Za-z0-9 ._-]{1,100}$/, "Use letters, numbers, spaces, '.', '-' and '_'");
function stringList(raw: string): string[] {
const value: unknown = JSON.parse(raw);