Change self-service categories GitOps to not require dedicated key (#47439)

<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #

# Checklist for submitter

If some of the following don't apply, delete the relevant line.

- [ ] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.
    - Not needed

- [ ] Input data is properly validated, `SELECT *` is avoided, SQL
injection is prevented (using placeholders for values in statements), JS
inline code is prevented especially for url redirects, and untrusted
data interpolated into shell scripts/commands is validated against shell
metacharacters.
- [ ] Timeouts are implemented and retries are limited to avoid infinite
loops
- [ ] If paths of existing endpoints are modified without backwards
compatibility, checked the frontend/CLI for any necessary changes

## Testing

- [x] Added/updated automated tests
- [ ] Where appropriate, [automated tests simulate multiple hosts and
test for host
isolation](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/reference/patterns-backend.md#unit-testing)
(updates to one hosts's records do not affect another)

- [x] QA'd all new/changed functionality manually


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Batch software installer and app-association endpoints now return the
list of referenced self-service categories.
* Category fields support an “omit when unset” JSON behavior so omitted
vs empty categories are distinguishable.

* **Bug Fixes**
* Improved category validation (trim + case-insensitive dedupe) and
GitOps reconciliation to remove unused categories.

* **Chores**
* GitOps schema simplified: no separate top-level
self_service_categories; categories are defined inline with packages.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
Jonathan Katz
2026-06-11 16:19:11 -04:00
committed by GitHub
parent 6c342a1625
commit 89b2a5e470
26 changed files with 497 additions and 509 deletions
@@ -124,7 +124,7 @@ github.com/fleetdm/fleet/v4/server/fleet/SoftwarePackageSpec Slug *string
github.com/fleetdm/fleet/v4/server/fleet/SoftwarePackageSpec Version string
github.com/fleetdm/fleet/v4/server/fleet/SoftwarePackageSpec ReferencedYamlPath string
github.com/fleetdm/fleet/v4/server/fleet/SoftwarePackageSpec SHA256 string
github.com/fleetdm/fleet/v4/server/fleet/SoftwarePackageSpec Categories []string
github.com/fleetdm/fleet/v4/server/fleet/SoftwarePackageSpec Categories optjson.Slice[string]
github.com/fleetdm/fleet/v4/server/fleet/SoftwarePackageSpec DisplayName string
github.com/fleetdm/fleet/v4/server/fleet/SoftwarePackageSpec AlwaysDownload bool
github.com/fleetdm/fleet/v4/server/fleet/SoftwareSpec FleetMaintainedApps optjson.Slice[github.com/fleetdm/fleet/v4/server/fleet.MaintainedAppSpec]
@@ -141,7 +141,7 @@ github.com/fleetdm/fleet/v4/server/fleet/MaintainedAppSpec UninstallScript fleet
github.com/fleetdm/fleet/v4/server/fleet/MaintainedAppSpec LabelsIncludeAny []string
github.com/fleetdm/fleet/v4/server/fleet/MaintainedAppSpec LabelsExcludeAny []string
github.com/fleetdm/fleet/v4/server/fleet/MaintainedAppSpec LabelsIncludeAll []string
github.com/fleetdm/fleet/v4/server/fleet/MaintainedAppSpec Categories []string
github.com/fleetdm/fleet/v4/server/fleet/MaintainedAppSpec Categories optjson.Slice[string]
github.com/fleetdm/fleet/v4/server/fleet/MaintainedAppSpec InstallDuringSetup optjson.Bool
github.com/fleetdm/fleet/v4/server/fleet/MaintainedAppSpec Icon fleet.TeamSpecSoftwareAsset
github.com/fleetdm/fleet/v4/server/fleet/SoftwareSpec AppStoreApps optjson.Slice[github.com/fleetdm/fleet/v4/server/fleet.TeamSpecAppStoreApp]