What happens
PR #6051 (closing #6042) added opt-in Prow OWNERS-file authorization to has_repo_permission() in .github/workflows/reusable-dispatch.yml. The logic is implemented entirely as inline bash and yq calls embedded in the workflow YAML:
- Authorization decisions for OWNERS approvers/reviewers happen via string-interpolated
yq queries inside a shell function.
- Errors (malformed YAML, missing files,
yq failures) silently fall through to the GitHub collaborator-API fallback, with no structured error handling.
- The logic can't be unit-tested outside a live GitHub Actions run — it's only exercised end-to-end via godog e2e scenarios that parse real workflow logs.
authorization.owners_file is read directly from .fullsend/config.yaml via yq, bypassing the existing internal/config.LoadConfig overlay → base → code-defaults merge chain. Setting authorization.owners_file: true in a shared .fullsend/config.base.yaml preset has no effect — it only works when set in each repo's overlay config.yaml directly.
What should happen
The OWNERS-file (and, more broadly, any future non-GitHub-native) authorization logic should live in a Go package with proper types, error handling, and unit test coverage, invoked by the workflow through a CLI subcommand rather than reimplemented in bash. Whatever replaces the current bash implementation should read config through the existing internal/config.LoadConfig merge chain, so authorization.owners_file (and any future authorization config) correctly honors config.base.yaml presets.
Context
What happens
PR #6051 (closing #6042) added opt-in Prow OWNERS-file authorization to
has_repo_permission()in.github/workflows/reusable-dispatch.yml. The logic is implemented entirely as inline bash andyqcalls embedded in the workflow YAML:yqqueries inside a shell function.yqfailures) silently fall through to the GitHub collaborator-API fallback, with no structured error handling.authorization.owners_fileis read directly from.fullsend/config.yamlviayq, bypassing the existinginternal/config.LoadConfigoverlay → base → code-defaults merge chain. Settingauthorization.owners_file: truein a shared.fullsend/config.base.yamlpreset has no effect — it only works when set in each repo's overlayconfig.yamldirectly.What should happen
The OWNERS-file (and, more broadly, any future non-GitHub-native) authorization logic should live in a Go package with proper types, error handling, and unit test coverage, invoked by the workflow through a CLI subcommand rather than reimplemented in bash. Whatever replaces the current bash implementation should read config through the existing
internal/config.LoadConfigmerge chain, soauthorization.owners_file(and any future authorization config) correctly honorsconfig.base.yamlpresets.Context
fullsend authz check-permission(or similar) CLI subcommand the workflow calls instead of inline bash, noting the design needs to account for authorization checks against aNormalizedEventthat could originate from Jira as well as GitHub.config.base.yamlgap was found during review of feat(#6042): support Prow OWNERS file authorization for slash commands #6051 and folded in here since it's a direct consequence of the same bash/yq-reads-the-file-directly architecture.