Repository navigation
[Activity] Add multiple app store app instances for the same software title - #53318
Merged
lukeheath merged 2 commits intoSep 21, 2026
Merged
Conversation
marko-lisica
requested review from
georgekarrv,
lukeheath and
sharon-fdm
as code owners
September 16, 2026 11:22
marko-lisica
temporarily deployed
to
Docker Hub
September 16, 2026 11:22 — with
GitHub Actions
Inactive
marko-lisica
temporarily deployed
to
Docker Hub
September 16, 2026 11:33 — with
GitHub Actions
Inactive
25 of 39 tasks
This was referenced Sep 21, 2026
lukeheath
approved these changes
Sep 21, 2026
Merged
5 tasks done
jkatz01
added a commit
that referenced
this pull request
Oct 2, 2026
…points, and activities (#54590) **Related issue:** Resolves #53638 Resolves #54201 # Checklist for submitter - [x] 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. - [x] If paths of existing endpoints are modified without backwards compatibility, checked the frontend/CLI for any necessary changes - The PATCH response now uses the version shape. The frontend doesn't read it. POST of an app already on the fleet now returns 409 instead of updating it. ## Testing - [x] Added/updated automated tests - [x] 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 - Exercised every endpoint against a local server, plus 120 random add, rename, edit, and delete requests with no 5xx. - Installed on a real iPhone with two versions on the title: the install carried the first-added version's configuration and counted under that version. ## AI **AI:** Claude Code (claude-opus-5-5) ## Summary (ai generated) App Store app versions over the REST API, following #53320 (REST API) and #53318 (audit log). - `GET /software/titles/:id` returns `app_store_apps`, one entry per version, first-added first, each with its own status counts, labels, categories, self-service, auto-update window, and configuration. `app_store_app` stays and holds the first-added version. Without a fleet, neither field is returned. - `POST /software/app_store_apps` accepts `name` (default "Default version") and returns the new `version_id`. A duplicate name (ignoring case) or a second macOS version returns 409, an 11th version returns 400, and names over 255 characters return 422. - `PATCH /software/titles/:id/app_store_app` accepts `version_id` (required with more than one version) and `name`, and edits only that version, including its auto-update window. The response uses the version shape from the docs. - `DELETE /software/titles/:id/available_for_install` accepts `version_id`. The display name and icon are deleted with the last version. Deleting an Android version skips the uninstall on hosts another version still covers. - The added, edited, deleted, and installed App Store app activities carry `version_name`. - Installs read the first-added version's configuration on iOS and Android until per-host precedence lands in #53639. Left for later sub-tasks: per-host version precedence, re-sending configuration on delete, and per-version auto-update in the cron (#53639), GitOps versions (#53640), UI (#53641). `version_id` on the POST response still needs documenting. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * App Store apps can now have multiple named versions per fleet, with version-specific settings and configuration. * Add, edit, and delete specific versions; omitting a version when deleting removes all versions for the title. * Software title details now include the fleet’s App Store app versions. * App Store activity records include version names. * **Bug Fixes** * Android app uninstalls preserve hosts targeted by another remaining version. * Version-specific configuration and app deletion now target the selected version. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This was referenced Oct 15, 2026
This branch was previously deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Related issue: #47904