From 5ccad4db0eb540a520d06d980177989bbe00f99f Mon Sep 17 00:00:00 2001 From: "salt-extensions-autorelease[bot]" <268143340+salt-extensions-autorelease[bot]@users.noreply.github.com> Date: Wed, 14 Oct 2026 20:25:51 +0000 Subject: [PATCH] Release v2.0.0 --- CHANGELOG.md | 62 +++++++++++++++++++ changelog/+account_info.added.md | 1 - changelog/+actions_secrets.added.md | 1 - changelog/+add_team_profile.fixed.md | 1 - changelog/+api_url.added.md | 1 - changelog/+default_branch.added.md | 1 - .../+deploy_key_actions_present.added.md | 1 - changelog/+deploy_keys.added.md | 1 - changelog/+environments.added.md | 1 - changelog/+get_user_pubkeys.removed.md | 1 - .../+is_team_member_missing_team.fixed.md | 1 - changelog/+labels.added.md | 1 - changelog/+legacy_modules.deprecated.md | 1 - .../+legacy_states_catch_errors.fixed.md | 1 - changelog/+list_funcs_error_crash.fixed.md | 1 - changelog/+milestone_pops.fixed.md | 1 - changelog/+org_info.added.md | 1 - changelog/+pages.added.md | 1 - changelog/+partial_changes.fixed.md | 1 - changelog/+pygithub_auth.fixed.md | 1 - changelog/+pygithub_public_api.changed.md | 1 - changelog/+query.added.md | 1 - changelog/+rate_limit.added.md | 1 - changelog/+remove_repo_missing.fixed.md | 1 - changelog/+repo_present_profile.fixed.md | 1 - .../+repo_present_team_add_comment.fixed.md | 1 - changelog/+resource_type.added.md | 1 - .../+ruleset_absent_delete_failure.fixed.md | 1 - changelog/+ruleset_states.fixed.md | 1 - changelog/+scoped_modules.added.md | 1 - changelog/+sdb-profile-values.added.md | 1 - changelog/+single_http_stack.changed.md | 1 - changelog/+structured_changes.added.md | 1 - changelog/+team_present_members.fixed.md | 1 - .../+testmode_projected_changes.fixed.md | 1 - changelog/+tracebacks.changed.md | 1 - changelog/+user_info.added.md | 1 - changelog/+user_keys.added.md | 1 - changelog/+user_owned_repos.added.md | 1 - changelog/+utils-refactor.changed.md | 1 - changelog/+workflow_permissions.added.md | 1 - 41 files changed, 62 insertions(+), 40 deletions(-) delete mode 100644 changelog/+account_info.added.md delete mode 100644 changelog/+actions_secrets.added.md delete mode 100644 changelog/+add_team_profile.fixed.md delete mode 100644 changelog/+api_url.added.md delete mode 100644 changelog/+default_branch.added.md delete mode 100644 changelog/+deploy_key_actions_present.added.md delete mode 100644 changelog/+deploy_keys.added.md delete mode 100644 changelog/+environments.added.md delete mode 100644 changelog/+get_user_pubkeys.removed.md delete mode 100644 changelog/+is_team_member_missing_team.fixed.md delete mode 100644 changelog/+labels.added.md delete mode 100644 changelog/+legacy_modules.deprecated.md delete mode 100644 changelog/+legacy_states_catch_errors.fixed.md delete mode 100644 changelog/+list_funcs_error_crash.fixed.md delete mode 100644 changelog/+milestone_pops.fixed.md delete mode 100644 changelog/+org_info.added.md delete mode 100644 changelog/+pages.added.md delete mode 100644 changelog/+partial_changes.fixed.md delete mode 100644 changelog/+pygithub_auth.fixed.md delete mode 100644 changelog/+pygithub_public_api.changed.md delete mode 100644 changelog/+query.added.md delete mode 100644 changelog/+rate_limit.added.md delete mode 100644 changelog/+remove_repo_missing.fixed.md delete mode 100644 changelog/+repo_present_profile.fixed.md delete mode 100644 changelog/+repo_present_team_add_comment.fixed.md delete mode 100644 changelog/+resource_type.added.md delete mode 100644 changelog/+ruleset_absent_delete_failure.fixed.md delete mode 100644 changelog/+ruleset_states.fixed.md delete mode 100644 changelog/+scoped_modules.added.md delete mode 100644 changelog/+sdb-profile-values.added.md delete mode 100644 changelog/+single_http_stack.changed.md delete mode 100644 changelog/+structured_changes.added.md delete mode 100644 changelog/+team_present_members.fixed.md delete mode 100644 changelog/+testmode_projected_changes.fixed.md delete mode 100644 changelog/+tracebacks.changed.md delete mode 100644 changelog/+user_info.added.md delete mode 100644 changelog/+user_keys.added.md delete mode 100644 changelog/+user_owned_repos.added.md delete mode 100644 changelog/+utils-refactor.changed.md delete mode 100644 changelog/+workflow_permissions.added.md diff --git a/CHANGELOG.md b/CHANGELOG.md index f4653962..d1e9a9a0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,68 @@ This project uses [Semantic Versioning](https://semver.org/) - MAJOR.MINOR.PATCH # Changelog +## 2.0.0 (2026-10-14) + + +### Removed + +- Removed the unauthenticated `get_user_pubkeys` helper from `saltext.github.utils.github`. It ignored the configured {ghconf}`api_url`, relied on `salt.utils.http` and was not exposed in any module + + +### Deprecated + +- Deprecated all current functions of the {py:mod}`github execution module ` as well as the {py:mod}`github state module `. Use the corresponding functions of the new {py:mod}`github_org ` and {py:mod}`github_repo ` modules instead. The `github` execution module remains the namespace for functionality that is not tied to a single organization. The {py:func}`github.list_members_without_mfa ` function and the per-team MFA enforcement of {py:func}`github.team_present ` are deprecated without replacement - require 2FA organization-wide in the GitHub settings instead + + +### Changed + +- All API calls are now routed through the PyGithub client, honoring the configured {ghconf}`api_url`, authentication and retry handling uniformly +- Exception tracebacks are only logged at debug loglevel now +- Refactored the GitHub API interaction layer into reusable per-entity modules below {py:mod}`saltext.github.utils.gh`. These raise {py:class}`GitHubApiError `/{py:class}`GitHubNotFoundError ` (subclasses of {py:class}`CommandExecutionError `) instead of returning error indicators. Existing execution module functions behave as before, except that unhandled API errors now surface as the above exceptions instead of raw PyGithub ones. +- The execution module now exclusively relies on public PyGithub APIs instead of internal ones (``_requester``, ``_identity``, ``_rawData``, manual ``PaginatedList`` construction). It also avoids deprecated API paths (``/teams/{team_id}/...``) by addressing teams by slug and checking team memberships via the ``memberships`` endpoints. The minimum supported PyGithub version is now 2.2. + + +### Fixed + +- All states now report the projected changes in test mode, matching the changes reported on actual application. +- Fixed a PyGithub deprecation warning by migrating to `github.Auth.Token` authentication +- Fixed compound states (`github_repo.present`, `github_org.team_present`, environment management) reporting no changes when failing after some changes had already been applied +- Fixed legacy `github` state functions rendering a traceback instead of a failed state when an unexpected `CommandExecutionError` was raised, e.g. caused by missing profile configuration +- Fixed {py:func}`github.add_team ` refreshing the team cache using the default profile instead of the configured one +- Fixed {py:func}`github.get_issues `, {py:func}`github.get_issue_comments `, {py:func}`github.get_prs ` and {py:func}`github.get_milestones ` crashing with an `AttributeError` when the API returned an error. They now raise a `CommandExecutionError` carrying the API error message. +- Fixed {py:func}`github.get_milestones ` / {py:func}`github.get_milestone ` crashing on API payloads missing optional keys +- Fixed {py:func}`github.is_team_member ` crashing with a `TypeError` when the team does not exist. It now returns `False`. +- Fixed {py:func}`github.remove_repo ` raising an exception instead of returning `False` for nonexistent repositories +- Fixed {py:func}`github.repo_present ` not passing the configured profile when creating repositories +- Fixed {py:func}`github.repo_present ` reporting a failed team *removal* when *adding* a repository to a team failed. +- Fixed {py:func}`github.ruleset_absent ` reporting success when the ruleset could not be deleted. The module function returns a truthy error dict on failure, which was mistaken for success, and the failure result was subsequently overwritten by the "does not exist" fallback. +- Fixed {py:func}`github.ruleset_present ` drift detection, which compared server-populated fields and iterated the wrong parameter set, and made the ruleset states report forecast changes in test mode +- Fixed {py:func}`github.team_present ` crashing when managing team members + + +### Added + +- Added `default_branch` to {py:func}`github_repo.update ` and the {py:func}`github_repo.present ` state +- Added `github.query` for making direct calls to arbitrary GitHub API endpoints, transparently following pagination +- Added `github.rate_limit` for querying the API rate limit status of the profile's token +- Added `github_user.list_keys` for listing the verified public SSH keys of any user, defaulting to the token's user, e.g. for use with the `ssh_auth` state module +- Added composite states that generate an SSH keypair in memory via the `ssh_pki` module and distribute the public half as a deploy key and the private half as an Actions secret, with optional rotation ({py:func}`github_repo.deploy_key_actions_present ` and the resource-type {py:func}`deploy_key.actions_present `) +- Added management of GitHub Pages sites ({py:func}`github_repo.get_pages `/{py:func}`setup_pages `/{py:func}`update_pages `/{py:func}`remove_pages ` and the {py:func}`github_repo.pages_present `/{py:func}`pages_absent ` states) +- Added management of default workflow permissions for the `GITHUB_TOKEN` ({py:func}`github_repo.get_workflow_permissions `/{py:func}`set_workflow_permissions ` and the {py:func}`github_repo.workflow_permissions_managed ` state) +- Added management of repository Actions secrets, encrypted client-side to the repository public key ({py:func}`github_repo.list_actions_secrets `/{py:func}`get_actions_secret `/{py:func}`set_actions_secret `/{py:func}`remove_actions_secret ` and the {py:func}`github_repo.actions_secret_present `/{py:func}`actions_secret_absent ` states) +- Added management of repository deploy keys ({py:func}`github_repo.list_deploy_keys `/{py:func}`get_deploy_key `/{py:func}`add_deploy_key `/{py:func}`remove_deploy_key ` and the {py:func}`github_repo.deploy_key_present `/{py:func}`deploy_key_absent ` states) +- Added management of repository environments, including deployment branch policies ({py:func}`github_repo.list_environments `/{py:func}`get_environment `/{py:func}`set_environment `/{py:func}`remove_environment `/{py:func}`list_deployment_branch_policies `/{py:func}`add_deployment_branch_policy `/{py:func}`remove_deployment_branch_policy ` and the {py:func}`github_repo.environment_present `/{py:func}`environment_absent ` states) +- Added management of repository labels ({py:func}`github_repo.list_labels `/{py:func}`get_label `/{py:func}`add_label `/{py:func}`edit_label `/{py:func}`remove_label ` and the {py:func}`github_repo.label_present `/{py:func}`label_absent ` states) +- Added scoped {py:mod}`github_org ` and {py:mod}`github_repo ` execution and state modules, which replace the organization- and repository-related functionality of the monolithic `github` modules. Unlike the legacy functions, they raise errors instead of logging them and returning `False`. Collections with a unique natural key (repos, teams, team repos, labels, environments, Actions secrets) are returned as name-keyed mappings, id-addressed ones (issues, PRs, milestones, rulesets, deploy keys) as lists. All collection outputs can be reduced to specific fields via the `fields` argument. The new `github_org.team_present` state manages members as a simple list and drops the legacy per-team MFA enforcement options - require 2FA org-wide in the GitHub organization settings instead +- Added the optional {ghconf}`api_url` profile option for targeting GitHub Enterprise Server instances +- Added the {py:mod}`github ` {ref}`Salt resource type ` for Salt 3008.3+, exposing each GitHub repository as an individually targetable resource with per-repository grains and repository-implicit execution and state modules +- Added {py:func}`github.account_info ` for looking up the public profile of any user or organization account, defaulting to the profile's owner +- Added {py:func}`github_org.info ` for looking up the public profile of an organization account, defaulting to the profile's owner and failing on users +- Added {py:func}`github_user.info ` for looking up the public profile of a user account, defaulting to the token's user and failing on organizations +- Profile configuration values containing SDB URIs (e.g. `token: sdb://osenv/GITHUB_TOKEN`) are now rendered on access. Salt itself only renders them inside the minion/master configuration during startup, so this makes them work in pillar-sourced profiles as well. +- The new modules support repositories of any owner. Profiles take an {ghconf}`owner` (organization or user; preferred over the legacy `org_name` alias), which defaults to the token's user when unset. Repository listing and creation live on the {py:mod}`github_repo ` module ({py:func}`list ` / {py:func}`create `), and all of its functions and states as well as all functions of the (now strictly organization-scoped) {py:mod}`github_org ` module accept a per-call `owner` override, so repositories, teams, members and rulesets of foreign organizations can be managed as well. Due to GitHub API limitations, repository creation is only supported for organizations and the authenticated user, private repositories of other users are not listable, tokens without an associated user account (e.g. GitHub App installation tokens) require an explicit `owner` and teams always belong to an organization +- The new {py:mod}`github_org ` and {py:mod}`github_repo ` states report machine-readable `changes` dictionaries (`created`/`deleted`/`updated` entity names, `old`/`new` setting mappings and `*_added`/`*_removed` name lists) instead of prose + ## v1.0.0 (2024-08-13) Initial release of `saltext-github`. This release mostly tracks the functionality in the core Salt code base as of version 3007.1. diff --git a/changelog/+account_info.added.md b/changelog/+account_info.added.md deleted file mode 100644 index e7aed34d..00000000 --- a/changelog/+account_info.added.md +++ /dev/null @@ -1 +0,0 @@ -Added {py:func}`github.account_info ` for looking up the public profile of any user or organization account, defaulting to the profile's owner diff --git a/changelog/+actions_secrets.added.md b/changelog/+actions_secrets.added.md deleted file mode 100644 index 4088157f..00000000 --- a/changelog/+actions_secrets.added.md +++ /dev/null @@ -1 +0,0 @@ -Added management of repository Actions secrets, encrypted client-side to the repository public key ({py:func}`github_repo.list_actions_secrets `/{py:func}`get_actions_secret `/{py:func}`set_actions_secret `/{py:func}`remove_actions_secret ` and the {py:func}`github_repo.actions_secret_present `/{py:func}`actions_secret_absent ` states) diff --git a/changelog/+add_team_profile.fixed.md b/changelog/+add_team_profile.fixed.md deleted file mode 100644 index bd1593c3..00000000 --- a/changelog/+add_team_profile.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Fixed {py:func}`github.add_team ` refreshing the team cache using the default profile instead of the configured one diff --git a/changelog/+api_url.added.md b/changelog/+api_url.added.md deleted file mode 100644 index 062587b2..00000000 --- a/changelog/+api_url.added.md +++ /dev/null @@ -1 +0,0 @@ -Added the optional {ghconf}`api_url` profile option for targeting GitHub Enterprise Server instances diff --git a/changelog/+default_branch.added.md b/changelog/+default_branch.added.md deleted file mode 100644 index d77c96e0..00000000 --- a/changelog/+default_branch.added.md +++ /dev/null @@ -1 +0,0 @@ -Added `default_branch` to {py:func}`github_repo.update ` and the {py:func}`github_repo.present ` state diff --git a/changelog/+deploy_key_actions_present.added.md b/changelog/+deploy_key_actions_present.added.md deleted file mode 100644 index 0247df15..00000000 --- a/changelog/+deploy_key_actions_present.added.md +++ /dev/null @@ -1 +0,0 @@ -Added composite states that generate an SSH keypair in memory via the `ssh_pki` module and distribute the public half as a deploy key and the private half as an Actions secret, with optional rotation ({py:func}`github_repo.deploy_key_actions_present ` and the resource-type {py:func}`deploy_key.actions_present `) diff --git a/changelog/+deploy_keys.added.md b/changelog/+deploy_keys.added.md deleted file mode 100644 index 41abce93..00000000 --- a/changelog/+deploy_keys.added.md +++ /dev/null @@ -1 +0,0 @@ -Added management of repository deploy keys ({py:func}`github_repo.list_deploy_keys `/{py:func}`get_deploy_key `/{py:func}`add_deploy_key `/{py:func}`remove_deploy_key ` and the {py:func}`github_repo.deploy_key_present `/{py:func}`deploy_key_absent ` states) diff --git a/changelog/+environments.added.md b/changelog/+environments.added.md deleted file mode 100644 index 02f9bda1..00000000 --- a/changelog/+environments.added.md +++ /dev/null @@ -1 +0,0 @@ -Added management of repository environments, including deployment branch policies ({py:func}`github_repo.list_environments `/{py:func}`get_environment `/{py:func}`set_environment `/{py:func}`remove_environment `/{py:func}`list_deployment_branch_policies `/{py:func}`add_deployment_branch_policy `/{py:func}`remove_deployment_branch_policy ` and the {py:func}`github_repo.environment_present `/{py:func}`environment_absent ` states) diff --git a/changelog/+get_user_pubkeys.removed.md b/changelog/+get_user_pubkeys.removed.md deleted file mode 100644 index 51780ef7..00000000 --- a/changelog/+get_user_pubkeys.removed.md +++ /dev/null @@ -1 +0,0 @@ -Removed the unauthenticated `get_user_pubkeys` helper from `saltext.github.utils.github`. It ignored the configured {ghconf}`api_url`, relied on `salt.utils.http` and was not exposed in any module diff --git a/changelog/+is_team_member_missing_team.fixed.md b/changelog/+is_team_member_missing_team.fixed.md deleted file mode 100644 index b6eb9591..00000000 --- a/changelog/+is_team_member_missing_team.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Fixed {py:func}`github.is_team_member ` crashing with a `TypeError` when the team does not exist. It now returns `False`. diff --git a/changelog/+labels.added.md b/changelog/+labels.added.md deleted file mode 100644 index eaeb91ab..00000000 --- a/changelog/+labels.added.md +++ /dev/null @@ -1 +0,0 @@ -Added management of repository labels ({py:func}`github_repo.list_labels `/{py:func}`get_label `/{py:func}`add_label `/{py:func}`edit_label `/{py:func}`remove_label ` and the {py:func}`github_repo.label_present `/{py:func}`label_absent ` states) diff --git a/changelog/+legacy_modules.deprecated.md b/changelog/+legacy_modules.deprecated.md deleted file mode 100644 index 5730cd6d..00000000 --- a/changelog/+legacy_modules.deprecated.md +++ /dev/null @@ -1 +0,0 @@ -Deprecated all current functions of the {py:mod}`github execution module ` as well as the {py:mod}`github state module `. Use the corresponding functions of the new {py:mod}`github_org ` and {py:mod}`github_repo ` modules instead. The `github` execution module remains the namespace for functionality that is not tied to a single organization. The {py:func}`github.list_members_without_mfa ` function and the per-team MFA enforcement of {py:func}`github.team_present ` are deprecated without replacement - require 2FA organization-wide in the GitHub settings instead diff --git a/changelog/+legacy_states_catch_errors.fixed.md b/changelog/+legacy_states_catch_errors.fixed.md deleted file mode 100644 index 02f875a9..00000000 --- a/changelog/+legacy_states_catch_errors.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Fixed legacy `github` state functions rendering a traceback instead of a failed state when an unexpected `CommandExecutionError` was raised, e.g. caused by missing profile configuration diff --git a/changelog/+list_funcs_error_crash.fixed.md b/changelog/+list_funcs_error_crash.fixed.md deleted file mode 100644 index 9cfe2532..00000000 --- a/changelog/+list_funcs_error_crash.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Fixed {py:func}`github.get_issues `, {py:func}`github.get_issue_comments `, {py:func}`github.get_prs ` and {py:func}`github.get_milestones ` crashing with an `AttributeError` when the API returned an error. They now raise a `CommandExecutionError` carrying the API error message. diff --git a/changelog/+milestone_pops.fixed.md b/changelog/+milestone_pops.fixed.md deleted file mode 100644 index 015e6371..00000000 --- a/changelog/+milestone_pops.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Fixed {py:func}`github.get_milestones ` / {py:func}`github.get_milestone ` crashing on API payloads missing optional keys diff --git a/changelog/+org_info.added.md b/changelog/+org_info.added.md deleted file mode 100644 index 5251e3eb..00000000 --- a/changelog/+org_info.added.md +++ /dev/null @@ -1 +0,0 @@ -Added {py:func}`github_org.info ` for looking up the public profile of an organization account, defaulting to the profile's owner and failing on users diff --git a/changelog/+pages.added.md b/changelog/+pages.added.md deleted file mode 100644 index d6b8c76a..00000000 --- a/changelog/+pages.added.md +++ /dev/null @@ -1 +0,0 @@ -Added management of GitHub Pages sites ({py:func}`github_repo.get_pages `/{py:func}`setup_pages `/{py:func}`update_pages `/{py:func}`remove_pages ` and the {py:func}`github_repo.pages_present `/{py:func}`pages_absent ` states) diff --git a/changelog/+partial_changes.fixed.md b/changelog/+partial_changes.fixed.md deleted file mode 100644 index 819af824..00000000 --- a/changelog/+partial_changes.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Fixed compound states (`github_repo.present`, `github_org.team_present`, environment management) reporting no changes when failing after some changes had already been applied diff --git a/changelog/+pygithub_auth.fixed.md b/changelog/+pygithub_auth.fixed.md deleted file mode 100644 index 84218ff5..00000000 --- a/changelog/+pygithub_auth.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Fixed a PyGithub deprecation warning by migrating to `github.Auth.Token` authentication diff --git a/changelog/+pygithub_public_api.changed.md b/changelog/+pygithub_public_api.changed.md deleted file mode 100644 index 04b0e752..00000000 --- a/changelog/+pygithub_public_api.changed.md +++ /dev/null @@ -1 +0,0 @@ -The execution module now exclusively relies on public PyGithub APIs instead of internal ones (``_requester``, ``_identity``, ``_rawData``, manual ``PaginatedList`` construction). It also avoids deprecated API paths (``/teams/{team_id}/...``) by addressing teams by slug and checking team memberships via the ``memberships`` endpoints. The minimum supported PyGithub version is now 2.2. diff --git a/changelog/+query.added.md b/changelog/+query.added.md deleted file mode 100644 index ce109560..00000000 --- a/changelog/+query.added.md +++ /dev/null @@ -1 +0,0 @@ -Added `github.query` for making direct calls to arbitrary GitHub API endpoints, transparently following pagination diff --git a/changelog/+rate_limit.added.md b/changelog/+rate_limit.added.md deleted file mode 100644 index 112e8760..00000000 --- a/changelog/+rate_limit.added.md +++ /dev/null @@ -1 +0,0 @@ -Added `github.rate_limit` for querying the API rate limit status of the profile's token diff --git a/changelog/+remove_repo_missing.fixed.md b/changelog/+remove_repo_missing.fixed.md deleted file mode 100644 index 71781531..00000000 --- a/changelog/+remove_repo_missing.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Fixed {py:func}`github.remove_repo ` raising an exception instead of returning `False` for nonexistent repositories diff --git a/changelog/+repo_present_profile.fixed.md b/changelog/+repo_present_profile.fixed.md deleted file mode 100644 index 30a3e765..00000000 --- a/changelog/+repo_present_profile.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Fixed {py:func}`github.repo_present ` not passing the configured profile when creating repositories diff --git a/changelog/+repo_present_team_add_comment.fixed.md b/changelog/+repo_present_team_add_comment.fixed.md deleted file mode 100644 index a0ab52b4..00000000 --- a/changelog/+repo_present_team_add_comment.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Fixed {py:func}`github.repo_present ` reporting a failed team *removal* when *adding* a repository to a team failed. diff --git a/changelog/+resource_type.added.md b/changelog/+resource_type.added.md deleted file mode 100644 index 462d4812..00000000 --- a/changelog/+resource_type.added.md +++ /dev/null @@ -1 +0,0 @@ -Added the {py:mod}`github ` {ref}`Salt resource type ` for Salt 3008.3+, exposing each GitHub repository as an individually targetable resource with per-repository grains and repository-implicit execution and state modules diff --git a/changelog/+ruleset_absent_delete_failure.fixed.md b/changelog/+ruleset_absent_delete_failure.fixed.md deleted file mode 100644 index 79250700..00000000 --- a/changelog/+ruleset_absent_delete_failure.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Fixed {py:func}`github.ruleset_absent ` reporting success when the ruleset could not be deleted. The module function returns a truthy error dict on failure, which was mistaken for success, and the failure result was subsequently overwritten by the "does not exist" fallback. diff --git a/changelog/+ruleset_states.fixed.md b/changelog/+ruleset_states.fixed.md deleted file mode 100644 index 1c09ac05..00000000 --- a/changelog/+ruleset_states.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Fixed {py:func}`github.ruleset_present ` drift detection, which compared server-populated fields and iterated the wrong parameter set, and made the ruleset states report forecast changes in test mode diff --git a/changelog/+scoped_modules.added.md b/changelog/+scoped_modules.added.md deleted file mode 100644 index b8a3521e..00000000 --- a/changelog/+scoped_modules.added.md +++ /dev/null @@ -1 +0,0 @@ -Added scoped {py:mod}`github_org ` and {py:mod}`github_repo ` execution and state modules, which replace the organization- and repository-related functionality of the monolithic `github` modules. Unlike the legacy functions, they raise errors instead of logging them and returning `False`. Collections with a unique natural key (repos, teams, team repos, labels, environments, Actions secrets) are returned as name-keyed mappings, id-addressed ones (issues, PRs, milestones, rulesets, deploy keys) as lists. All collection outputs can be reduced to specific fields via the `fields` argument. The new `github_org.team_present` state manages members as a simple list and drops the legacy per-team MFA enforcement options - require 2FA org-wide in the GitHub organization settings instead diff --git a/changelog/+sdb-profile-values.added.md b/changelog/+sdb-profile-values.added.md deleted file mode 100644 index 95d47896..00000000 --- a/changelog/+sdb-profile-values.added.md +++ /dev/null @@ -1 +0,0 @@ -Profile configuration values containing SDB URIs (e.g. `token: sdb://osenv/GITHUB_TOKEN`) are now rendered on access. Salt itself only renders them inside the minion/master configuration during startup, so this makes them work in pillar-sourced profiles as well. diff --git a/changelog/+single_http_stack.changed.md b/changelog/+single_http_stack.changed.md deleted file mode 100644 index 94f44823..00000000 --- a/changelog/+single_http_stack.changed.md +++ /dev/null @@ -1 +0,0 @@ -All API calls are now routed through the PyGithub client, honoring the configured {ghconf}`api_url`, authentication and retry handling uniformly diff --git a/changelog/+structured_changes.added.md b/changelog/+structured_changes.added.md deleted file mode 100644 index 0d372bac..00000000 --- a/changelog/+structured_changes.added.md +++ /dev/null @@ -1 +0,0 @@ -The new {py:mod}`github_org ` and {py:mod}`github_repo ` states report machine-readable `changes` dictionaries (`created`/`deleted`/`updated` entity names, `old`/`new` setting mappings and `*_added`/`*_removed` name lists) instead of prose diff --git a/changelog/+team_present_members.fixed.md b/changelog/+team_present_members.fixed.md deleted file mode 100644 index 63fd0532..00000000 --- a/changelog/+team_present_members.fixed.md +++ /dev/null @@ -1 +0,0 @@ -Fixed {py:func}`github.team_present ` crashing when managing team members diff --git a/changelog/+testmode_projected_changes.fixed.md b/changelog/+testmode_projected_changes.fixed.md deleted file mode 100644 index 054c69ac..00000000 --- a/changelog/+testmode_projected_changes.fixed.md +++ /dev/null @@ -1 +0,0 @@ -All states now report the projected changes in test mode, matching the changes reported on actual application. diff --git a/changelog/+tracebacks.changed.md b/changelog/+tracebacks.changed.md deleted file mode 100644 index ac16a54c..00000000 --- a/changelog/+tracebacks.changed.md +++ /dev/null @@ -1 +0,0 @@ -Exception tracebacks are only logged at debug loglevel now diff --git a/changelog/+user_info.added.md b/changelog/+user_info.added.md deleted file mode 100644 index a73a5966..00000000 --- a/changelog/+user_info.added.md +++ /dev/null @@ -1 +0,0 @@ -Added {py:func}`github_user.info ` for looking up the public profile of a user account, defaulting to the token's user and failing on organizations diff --git a/changelog/+user_keys.added.md b/changelog/+user_keys.added.md deleted file mode 100644 index 39bb36d4..00000000 --- a/changelog/+user_keys.added.md +++ /dev/null @@ -1 +0,0 @@ -Added `github_user.list_keys` for listing the verified public SSH keys of any user, defaulting to the token's user, e.g. for use with the `ssh_auth` state module diff --git a/changelog/+user_owned_repos.added.md b/changelog/+user_owned_repos.added.md deleted file mode 100644 index 2b50dbf2..00000000 --- a/changelog/+user_owned_repos.added.md +++ /dev/null @@ -1 +0,0 @@ -The new modules support repositories of any owner. Profiles take an {ghconf}`owner` (organization or user; preferred over the legacy `org_name` alias), which defaults to the token's user when unset. Repository listing and creation live on the {py:mod}`github_repo ` module ({py:func}`list ` / {py:func}`create `), and all of its functions and states as well as all functions of the (now strictly organization-scoped) {py:mod}`github_org ` module accept a per-call `owner` override, so repositories, teams, members and rulesets of foreign organizations can be managed as well. Due to GitHub API limitations, repository creation is only supported for organizations and the authenticated user, private repositories of other users are not listable, tokens without an associated user account (e.g. GitHub App installation tokens) require an explicit `owner` and teams always belong to an organization diff --git a/changelog/+utils-refactor.changed.md b/changelog/+utils-refactor.changed.md deleted file mode 100644 index 5c6fa693..00000000 --- a/changelog/+utils-refactor.changed.md +++ /dev/null @@ -1 +0,0 @@ -Refactored the GitHub API interaction layer into reusable per-entity modules below {py:mod}`saltext.github.utils.gh`. These raise {py:class}`GitHubApiError `/{py:class}`GitHubNotFoundError ` (subclasses of {py:class}`CommandExecutionError `) instead of returning error indicators. Existing execution module functions behave as before, except that unhandled API errors now surface as the above exceptions instead of raw PyGithub ones. diff --git a/changelog/+workflow_permissions.added.md b/changelog/+workflow_permissions.added.md deleted file mode 100644 index 3edd2318..00000000 --- a/changelog/+workflow_permissions.added.md +++ /dev/null @@ -1 +0,0 @@ -Added management of default workflow permissions for the `GITHUB_TOKEN` ({py:func}`github_repo.get_workflow_permissions `/{py:func}`set_workflow_permissions ` and the {py:func}`github_repo.workflow_permissions_managed ` state)