# These settings are synced to GitHub by https://probot.github.io/apps/settings/

repository:
  # The name of the repository. Changing this will rename the repository
  name: libvfio-user

  # A short description of the repository that will show up on GitHub
  description: framework for emulating devices in userspace

  # A URL with more information about the repository
  #homepage:

  # A comma-separated list of topics to set on the repository
  #topics:

  # Either `true` to make the repository private, or `false` to make it public.
  private: false

  # Either `true` to enable issues for this repository, `false` to disable them.
  has_issues: true

  # Either `true` to enable projects for this repository, or `false` to disable them.
  # If projects are disabled for the organization, passing `true` will cause an API error.
  #has_projects: true

  # Either `true` to enable the wiki for this repository, `false` to disable it.
  has_wiki: false

  # Either `true` to enable downloads for this repository, `false` to disable them.
  #has_downloads: true

  # Updates the default branch for this repository.
  default_branch: master

  # Either `true` to allow squash-merging pull requests, or `false` to prevent
  # squash-merging.
  allow_squash_merge: true

  # Either `true` to allow merging pull requests with a merge commit, or `false`
  # to prevent merging pull requests with merge commits.
  allow_merge_commit: false

  # Either `true` to allow rebase-merging pull requests, or `false` to prevent
  # rebase-merging.
  allow_rebase_merge: false

# Labels: define labels for Issues and Pull Requests
#labels:
  #- name: bug
  #  color: CC0000
  #  description: An issue with the system

# Milestones: define milestones for Issues and Pull Requests
#milestones:
  #- title: milestone-title
  #  description: milestone-description
  #  # The state of the milestone. Either `open` or `closed`
  #  state: open

# Collaborators: give specific users access to this repository.
# See https://developer.github.com/v3/repos/collaborators/#add-user-as-a-collaborator for available options
#collaborators:
  #- username: bkeepers
  #  # Note: Only valid on organization-owned repositories.
  #  # The permission to grant the collaborator. Can be one of:
  #  # * `pull` - can pull, but not push to or administer this repository.
  #  # * `push` - can pull and push, but not administer this repository.
  #  # * `admin` - can pull, push and administer this repository.
  #  # * `maintain` - Recommended for project managers who need to manage the repository without access to sensitive or destructive actions.
  #  # * `triage` - Recommended for contributors who need to proactively manage issues and pull requests without write access.
  #  permission: push

# See https://developer.github.com/v3/teams/#add-or-update-team-repository for available options
#teams:
  #- name: core
  #  # The permission to grant the team. Can be one of:
  #  # * `pull` - can pull, but not push to or administer this repository.
  #  # * `push` - can pull and push, but not administer this repository.
  #  # * `admin` - can pull, push and administer this repository.
  #  # * `maintain` - Recommended for project managers who need to manage the repository without access to sensitive or destructive actions.
  #  # * `triage` - Recommended for contributors who need to proactively manage issues and pull requests without write access.
  #  permission: admin
  #- name: docs
  #  permission: push

branches:
  - name: master
    # https://developer.github.com/v3/repos/branches/#update-branch-protection
    # Branch Protection settings. Set to null to disable
    protection:
      # Required. Require at least one approving review on a pull request, before merging. Set to null to disable.
      required_pull_request_reviews:
        # The number of approvals required. (1-6)
        required_approving_review_count: 1
        # Dismiss approved reviews automatically when a new commit is pushed.
        dismiss_stale_reviews: false
        # Blocks merge until code owners have reviewed.
        require_code_owner_reviews: false
        # Specify which users and teams can dismiss pull request reviews. Pass an empty dismissal_restrictions object to disable. User and team dismissal_restrictions are only available for organization-owned repositories. Omit this parameter for personal repositories.
        dismissal_restrictions: {}
      # Required. Require status checks to pass before merging. Set to null to disable
      required_status_checks:
        # Required. Require branches to be up to date before merging.
        strict: true
        # Required. The list of status checks to require in order to merge into this branch
        contexts:
          - centos-7
          - ubuntu-20
          - ubuntu-22
          - fedora-35
      # Required. Enforce all configured restrictions for administrators. Set to true to enforce required status checks for repository administrators. Set to null to disable.
      enforce_admins: true
      # Required. Restrict who can push to this branch. Team and user restrictions are only available for organization-owned repositories. Set to null to disable.
      restrictions: null
