Repository navigation
Automate weekly team-batched extensibility backports - #12987
Draft
Marko Aleksandric (AleksandricMarko) wants to merge 13 commits into
Draft
Marko Aleksandric (AleksandricMarko) wants to merge 13 commits into
Marko Aleksandric (AleksandricMarko) wants to merge 13 commits into
Conversation
Backport eligible merged main PRs to the latest release with linked tracking issues, draft PRs and idempotent status reconciliation. Reuse the existing extensibility App with read-only preparation and opt-in scheduled publication. AB#649354 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Marko Aleksandric (AleksandricMarko)
deployed
to
triage
October 19, 2026 09:20 — with
GitHub Actions
Active
Contributor
There was a problem hiding this comment.
PSScriptAnalyzer found more than 20 potential problems in the proposed changes. Check the Files changed tab for more details.
Add ext-backporting to original main PRs once their backport outcome is durably tracked. Exclude processed sources from nightly discovery while preserving creation-intent recovery and manual duplicate checks. Clarify one backport issue/PR pair per source main PR. AB#649354 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use ext-backport-processed on original main PRs for automatic exclusion, while keeping ext-backporting on the new backport issue and PR. Preserve manual reconciliation and do not copy the source-only marker onto backport objects. AB#649354 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
Author
|
Manual publication test for #11046 completed using Marko Aleksandric (@AleksandricMarko)'s credentials, with the workflow's existing preparation and body/label templates. This was not a GitHub App-backed workflow run.
The live test exposed two integration issues to address before enabling the workflow:
No workflow code, bot-authorship checks, environment protections or scheduling settings were changed for this manual test. Future App-authored publication remains untested; personally authored tracking objects are not automatically adopted by the App-only publisher. |
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This was referenced Oct 21, 2026
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This branch was successfully 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.
What & why
Add a separate workflow for extensibility-request backports, without changing the existing per-issue or per-team implementation workflows.
mainduring the rolling last 15 days. The overlapping window allows a later run to catch work missed by a prior run.event-request,request-for-external, or both, but reject other request categories. Linked original issues retain the same category checks.Team:label and release target. Apply sources oldest first, with one provenance commit per source.repoVersionfrom the target branch's.github/AL-Go-Settings.json, exactly as Work Item Validation does.29.1meansVersion 29.1, even when29.2and later milestones are open.ext-backporting, excludingext-ready-to-implementand source-onlyext-backport-processed. The shared tracker also excludesTeam:*andOwnership:*; teams belong in the table.ext-backportingissues from Team Ownership Classification, including manual dispatch and stale event payloads. Backport PR ownership classification is unchanged.releases/<number>.xbranch by default, with an optional repository override. Existing requests retain their original target and membership.ext-backport-processedto original main PRs, after confirming their backport PR exists, and exclude those sources from future automatic selection. No temporary or versioned source labels are used; conflicts/no-ops without a PR do not receive this label.Preparation uses native Git, a read-only workflow token, and an isolated sparse checkout. Publication mints a fresh repository-scoped token using the existing extensibility GitHub App. No AI resolver, Copilot token, Azure login, or execution of source content is involved.
The tracker is a mutable milestone index, while per-request journals preserve immutable source PR/merge-SHA membership, target, milestone, outcomes and PR-publication intent. Publication checks existing open/closed objects and expected App authorship and reads back pushed refs. It never force-pushes or automatically retries a creation POST within a run. Legacy App-authored independent records remain recognizable; human-authored demonstration objects are not silently adopted.
Branch names
Single original PR 11166:
bc-extrequest-backport/backport_11166. The number is the original main PR number, not a linked issue number.SCM team batch:
bc-extrequest-backport/scm-2026-10-21. Team names are normalized to safe lowercase slugs; dates use the frozen Copenhagen discovery date.If a different backport already uses or reserves a name, select
-2,-3, and so on. A retry uses its saved branch, even after the date changes. Existing PRs, branch references and legacy records are not renamed or overwritten.Description format
Tracker title:
[Backporting][releases/29.x][Extensibility Requests][Version 29.1].Tracker table: Original issue | Original PR | Team | Backport PR, followed by italic "Auto-generated content". Multiple original issues can reference the same team backport PR; retries update/deduplicate rows without dropping earlier batches.
Team PR titles retain
[Backport 29.x] [Extensibility Requests] [Team: SCM] till 2026-10-21, using the Copenhagen discovery date and retaining it for retries.PR descriptions retain
Issues:andPRs:,Fixes #<shared-tracker>and the Important AI-generated disclaimer. Source merge hashes and journal metadata are hidden.Fixestargets the new shared Task, never the original issues. Release-branch PRs do not automatically close the shared Task.Linked work
AB#649354 - Deliverable: Automated backport of Extensibility requests.
How I validated this
7fb9b7df967deb24a213b4dd5c5017107e216860, including the expanded sparse checkout and combined engine/ownership suite.releases/29.xsuccessfully, and prepared [Extensibility Request] issue 11570: expose purchase line to mixed drop shipment event #11608 independently because its PR and original issue have different team labels.releases/29.x,Version 29.1, milestone 39. The workflow matrix round-trip retained all requests and used only 3,756 UTF-16 bytes; no publication was invoked.ext-backport-processed. These remain legacy personal test objects, not a production-created milestone tracker.No AL source is changed, so an application build or Business Central runtime test is not applicable to this workflow-only change.
Risk & compatibility
This remains a draft. Scheduled creation is opt-in: set repository variable
EXT_REQ_BACKPORT_ENABLED=trueonly after approval. This PR does not enable it or change repository/App/environment settings. Manual runs publish even when scheduled creation is disabled.Configuration reuses the
extensibility-agentenvironment,EXTENSIBILITY_CLIENT_ID, andEXTENSIBILITY_TRIAGE_APP_PRIVATE_KEY. The App installation needs Contents, Issues, and Pull requests write access to BCApps. OptionalEXT_REQ_BACKPORT_TARGET_BRANCHpins an existingreleases/<number>.x.The content boundary is regular, non-executable files under
src/, at most 250 changed paths per source. Workflow/build changes, symlinks, and unsafe paths stop before publication. BCApps permits squash merges only; sources must be single-parent commits onmain. Hooks, filters, and source content are never executed. Release CI and developer review remain mandatory; the workflow never merges backport PRs.Sources missed for more than 15 days need a manual single-PR run. Conflicts are tracked, not resolved automatically. A separate human-created conflict-resolution PR is not adopted automatically. An uncertain PR create with no discoverable corresponding object retains its journal intent and requires operator review. Uncertain Task/comment creation must also be inspected before rerunning: without temporary source labels there is no separate durable creation reservation, and object lookup cannot prove an unobserved create did not occur. Oversized complete tables/journals fail explicitly instead of truncating history or creating extra tracking issues. Missing, ambiguous or closed milestones stop publication rather than guessing a different version.
See
.github/scripts/bc-extrequest-backport/README.mdfor configuration, publishing commands, the single source label, and recovery.