136 lines · 5.5 KB
import { repoDb } from "./scoped-db";
import { matchesGlob } from "~/lib/glob";
import type { Permission } from "~/lib/types";

export type BranchProtectionRow = {
  id: string;
  repo_id: string;
  pattern: string;
  require_pull_request: number;
  required_approvals: number;
  required_checks: string;
  dismiss_stale_reviews: number;
  allow_deletions: number;
  allow_force_pushes: number;
  enforce_admins: number;
  require_code_owner_review: number;
  created_at: number;
};

export type BranchProtection = {
  id: string;
  pattern: string;
  requirePullRequest: boolean;
  requiredApprovals: number;
  requiredChecks: string[];
  dismissStaleReviews: boolean;
  allowDeletions: boolean;
  allowForcePushes: boolean;
  enforceAdmins: boolean;
  requireCodeOwnerReview: boolean;
};

export function toProtection(row: BranchProtectionRow): BranchProtection {
  return {
    id: row.id,
    pattern: row.pattern,
    requirePullRequest: row.require_pull_request === 1,
    requiredApprovals: row.required_approvals,
    requiredChecks: JSON.parse(row.required_checks),
    dismissStaleReviews: row.dismiss_stale_reviews === 1,