unable to update branch_protections for github repos
ecatmur opened this issue · 1 comments
ecatmur commented
integrations/terraform-provider-github#1147
google/go-github#2274
Apparently github changed API to deprecate "contexts" and replace it with "checks".
However they return both in query and error on update if both are present (nb. anonymized):
Traceback (most recent call last):
File "main.py", line 64, in <module>
gh_branch.protection().update(enforce_admins=False)
File "env/lib/python3.10/site-packages/github3/decorators.py", line 24, in auth_wrapper
return func(self, *args, **kwargs)
File "env/lib/python3.10/site-packages/github3/repos/branch.py", line 465, in update
json = self._json(self._put(self._api, json=edit), 200)
File "env/lib/python3.10/site-packages/github3/models.py", line 161, in _json
raise exceptions.error_for(response)
github3.exceptions.UnprocessableEntity: 422 Invalid request.
No subschema in "anyOf" matched.
More than one subschema in "oneOf" matched.
Not all subschemas of "allOf" matched.
For 'anyOf/1', {"url"=>"https://.../branches/master/protection/required_status_checks", "strict"=>true, "contexts"=>["my ci check"], "contexts_url"=>"https://.../branches/master/protection/required_status_checks/contexts", "checks"=>[{"context"=>"my ci check", "app_id"=>nil}]} is not a null.
Our workaround is when making updates to other parameters, to pass in the retrieved required_status_checks with the extra "checks" field stripped, e.g. (yes we should do this with as_dict(), I was in a rush):
- gh_branch.protection().update(enforce_admins=False)
+ checks = gh_branch.protection().required_status_checks.contexts()
+ gh_branch.protection().update(enforce_admins=False, required_status_checks={"strict": True, "contexts": checks})
sigmavirus24 commented
Would be happy to review a pull request fixing this. Would be happier if the backwards compatibility of GitHub's API wasn't a blatant lie