// Copyright 2024 The Gitea Authors. All rights reserved. // SPDX-License-Identifier: MIT package branches import ( "fmt" "code.gitea.io/tea/cmd/flags" "code.gitea.io/tea/modules/context" "code.gitea.io/sdk/gitea" "github.com/urfave/cli/v2" ) // CmdBranchesProtectFlags Flags for command protect/unprotect var CmdBranchesProtectFlags = append([]cli.Flag{ branchFieldsFlag, &flags.PaginationPageFlag, &flags.PaginationLimitFlag, }, flags.AllDefaultFlags...) // CmdBranchesProtect represents a sub command of branches to protect a branch var CmdBranchesProtect = cli.Command{ Name: "protect", Aliases: []string{"P"}, Usage: "Protect branches", Description: `Block actions push/merge on specified branches`, ArgsUsage: "", Action: RunBranchesProtect, Flags: CmdBranchesProtectFlags, } // CmdBranchesUnprotect represents a sub command of branches to protect a branch var CmdBranchesUnprotect = cli.Command{ Name: "unprotect", Aliases: []string{"U"}, Usage: "Unprotect branches", Description: `Suppress existing protections on specified branches`, ArgsUsage: "", Action: RunBranchesProtect, Flags: CmdBranchesProtectFlags, } // RunBranchesProtect function to protect/unprotect a list of branches func RunBranchesProtect(cmd *cli.Context) error { ctx := context.InitCommand(cmd) ctx.Ensure(context.CtxRequirement{RemoteRepo: true}) if !cmd.Args().Present() { return fmt.Errorf("must specify at least one branch") } owner := ctx.Owner if ctx.IsSet("owner") { owner = ctx.String("owner") } for _, branch := range ctx.Args().Slice() { var err error command := ctx.Command.Name if command == "protect" { _, _, err = ctx.Login.Client().CreateBranchProtection(owner, ctx.Repo, gitea.CreateBranchProtectionOption{ BranchName: branch, RuleName: "", EnablePush: false, EnablePushWhitelist: false, PushWhitelistUsernames: []string{}, PushWhitelistTeams: []string{}, PushWhitelistDeployKeys: false, EnableMergeWhitelist: false, MergeWhitelistUsernames: []string{}, MergeWhitelistTeams: []string{}, EnableStatusCheck: false, StatusCheckContexts: []string{}, RequiredApprovals: 1, EnableApprovalsWhitelist: false, ApprovalsWhitelistUsernames: []string{}, ApprovalsWhitelistTeams: []string{}, BlockOnRejectedReviews: false, BlockOnOfficialReviewRequests: false, BlockOnOutdatedBranch: false, DismissStaleApprovals: false, RequireSignedCommits: false, ProtectedFilePatterns: "", UnprotectedFilePatterns: "", }) } else if command == "unprotect" { _, err = ctx.Login.Client().DeleteBranchProtection(owner, ctx.Repo, branch) } else { return fmt.Errorf("command %s is not supported", command) } if err != nil { return err } } return nil }