Repository navigation
feat(native): sync owning team for services/functionalities and resolve kind: group fields - #25
Merged
devin-ai-integration[bot] merged 6 commits intoOct 9, 2026
Conversation
…elds Adds an owner_team built-in for services, sent as owner_group_ids, and resolves owner_team and kind: group values to team IDs by id, external_id, backstage_id or name. Co-Authored-By: Quentin Rousseau <quentin@rootly.com>
Contributor
|
I'll fix CI failures and address comments from users with write access. I'll skip comments containing "(aside)".
|
Co-Authored-By: Quentin Rousseau <quentin@rootly.com>
…ties Co-Authored-By: Quentin Rousseau <quentin@rootly.com>
Contributor
There was a problem hiding this comment.
👀 1 finding needs your review
Devin fixed 1 of 2 findings on 6cf486c. Click a finding below to jump to its comment.
For your review (1)
Fixed by Devin (1)
- Empty group mapping leaves stale membership
Co-Authored-By: Quentin Rousseau <quentin@rootly.com>
… property Co-Authored-By: Quentin Rousseau <quentin@rootly.com>
Co-Authored-By: Quentin Rousseau <quentin@rootly.com>
Contributor
|
Local runtime validation: PASS for the owner_team scope at
Limitations
|
This was referenced Oct 9, 2026
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.
Summary
This PR is the CLI half of PRF-3452. Backstage users can now map
spec.ownerstraight to the owning team of a service or functionality:owner_teambuilt-in (client.AttrOwnerTeam, gated byclient.HasOwnerTeam), for services and functionalities.owner_group_ids: [id]on/v1/{services,functionalities}/bulk_upsert.owner_group_ids, comma-joined (setOwnerTeam), so plan/diff only shows a change when the owner actually differs.owner_group_idsyet.withOwnersinjects it into the encoded body, and the request goes throughBulk*WithBodyWithResponse. Batches with no owners send the same bytes as before.owner_team, that property keeps syncing as a property. That case gets no team lookup, noowner_group_ids, and live owners aren't reported underowner_team. The check is inClient.OwnerTeamIsBuiltin/KnownAttrsWithProps.resolveTeamFields). It's called fromresolveReferenceFields, so plan, sync and explain all get it.owner_teamand anykind: groupfield are resolved to a team ID by matching the team's ID, thenexternal_id, thenbackstage_id, then name.owner_teamis dropped, so the current owners stay unchanged.kind: groupvalue is kept, so it tries to clear the live value. Today the API rejects blank values for every single-value custom property type with a 422.Depends on rootlyhq/rootly#24148 (merged; in
train-prod-2373), which makes the API acceptowner_group_idson services and functionalities bulk upsert.Tests:
TestBulkUpsertNative_{Service,Functionality}OwnerTeamandTestBulkUpsertNative_OwnerTeamCustomPropertyTest{Service,Functionality}ToLive_OwnerTeamandTestServiceToLive_OwnerTeamCustomPropertyTestKnownAttrsWithPropsTestResolveReferenceFields_{Teams,UnknownTeam,FunctionalityOwnerTeam,OwnerTeamCustomProperty,OwnerTeamIgnoredOutsideServices}Integration — native owner_team, in.github/workflows/integration.yaml. It runs on push to master and onworkflow_dispatch, and fails if any of its status checks fail.external_ids.owner_teamdiffs), and that leavingowner_teamunmapped keeps the owners.INTEGRATION_API_KEY.Link to Devin session: https://rootly.devinenterprise.com/sessions/ba7eaa797c98438bb7166d6f8a275fbd
Open in Devin Desktop: https://rootly.devinenterprise.com/desktop/session/ba7eaa797c98438bb7166d6f8a275fbd?variant=devin
Requested by: @kwent