Включить правила защиты филиалов в Github на уровне организации - PullRequest
0 голосов
/ 16 января 2019

Можно ли включить правила защиты ветвей на уровне организации в Github, чтобы все репозитории, входящие в эту организацию, наследовали эти правила для примененных ветвей. Сейчас действительно сложно включить один и тот же набор правил для каждого репо для одного и того же набора ветвей.

Ответы [ 3 ]

0 голосов
/ 22 января 2019

Я заставил его работать, используя простой скрипт ruby, который использует API GitHub: -

require "json"
require "logger"

LOGGER = Logger.new(STDOUT)

def run(cmd)
  LOGGER.debug("Running: #{cmd}")
  output = `#{cmd}`
  raise "Error: #{$?}" unless $?.success?
  output
end


def repos(page = 1, list = [])
  cmd = %Q{curl -s --user "user:pwd" https://github_url/api/v3/orgs/org_name/repos?page=#{page}}
  data = JSON.parse(run(cmd))
  list.concat(data)
  repos(page + 1, list) unless data.empty?
  list
end

repos.each do |repo|
  require 'net/http'
require 'uri'
require 'json'

uri = URI.parse("https://github_url/api/v3/repos/org_name/#{repo["name"]}/branches/master/protection")
request = Net::HTTP::Put.new(uri)
request.basic_auth("user", "pwd")
request["Accept"] = "application/vnd.github.luke-cage-preview+jso"
request.body = JSON.dump({
  "required_status_checks" => {
    "strict" => true,
    "contexts" => [
      "continuous-integration/travis-ci"
    ]
  },
  "enforce_admins" => true,
  "required_pull_request_reviews" => {
    "dismiss_stale_reviews" => true
  },
  "restrictions" => nil
})

req_options = {
  use_ssl: uri.scheme == "https",
}

response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
  http.request(request)
end
end
0 голосов
/ 23 марта 2019

Вы можете использовать централизованное решение для серверных git-хуков, таких как Datree.io . Он имеет встроенные политики, такие как:

  1. Обеспечение защиты ветвей на всех текущих и будущих репозиториях - предотвращение удаления главной ветки и принудительное нажатие.
  2. Принудительно выполнять поток запросов извлечения в ветви по умолчанию для всех репозитариев (включая созданные в будущем) - предотвращать прямые фиксации к мастеру без запроса-извлечения и проверок.

Продукт активно изменяет настройки GitHub для существующих репозиториев и применяет настройки для будущих репозиториев.

Отказ от ответственности: я один из соучредителей Датри

0 голосов
/ 17 января 2019

Вы должны попытаться использовать конечную точку обновления ветки Github API с каким-то автоматическим процессом для применения правил защиты веток ко всем новым ветвям в вашей организации.

PUT /repos/:owner/:repo/branches/:branch/protection

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...