set -eu
: "${RK_REPO:?rk sets this; run this script through rk setup}"
: "${RK_TRUNK_BRANCH:?rk sets this; run this script through rk setup}"
: "${RK_REQUIRED_CHECK:?rk sets this from --required-check}"
name="$RK_TRUNK_BRANCH-protection"
id="$(gh api "repos/$RK_REPO/rulesets" -q ".[] | select(.name == \"$name\") | .id" | head -n 1)"
if [ -n "$id" ]; then
gh api -X PUT "repos/$RK_REPO/rulesets/$id" --input - >/dev/null
else
gh api -X POST "repos/$RK_REPO/rulesets" --input - >/dev/null
fi <<JSON
{
"name": "$name",
"target": "branch",
"enforcement": "active",
"bypass_actors": [],
"conditions": {
"ref_name": { "include": ["refs/heads/$RK_TRUNK_BRANCH"], "exclude": [] }
},
"rules": [
{ "type": "deletion" },
{ "type": "non_fast_forward" },
{
"type": "pull_request",
"parameters": {
"required_approving_review_count": 0,
"dismiss_stale_reviews_on_push": false,
"require_code_owner_review": false,
"require_last_push_approval": false,
"required_review_thread_resolution": false,
"require_extra_approval_for_unattributed_changes": false,
"allowed_merge_methods": ["squash"]
}
},
{
"type": "required_status_checks",
"parameters": {
"do_not_enforce_on_create": true,
"strict_required_status_checks_policy": false,
"required_status_checks": [{ "context": "$RK_REQUIRED_CHECK" }]
}
}
]
}
JSON
echo "check: prints $name"
gh api "repos/$RK_REPO/rulesets" -q ".[] | select(.name == \"$name\") | .name"