diff --git a/CHANGELOG.md b/CHANGELOG.md index f7d1dbf3..c309d7a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -38,6 +38,7 @@ ### Fixed +- Made retrieval of organization setting `readers_can_create_discussions` optional as it's not available for empty organizations. ([#116](https://gitlab.eclipse.org/eclipsefdn/security/otterdog/-/issues/116)) - Fixed resetting apply operation when running it on multiple organizations at the same time. - Fixed retrieving repository secrets for temporary private clone repositories. diff --git a/otterdog/providers/github/web.py b/otterdog/providers/github/web.py index abbbc15c..45e93cf7 100644 --- a/otterdog/providers/github/web.py +++ b/otterdog/providers/github/web.py @@ -67,6 +67,7 @@ def _retrieve_settings(self, org_id: str, included_keys: set[str], page: Page) - for setting_def in page_def: setting = setting_def["name"] + optional = setting_def["optional"] utils.print_trace(f"checking setting '{setting}'") if setting not in included_keys: @@ -115,6 +116,9 @@ def _retrieve_settings(self, org_id: str, included_keys: set[str], page: Page) - utils.print_trace(f"retrieved setting for '{setting}' = '{value}'") except Exception as e: + if optional: + continue + if utils.is_debug_enabled(): page_name = page_url.split("/")[-1] screenshot_file = f"screenshot_{page_name}.png" diff --git a/otterdog/resources/github-web-settings.jsonnet b/otterdog/resources/github-web-settings.jsonnet index b923b2c7..cb8686e3 100644 --- a/otterdog/resources/github-web-settings.jsonnet +++ b/otterdog/resources/github-web-settings.jsonnet @@ -1,23 +1,25 @@ -local newInput(type, valueSelector, name, inputName = name) = { +local newInput(type, valueSelector, name, inputName = name, optional = false) = { name: name, type: type, + optional: optional, preSelector: null, valueSelector: valueSelector, selector: 'input[type="%s"][name="%s"]' % [type, inputName], save: 'form:has(%s) button[type="submit"]' % self.selector }; -local newCheckbox(name, inputName = name) = - newInput('checkbox', 'checked', name, inputName); +local newCheckbox(name, inputName = name, optional = false) = + newInput('checkbox', 'checked', name, inputName, optional); -local newTextInput(name, inputName = name) = - newInput('text', 'value', name, inputName); +local newTextInput(name, inputName = name, optional = false) = + newInput('text', 'value', name, inputName, optional); -local newRadioInput(name, inputName = name) = - newInput('radio', 'value', name, inputName); +local newRadioInput(name, inputName = name, optional = false) = + newInput('radio', 'value', name, inputName, optional); -local newSelectMenuInput(name, inputName, saveInputName, preSelector = null) = { +local newSelectMenuInput(name, inputName, saveInputName, preSelector = null, optional = false) = { name: name, + optional: optional, type: 'select-menu', preSelector: preSelector, valueSelector: 'innerText', @@ -31,7 +33,7 @@ local newSelectMenuInput(name, inputName, saveInputName, preSelector = null) = { newCheckbox('members_can_change_repo_visibility'), newCheckbox('members_can_delete_repositories'), newCheckbox('members_can_delete_issues'), - newCheckbox('readers_can_create_discussions'), + newCheckbox('readers_can_create_discussions', optional = true), newCheckbox('members_can_create_teams') ],