feat(extensions): publish PR bundles - #9553
Conversation
|
Azure Pipelines: Successfully started running 17 pipeline(s). 4 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
There was a problem hiding this comment.
Pull request overview
Adds automated, unsigned PR bundles for first-party extensions, published to temporary storage with installation instructions posted on the PR.
Changes:
- Generates unique PR-specific extension versions with Pester coverage.
- Packs, uploads, and comments multi-platform extension bundles.
- Enables the workflow across existing and newly scaffolded extension pipelines.
Show a summary per file
| File | Description |
|---|---|
eng/scripts/Set-ExtensionVersionVariable.Tests.ps1 |
Tests PR and nightly version generation. |
eng/scripts/Set-ExtensionVersionVariable.ps1 |
Adds PR-specific version suffixes and overrides. |
eng/pipelines/templates/steps/update-prcomment.yml |
Posts replacement comments before deleting previous ones. |
eng/pipelines/templates/stages/release-azd-extension.yml |
Adds the internal PR publishing stage. |
eng/pipelines/templates/stages/publish-extension-pr.yml |
Builds, uploads, and announces PR bundles. |
eng/pipelines/release-ext-microsoft-azd-extensions.yml |
Enables shared PR bundle triggers. |
eng/pipelines/release-ext-microsoft-azd-demo.yml |
Enables shared PR bundle triggers. |
eng/pipelines/release-ext-microsoft-azd-concurx.yml |
Enables shared PR bundle triggers. |
eng/pipelines/release-ext-microsoft-azd-ai-builder.yml |
Enables shared PR bundle triggers. |
eng/pipelines/release-ext-azure-coding-agent.yml |
Enables shared PR bundle triggers. |
eng/pipelines/release-ext-azure-appservice.yml |
Enables shared PR bundle triggers. |
eng/pipelines/release-ext-azure-ai-training.yml |
Enables shared PR bundle triggers. |
eng/pipelines/release-ext-azure-ai-toolboxes.yml |
Enables shared PR bundle triggers. |
eng/pipelines/release-ext-azure-ai-skills.yml |
Enables shared PR bundle triggers. |
eng/pipelines/release-ext-azure-ai-routines.yml |
Enables shared PR bundle triggers. |
eng/pipelines/release-ext-azure-ai-rle.yml |
Enables shared PR bundle triggers. |
eng/pipelines/release-ext-azure-ai-projects.yml |
Enables shared PR bundle triggers. |
eng/pipelines/release-ext-azure-ai-models.yml |
Enables shared PR bundle triggers. |
eng/pipelines/release-ext-azure-ai-inspector.yml |
Enables shared PR bundle triggers. |
eng/pipelines/release-ext-azure-ai-finetune.yml |
Enables shared PR bundle triggers. |
eng/pipelines/release-ext-azure-ai-connections.yml |
Enables shared PR bundle triggers. |
eng/pipelines/release-ext-azure-ai-agents.yml |
Enables shared PR bundle triggers. |
cli/azd/extensions/microsoft.azd.extensions/internal/resources/internal/go/pipelines/release-ext.yml.tmpl |
Updates generated internal pipelines. |
cli/azd/extensions/microsoft.azd.extensions/internal/cmd/init_test.go |
Verifies generated pipeline references. |
cli/azd/docs/extensions/extension-resolution-and-versioning.md |
Documents PR bundle URLs and versioning. |
.github/workflows/cli-ci.yml |
Runs the new Pester test suite. |
Review details
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
- Files reviewed: 26/26 changed files
- Comments generated: 0
- Review effort level: Balanced
Build and publish unsigned per-PR extension bundles at stable storage URLs, then post concise install instructions on each affected pull request. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Flatten PR bundle storage by extension filename and simplify the generated install comment based on the first successful pipeline run. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: a605e7f0-007c-40e9-9e32-0fe36c10599b
8d4c25a to
0d5ecc7
Compare
azure.ai.models PR buildNote This is an unsigned development build. Install it only if you trust this PR. Install the extension: azd ext install "https://azuresdkartifacts.z5.web.core.windows.net/azd/extensions/pr/9553/azure-ai-models.zip"
|
There was a problem hiding this comment.
Review details
Suppressed comments (1)
eng/pipelines/templates/stages/publish-extension-pr.yml:23
azd-code-reviewer: Fork PRs also satisfy this condition, but thePublish_For_PRdeployment requires theAzure SDK Artifactsservice connection and the comment job requires a GitHub token; Azure Pipelines withholds these resources from fork builds by default. Those contributors will get a failed validation run instead of the normal build described in #9409. ExcludeSystem.PullRequest.IsForkhere (or explicitly skip only the credentialed jobs) so fork PRs remain buildable.
and(
succeeded(),
ne(variables['Skip.Release'], 'true'),
- Files reviewed: 25/25 changed files
- Comments generated: 0 new
- Review effort level: Balanced
| SetExecutableBit: true | ||
| AZURE_DEV_CI_OS: mac-arm64 | ||
|
|
||
| - ${{ if eq(variables['System.TeamProject'], 'internal') }}: |
There was a problem hiding this comment.
Currently gated on internal, which means the following extensions won't have the publish integration as they run in azure-sdk/public:
- azure.ai.agents
- azure.ai.finetune
- azure.coding-agents
- microsoft.azd.ai.builder
- microsoft.azd.concurx
- microsoft.azd.demo
- microsoft.azd.extensions
📋 Prioritization NoteThanks for the contribution! The linked issue isn't in the current milestone yet. |
|
Azure Pipelines: Successfully started running 17 pipeline(s). 4 pipeline(s) were filtered out due to trigger conditions. There may be pipelines that require an authorized user to comment /azp run to run. |
azure.appservice PR buildNote This is an unsigned development build. Install it only if you trust this PR. Install the extension: azd ext install "https://azuresdkartifacts.z5.web.core.windows.net/azd/extensions/pr/9553/azure-appservice.zip"
|
azure.ai.inspector PR buildNote This is an unsigned development build. Install it only if you trust this PR. Install the extension: azd ext install "https://azuresdkartifacts.z5.web.core.windows.net/azd/extensions/pr/9553/azure-ai-inspector.zip"
|
azure.ai.training PR buildNote This is an unsigned development build. Install it only if you trust this PR. Install the extension: azd ext install "https://azuresdkartifacts.z5.web.core.windows.net/azd/extensions/pr/9553/azure-ai-training.zip"
|
azure.ai.routines PR buildNote This is an unsigned development build. Install it only if you trust this PR. Install the extension: azd ext install "https://azuresdkartifacts.z5.web.core.windows.net/azd/extensions/pr/9553/azure-ai-routines.zip"
|
azure.ai.projects PR buildNote This is an unsigned development build. Install it only if you trust this PR. Install the extension: azd ext install "https://azuresdkartifacts.z5.web.core.windows.net/azd/extensions/pr/9553/azure-ai-projects.zip"
|
azure.ai.skills PR buildNote This is an unsigned development build. Install it only if you trust this PR. Install the extension: azd ext install "https://azuresdkartifacts.z5.web.core.windows.net/azd/extensions/pr/9553/azure-ai-skills.zip"
|
azure.ai.toolboxes PR buildNote This is an unsigned development build. Install it only if you trust this PR. Install the extension: azd ext install "https://azuresdkartifacts.z5.web.core.windows.net/azd/extensions/pr/9553/azure-ai-toolboxes.zip"
|
azure.ai.connections PR buildNote This is an unsigned development build. Install it only if you trust this PR. Install the extension: azd ext install "https://azuresdkartifacts.z5.web.core.windows.net/azd/extensions/pr/9553/azure-ai-connections.zip"
|
azure.ai.rle PR buildNote This is an unsigned development build. Install it only if you trust this PR. Install the extension: azd ext install "https://azuresdkartifacts.z5.web.core.windows.net/azd/extensions/pr/9553/azure-ai-rle.zip"
|
| [string] $ExtensionDirectory, | ||
| # Defaults to the pipeline-provided values so the script is unit-testable. | ||
| [string] $BuildReason = $env:BUILD_REASON, | ||
| [string] $BuildReasonOverride = $env:BUILDREASONOVERRIDE, |
There was a problem hiding this comment.
I discovered (through Richard Park (@richardpark-msft)) that you can specify the reason when queueing the build with the API... which negates much of the BuildReasonOverride logic I wrote in the other parts of the azd engsys: https://learn.microsoft.com/en-us/rest/api/azure/devops/build/builds/queue?view=azure-devops-rest-7.1#buildreason
Daniel Jurek (danieljurek)
left a comment
There was a problem hiding this comment.
This all looks reasonable to me
|
cc Chidozie Ononiwu (@chidozieononiwu) ... nothing here CFS-related |
Fixes #9409
Summary
This PR publishes an unsigned, self-contained bundle for each first-party extension PR pipeline and posts a direct install command on the pull request. It provides a safe way to share unmerged extension builds without manually transferring ZIP files or running a release pipeline that can create tags, GitHub releases, durable release artifacts, and registry updates.
PR publishing is separate from signing and official release publishing. Installing a bundle also leaves no temporary PR registry source on the tester's machine.
Publishing and storage
The flow adapts the existing core CLI PR publishing pattern: prepare a pipeline artifact, upload it through a non-production 1ES deployment, then post tagged install instructions. Extensions add a packaging job because their six platform binaries must first be combined into one bundle.
<version>-pr.<pr-number>.<build-id>, or<version>.pr.<pr-number>.<build-id>when the base is already a prerelease.azd x pack --bundle.Azure SDK Artifactsservice connection andazcopyauthentication.azuresdkartifactsstatic website$webcontainer atazd/extensions/pr/<pr-number>/<sanitized-extension-id>.zip.azcopy copy --overwrite=true, replacing only that extension's previous bundle without deleting sibling blobs.azd ext installcommand, version, and merge commit.Storage retention is managed outside this repository. The common
$web/azd/extensions/pr/prefix allows EngSys to apply a lifecycle rule per blob, such as deletion after a configured number of days since its last modification. No PR-close cleanup job or lifecycle policy is added here.This is the supported replacement needed before restricting off-main extension release publishing in #9408.
Testing