import { createServerFn } from "@tanstack/react-start";
import { resolveMentions } from "~/server/mentions";
import { limitWrite } from "~/server/limits";
import { z } from "zod";
import { requireViewer, viewerMiddleware } from "./middleware";
import { placeholders } from "~/server/db";
import { repoDb } from "~/server/scoped-db";
import { forgetLocator, registerLocator } from "~/server/scoped-db/locators";
import { scopedId } from "~/server/scoped-db/ids";
import { requireRepoAccess, requireRepoMutation } from "~/server/repos";
import { listRefs, resolveRevision } from "~/server/git/refs";
import { assertVisibleRevision } from "~/server/git/reachable";
import { createTag, deleteRef, isValidRefName, PushRejectedError } from "~/server/git/writer";
import { loadProtections, tagProtectionFor, tagUpdateViolation } from "~/server/protection";
import { assertBelowCap, CAPS } from "~/server/limits";
import { signatureNow } from "~/server/git/objects";
import { ZERO_SHA } from "~/server/git/store";
import { triggerPush } from "~/server/events/push-trigger";
import { emitNotification, emitWebhook, publicUrl, recordActivity } from "~/server/events/emit";
import { scheduleWorkflows } from "~/server/ci/scheduler";
import { accountOrGhost, accountsById } from "~/server/people";
import { renderMarkdown } from "~/server/markdown";
import { deleteObjects } from "~/server/storage";
import { badRequest, conflict, forbidden, notFoundError } from "~/server/errors";
import { markdownBody, repoRef } from "~/lib/validation";
import type { Permission, RepoRow, Viewer } from "~/lib/types";
type ReleaseRow = {
id: string;
tag: string;
name: string;
body: string;
author_id: string;
target_sha: string;
draft: number;
prerelease: number;
created_at: number;
published_at: number | null;
};