22 lines · 1.1 KB
import { createServerFn } from "@tanstack/react-start";
import { requireViewer, viewerMiddleware } from "./middleware";
import { limitHeavy } from "~/server/limits";
import { assertVerifiedForWrites } from "~/server/verified-writes";
import { assertNotArchived, requireRepoAccess } from "~/server/repos";
import { resyncImportedRefs } from "~/server/git/ref-sync";
import { badRequest } from "~/server/errors";
import { repoRef } from "~/lib/validation";

export const syncImportedRefs = createServerFn({ method: "POST" })
  .middleware([viewerMiddleware])
  .validator(repoRef)
  .handler(async ({ data, context }) => {
    assertVerifiedForWrites(requireViewer(context.viewer));
    const { repo } = await requireRepoAccess(data.owner, data.repo, context.viewer, "admin");
    assertNotArchived(repo);
    if (!repo.import_source_url) throw badRequest("This repository was not imported");
    if (repo.status !== "ready") throw badRequest("The repository is still being provisioned");
    await limitHeavy(context.viewer);
    return resyncImportedRefs(repo, repo.import_source_url);
  });