4b68853f08
Generic: Repo Health / Site Health (pull_request) Has been skipped
Generic: Repo Health / Access control (pull_request) Successful in 1s
Generic: Project CI / Lint & Validate (pull_request) Successful in 39s
Universal: Pre-Release / Build Pre-Release (${{ inputs.stability || github.ref_name }}) (push) Successful in 1m3s
Universal: Build & Release / Promote to RC (pull_request) Has been skipped
Universal: Build & Release / Build & Release Pipeline (pull_request) Has been skipped
PR RC Release / Build RC Release (pull_request) Successful in 1m8s
Generic: Project CI / Tests (pull_request) Has been cancelled
Generic: Repo Health / Scripts governance (pull_request) Has been cancelled
Generic: Repo Health / Repository health (pull_request) Has been cancelled
Generic: Repo Health / Report: Scripts Governance (pull_request) Has been cancelled
Generic: Repo Health / Report: Repository Health (pull_request) Has been cancelled
Universal: PR Check / Branch Policy (pull_request) Successful in 1s
Universal: PR Check / Validate PR (pull_request) Successful in 12s
Universal: PR Check / Secret Scan (pull_request) Successful in 3m47s
Universal: PR Check / Build RC Package (pull_request) Has been cancelled
Universal: PR Check / Report Issues (pull_request) Has been cancelled
RC Revert / Rename rc/ back to dev/ (pull_request) Has been skipped
Branch Cleanup / Delete merged branch (pull_request) Successful in 2s
Two related additions: 1. Branch deletion as an org-level ability. OrgProtectedBranch gained CanDelete / EnableDeleteAllowlist / DeleteAllowlistTeamIDs (migration 362), ToProtectedBranch maps them, and the API (create/edit/response DTOs + handlers) exposes enable_delete / enable_delete_allowlist / delete_allowlist_teams. The layering merge already combined delete fields, so org delete-protection now enforces once ToProtectedBranch populates them. 2. The repo Branch Protection view now renders each inherited org rule as an expandable detail (direct push, force-push, branch deletion, merge, required approvals, status checks, protected files) with team names resolved, instead of three headline badges. Still read-only. Note: no Go toolchain available locally, so not compiled/gofmt'd/tested here. Verified by hand: struct-field gofmt alignment, template block nesting balances, every .Rule field exists on OrgProtectedBranch, and all locale keys referenced in the template are defined. Claude-Session: https://claude.ai/code/session_01Wsno14cxE49MstXFs9G5KT
105 lines
6.3 KiB
Go
105 lines
6.3 KiB
Go
// Copyright 2026 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package structs
|
|
|
|
import "time"
|
|
|
|
// OrgBranchProtection represents an org-level branch protection ruleset
|
|
type OrgBranchProtection struct {
|
|
ID int64 `json:"id"`
|
|
OrgID int64 `json:"org_id"`
|
|
RuleName string `json:"rule_name"`
|
|
Priority int64 `json:"priority"`
|
|
EnablePush bool `json:"enable_push"`
|
|
EnablePushWhitelist bool `json:"enable_push_whitelist"`
|
|
PushWhitelistTeams []string `json:"push_whitelist_teams"`
|
|
EnableForcePush bool `json:"enable_force_push"`
|
|
EnableForcePushAllowlist bool `json:"enable_force_push_allowlist"`
|
|
ForcePushAllowlistTeams []string `json:"force_push_allowlist_teams"`
|
|
EnableDelete bool `json:"enable_delete"`
|
|
EnableDeleteAllowlist bool `json:"enable_delete_allowlist"`
|
|
DeleteAllowlistTeams []string `json:"delete_allowlist_teams"`
|
|
EnableMergeWhitelist bool `json:"enable_merge_whitelist"`
|
|
MergeWhitelistTeams []string `json:"merge_whitelist_teams"`
|
|
EnableStatusCheck bool `json:"enable_status_check"`
|
|
StatusCheckContexts []string `json:"status_check_contexts"`
|
|
RequiredApprovals int64 `json:"required_approvals"`
|
|
EnableApprovalsWhitelist bool `json:"enable_approvals_whitelist"`
|
|
ApprovalsWhitelistTeams []string `json:"approvals_whitelist_teams"`
|
|
BlockOnRejectedReviews bool `json:"block_on_rejected_reviews"`
|
|
BlockOnOfficialReviewRequests bool `json:"block_on_official_review_requests"`
|
|
BlockOnOutdatedBranch bool `json:"block_on_outdated_branch"`
|
|
DismissStaleApprovals bool `json:"dismiss_stale_approvals"`
|
|
IgnoreStaleApprovals bool `json:"ignore_stale_approvals"`
|
|
RequireSignedCommits bool `json:"require_signed_commits"`
|
|
ProtectedFilePatterns string `json:"protected_file_patterns"`
|
|
UnprotectedFilePatterns string `json:"unprotected_file_patterns"`
|
|
BlockAdminMergeOverride bool `json:"block_admin_merge_override"`
|
|
// swagger:strfmt date-time
|
|
Created time.Time `json:"created_at"`
|
|
// swagger:strfmt date-time
|
|
Updated time.Time `json:"updated_at"`
|
|
}
|
|
|
|
// CreateOrgBranchProtectionOption options for creating an org-level branch protection
|
|
type CreateOrgBranchProtectionOption struct {
|
|
RuleName string `json:"rule_name" binding:"Required"`
|
|
Priority int64 `json:"priority"`
|
|
EnablePush bool `json:"enable_push"`
|
|
EnablePushWhitelist bool `json:"enable_push_whitelist"`
|
|
PushWhitelistTeams []string `json:"push_whitelist_teams"`
|
|
EnableForcePush bool `json:"enable_force_push"`
|
|
EnableForcePushAllowlist bool `json:"enable_force_push_allowlist"`
|
|
ForcePushAllowlistTeams []string `json:"force_push_allowlist_teams"`
|
|
EnableDelete bool `json:"enable_delete"`
|
|
EnableDeleteAllowlist bool `json:"enable_delete_allowlist"`
|
|
DeleteAllowlistTeams []string `json:"delete_allowlist_teams"`
|
|
EnableMergeWhitelist bool `json:"enable_merge_whitelist"`
|
|
MergeWhitelistTeams []string `json:"merge_whitelist_teams"`
|
|
EnableStatusCheck bool `json:"enable_status_check"`
|
|
StatusCheckContexts []string `json:"status_check_contexts"`
|
|
RequiredApprovals int64 `json:"required_approvals"`
|
|
EnableApprovalsWhitelist bool `json:"enable_approvals_whitelist"`
|
|
ApprovalsWhitelistTeams []string `json:"approvals_whitelist_teams"`
|
|
BlockOnRejectedReviews bool `json:"block_on_rejected_reviews"`
|
|
BlockOnOfficialReviewRequests bool `json:"block_on_official_review_requests"`
|
|
BlockOnOutdatedBranch bool `json:"block_on_outdated_branch"`
|
|
DismissStaleApprovals bool `json:"dismiss_stale_approvals"`
|
|
IgnoreStaleApprovals bool `json:"ignore_stale_approvals"`
|
|
RequireSignedCommits bool `json:"require_signed_commits"`
|
|
ProtectedFilePatterns string `json:"protected_file_patterns"`
|
|
UnprotectedFilePatterns string `json:"unprotected_file_patterns"`
|
|
BlockAdminMergeOverride bool `json:"block_admin_merge_override"`
|
|
}
|
|
|
|
// EditOrgBranchProtectionOption options for editing an org-level branch protection
|
|
type EditOrgBranchProtectionOption struct {
|
|
Priority *int64 `json:"priority"`
|
|
EnablePush *bool `json:"enable_push"`
|
|
EnablePushWhitelist *bool `json:"enable_push_whitelist"`
|
|
PushWhitelistTeams []string `json:"push_whitelist_teams"`
|
|
EnableForcePush *bool `json:"enable_force_push"`
|
|
EnableForcePushAllowlist *bool `json:"enable_force_push_allowlist"`
|
|
ForcePushAllowlistTeams []string `json:"force_push_allowlist_teams"`
|
|
EnableDelete *bool `json:"enable_delete"`
|
|
EnableDeleteAllowlist *bool `json:"enable_delete_allowlist"`
|
|
DeleteAllowlistTeams []string `json:"delete_allowlist_teams"`
|
|
EnableMergeWhitelist *bool `json:"enable_merge_whitelist"`
|
|
MergeWhitelistTeams []string `json:"merge_whitelist_teams"`
|
|
EnableStatusCheck *bool `json:"enable_status_check"`
|
|
StatusCheckContexts []string `json:"status_check_contexts"`
|
|
RequiredApprovals *int64 `json:"required_approvals"`
|
|
EnableApprovalsWhitelist *bool `json:"enable_approvals_whitelist"`
|
|
ApprovalsWhitelistTeams []string `json:"approvals_whitelist_teams"`
|
|
BlockOnRejectedReviews *bool `json:"block_on_rejected_reviews"`
|
|
BlockOnOfficialReviewRequests *bool `json:"block_on_official_review_requests"`
|
|
BlockOnOutdatedBranch *bool `json:"block_on_outdated_branch"`
|
|
DismissStaleApprovals *bool `json:"dismiss_stale_approvals"`
|
|
IgnoreStaleApprovals *bool `json:"ignore_stale_approvals"`
|
|
RequireSignedCommits *bool `json:"require_signed_commits"`
|
|
ProtectedFilePatterns *string `json:"protected_file_patterns"`
|
|
UnprotectedFilePatterns *string `json:"unprotected_file_patterns"`
|
|
BlockAdminMergeOverride *bool `json:"block_admin_merge_override"`
|
|
}
|