299 lines · 10.7 KB
import { z } from "zod";
import { badRequest, notFoundError } from "../errors";
import { limitWrite } from "../limits";
import { branchSha, listRefs } from "../git/refs";
import { pagesDomain, siteUrl } from "../pages/config";
import { customDomainsEnabled } from "../pages/domains";
import { createDeployment, loadSite, removePreview, rollbackTo } from "../pages/deploy";
import { disableSite, listDeployments, refreshDomain, saveSite, setDomain } from "../pages/site";
import { labelUrl, sitesDomain } from "../sites/config";
import { createSiteDeployment, listSiteDeployments, loadSiteForRepo, rollbackSite } from "../sites/deploy";
import { siteLabel } from "../sites/naming";
import {
  deleteEnv,
  disableSite as disableSiteHosting,
  listEnv,
  refreshSiteDomain,
  saveAccess,
  saveSite as saveSiteSettings,
  setEnv,
  setSiteDomain,
} from "../sites/site";
import { noContent, readJson, requireScopedAdminWrite, requireScopedRepo, unprocessable } from "./http";
import type { ApiContext } from "./http";

const settingsInput = z.object({
  source: z.enum(["branch", "workflow"]).default("branch"),
  branch: z.string().min(1).max(255),
  folder: z.string().max(200).default(""),
  artifact_name: z
    .string()
    .regex(/^[A-Za-z0-9._-]{1,100}$/)
    .default("github-pages"),
  spa: z.boolean().default(false),
  previews: z.boolean().default(false),
  preview_env: z.boolean().default(false),
});
const domainInput = z.object({ domain: z.string().max(253).nullable() });
const rollbackInput = z.object({ deployment_id: z.string().min(1) });
const accessInput = z.object({
  access: z.enum(["public", "password", "gitfor", "oidc"]),