204 lines · 7.2 KB
import { z } from "zod";
import { badRequest } from "../errors";
import { limitWrite } from "../limits";
import { branchSha, listRefs } from "../git/refs";
import { customDomainsEnabled, customDomainsTarget } from "../sites/domains";
import { labelUrl, sitesDomain } from "../sites/config";
import { createSiteDeployment, listSiteDeployments, loadSiteForRepo, rollbackSite } from "../sites/deploy";
import { siteLabel } from "../sites/naming";
import {
  deleteEnv,
  disableSite,
  listEnv,
  refreshSiteDomain,
  saveAccess,
  saveSite,
  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"]),
  audience: z.enum(["readers", "members"]).default("readers"),
  password: z.string().max(200).nullable().default(null),
});