# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Whether or not rebase-merging is enabled on this repository.
# Defaults to `true`
rebaseMergeAllowed: false

# Whether or not squash-merging is enabled on this repository.
# Defaults to `true`
squashMergeAllowed: true

# Whether or not PRs are merged with a merge commit on this repository.
# Defaults to `false`
mergeCommitAllowed: false

# Rules for main branch protection
branchProtectionRules:
# Identifies the protection rule pattern. Name of the branch to be protected.
# Defaults to `main`
- pattern: main
  # Can admins overwrite branch protection.
  # Defaults to `true`
  isAdminEnforced: true
  # Number of approving reviews required to update matching branches.
  # Defaults to `1`
  requiredApprovingReviewCount: 1
  # Are reviews from code owners required to update matching branches.
  # Defaults to `false`
  requiresCodeOwnerReviews: true
  # Require up to date branches
  requiresStrictStatusChecks: false
  # List of required status check contexts that must pass for commits to be accepted to matching branches.
  requiredStatusCheckContexts:
  - "dependencies (11)"
  - "lint"
  - "units (8)"
  - "units (11)"
  - "Kokoro - Test: Integration"
  - "cla/google"
  - "OwlBot Post Processor"
  - "Kokoro - Test: Java GraalVM Native Image"
  - "Kokoro - Test: Java 17 GraalVM Native Image"
# List of explicit permissions to add (additive only)
permissionRules:
- team: yoshi-admins
  permission: admin
- team: yoshi-java-admins
  permission: admin
- team: yoshi-java
  permission: push
- team: java-samples-reviewers
  permission: push

