Tags: Azure/azure-dev
Tags
Byow command aliasing (#8095) * adding more enhancements * releasing v04 preview * updating snapshot * Promote custom model commands to top-level and add new flags - Add top-level azd ai models create/list/show/delete commands - Deprecate 'custom' subgroup with warning message - Add --weight-type flag to create command (default: FullWeight) - Add --source-job-id filter to list command for training job lineage - Make --publisher optional (only sent when explicitly provided) - Send pendingUploadType in startPendingUpload request body - Add new response fields: weightType, baseModel, source, artifactProfile, provisioningState - Display new fields in show command output - Update extension.yaml to 0.0.6-preview with updated examples - Update CHANGELOG.md Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix PollOperation auth: use ai.azure.com scope instead of ml.azure.com The ml.azure.com scope fails with AzureDeveloperCLICredential due to first-party app consent issues. The api.azureml.ms operations endpoint accepts the same ai.azure.com token used by the rest of the client. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add model update command with description and tag support Add 'azd ai models update' command that uses PATCH with JSON Merge Patch (RFC 7396) to update model description and tags: - --description: set/update the model description - --set-tag key=value: upsert tags (repeatable) - --remove-tag key: remove tags (repeatable) Also adds UpdateModel method to FoundryClient using Content-Type: application/merge-patch+json. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address PR review: fix deprecated refs, typed errors, tests, cleanup - Update user-facing messages to use top-level commands (azd ai models *) instead of deprecated custom subgroup in code and docs - Fix malformed URI when --base-model is empty (skip DerivedModelInformation) - Replace fragile string-based error detection with typed client.APIError and errors.As status code checking - Handle non-numeric versions in show command's latest-version selection - Preserve existing PreRunE hooks in top-level command setup - Use Flags() instead of PersistentFlags() for leaf commands - Remove unused ARMTokenScope and MLTokenScope constants - Add unit tests for URI utilities and APIError type Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix cspell: replace 'upserts' with 'adds or updates' Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Fix gofmt: remove trailing whitespace in const block Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fixing version --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
chore: upgrade Copilot SDK to v0.3.0 and CLI to v1.0.36-0 (#8114) * Migrate event system to Copilot SDK v0.3.0 typed events Update all event handler code and tests to use the new SDK v0.3.0 event type constants (SessionEventType* prefix) and typed event data structs (replacing the flat copilot.Data struct with per-event types like AssistantMessageData, AssistantUsageData, etc.). Key changes: - Rename event constants: copilot.AssistantMessage -> copilot.SessionEventTypeAssistantMessage, etc. - Replace event.Data.Field access with type assertions: event.Data.(*copilot.XxxData) - Remove AssistantStreamingDelta case (SDK v0.3.0 only has TotalResponseSizeBytes, no phase/deltaContent) - Update SessionShutdown handler: TotalPremiumRequests is now a plain float64 - Update ToolExecutionComplete error handling: simplified Error struct - Guard Model assignment against empty string (now plain string, not *string) - Update PermissionRequestKind constants in types_test.go - Remove unused derefStr helper Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore: upgrade copilot SDK to v0.3.0 and CLI to v1.0.36-0 Upgrade github.com/github/copilot-sdk/go from v0.1.32 to v0.3.0 and update the bundled CLI version from 1.0.2 to 1.0.36-0. Breaking changes addressed: - MCPServerConfig changed from map[string]any to a typed interface with MCPStdioServerConfig and MCPHTTPServerConfig structs - PermissionRequestKind constants renamed (e.g. MCP -> PermissionRequestKindMcp) - PermissionRequestResult Kind field now uses typed constants - CLI version regex in tests updated to allow prerelease suffixes This addresses issue #8108 where azd init Copilot Preview silently falls back from claude-opus-4.7 to claude-opus-4.6 due to the older SDK/CLI version not fully supporting newer models. Fixes #8108 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore: apply preflight auto-fixes (formatting, spelling) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: address PR review feedback - Require type assertion success in E2E test to prevent silent pass - Broaden CLI version regex to support full SemVer prerelease identifiers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: use Rejected result kind for explicit denials Update permission result kind mappings: - User skip (ErrToolExecutionSkipped): UserNotAvailable -> Rejected (user was consulted and actively chose to skip) - Rules deny (pre-check denial): UserNotAvailable -> Rejected (definitive policy denial, not transient unavailability) This ensures the Copilot service correctly treats these as final denials rather than retryable unavailability scenarios. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
chore: upgrade Copilot SDK to v0.3.0 and CLI to v1.0.36-0 (#8114) * Migrate event system to Copilot SDK v0.3.0 typed events Update all event handler code and tests to use the new SDK v0.3.0 event type constants (SessionEventType* prefix) and typed event data structs (replacing the flat copilot.Data struct with per-event types like AssistantMessageData, AssistantUsageData, etc.). Key changes: - Rename event constants: copilot.AssistantMessage -> copilot.SessionEventTypeAssistantMessage, etc. - Replace event.Data.Field access with type assertions: event.Data.(*copilot.XxxData) - Remove AssistantStreamingDelta case (SDK v0.3.0 only has TotalResponseSizeBytes, no phase/deltaContent) - Update SessionShutdown handler: TotalPremiumRequests is now a plain float64 - Update ToolExecutionComplete error handling: simplified Error struct - Guard Model assignment against empty string (now plain string, not *string) - Update PermissionRequestKind constants in types_test.go - Remove unused derefStr helper Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore: upgrade copilot SDK to v0.3.0 and CLI to v1.0.36-0 Upgrade github.com/github/copilot-sdk/go from v0.1.32 to v0.3.0 and update the bundled CLI version from 1.0.2 to 1.0.36-0. Breaking changes addressed: - MCPServerConfig changed from map[string]any to a typed interface with MCPStdioServerConfig and MCPHTTPServerConfig structs - PermissionRequestKind constants renamed (e.g. MCP -> PermissionRequestKindMcp) - PermissionRequestResult Kind field now uses typed constants - CLI version regex in tests updated to allow prerelease suffixes This addresses issue #8108 where azd init Copilot Preview silently falls back from claude-opus-4.7 to claude-opus-4.6 due to the older SDK/CLI version not fully supporting newer models. Fixes #8108 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * chore: apply preflight auto-fixes (formatting, spelling) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: address PR review feedback - Require type assertion success in E2E test to prevent silent pass - Broaden CLI version regex to support full SemVer prerelease identifiers Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: use Rejected result kind for explicit denials Update permission result kind mappings: - User skip (ErrToolExecutionSkipped): UserNotAvailable -> Rejected (user was consulted and actively chose to skip) - Rules deny (pre-check denial): UserNotAvailable -> Rejected (definitive policy denial, not transient unavailability) This ensures the Copilot service correctly treats these as final denials rather than retryable unavailability scenarios. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Prepare azure.ai.agents 0.1.31-preview patch release metadata (#8098) * Initial plan * Prepare azure.ai.agents 0.1.31-preview patch release Agent-Logs-Url: https://github.com/Azure/azure-dev/sessions/4e0c6f73-f12f-4fb1-9f16-28a8dcad9e06 Co-authored-by: trangevi <26490000+trangevi@users.noreply.github.com> * Changelog update Signed-off-by: trangevi <trangevi@microsoft.com> --------- Signed-off-by: trangevi <trangevi@microsoft.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: trangevi <26490000+trangevi@users.noreply.github.com> Co-authored-by: trangevi <trangevi@microsoft.com>
Prepare azure.ai.agents 0.1.30-preview patch release (#8082) * Initial plan * Prepare azure.ai.agents 0.1.30-preview patch release Agent-Logs-Url: https://github.com/Azure/azure-dev/sessions/0e96dbbe-7b0e-41b7-9d81-278cd7d6807f Co-authored-by: trangevi <26490000+trangevi@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: trangevi <26490000+trangevi@users.noreply.github.com>
feat(provision): prompt to cancel Azure deployment on Ctrl+C (Bicep) (#… …7795) * feat(provision): prompt to cancel Azure deployment on Ctrl+C (Bicep) When a user presses Ctrl+C during 'azd provision' or 'azd up' while a Bicep deployment is in flight on Azure, azd now pauses and asks whether to leave the Azure deployment running (default) or to cancel it via the ARM Cancel API and wait for a terminal state. - pkg/input: register-able interrupt handler stack with re-entrant Ctrl+C suppression while a handler is running. - pkg/azapi + pkg/infra: Cancel methods on DeploymentService / Deployment for both subscription- and resource-group-scoped deployments. Deployment Stacks return 'not supported' (no Cancel API surface today). - pkg/infra/provisioning: typed sentinel errors for the 4 outcomes (leave running / canceled / cancel timed out / cancel too late) plus telemetry attribute provision.cancellation. - pkg/infra/provisioning/bicep: interactive prompt + cancel-and-poll flow with 30s cancel-request timeout and 2-min terminal-state wait. - cmd/middleware + internal/cmd: bypass agent troubleshooting and map sentinels to telemetry codes. - docs/provision-cancellation.md: user-facing behavior, outcomes, provider scope, telemetry, and non-interactive fallback. Terraform and Deployment Stacks are out of scope and unchanged. Closes #2810 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: address Copilot review feedback (iteration 1) - pkg/input: LIFO test now invokes handlers and asserts distinct call counts to prove ordering. - pkg/infra/provisioning: add ErrDeploymentCancelFailed sentinel so the cancel-request-failure path no longer misclassifies as a timeout; wire it through error middleware skip-list and telemetry mapping. - pkg/infra: switch new TestScopeCancel subtests to t.Context(). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: address Copilot review feedback (iteration 2) - pkg/azapi: add typed ErrCancelNotSupported sentinel; stack CancelSubscriptionDeployment / CancelResourceGroupDeployment now return it instead of an opaque string. - pkg/infra/provisioning/bicep: interrupt handler treats ErrCancelNotSupported as the safer 'leave running' outcome (matches documented stacks behavior + telemetry). Cancel-request error path routes through terminalToOutcome when the deployment is already in a terminal state, so the portal URL and consistent messaging are surfaced. Canceled terminal branch now prints the portal URL too. - pkg/infra/provisioning: ErrDeploymentCancelFailed doc comment now references errors.Is/errors.As (matches the multi-%w joined-error wrapping pattern used here). - pkg/infra/provisioning/bicep/bicep_provider: tear down the interrupt handler immediately after deployModule returns (sync.OnceFunc) to avoid a small window where a late Ctrl+C could surface the prompt over post-processing output. - internal/cmd/errors: map ErrCancelNotSupported in classifySentinel. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: close interrupt-vs-natural-completion race (iteration 3) If Ctrl+C arrives but the ARM deployment happens to finish naturally before the user picks an option in the prompt, the previous design could take the success path and silently drop the interrupt. - installDeploymentInterruptHandler now exposes a 'started' channel that is closed the instant Ctrl+C is received, before the prompt is shown. deployCtx is also cancelled immediately so PollUntilDone unblocks ASAP. - BicepProvider.Deploy block-receives the outcome whenever 'started' is closed (instead of a non-blocking drain), so the user's choice is always honored regardless of who wins the race. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: re-entrant Ctrl+C suppression hardening (iteration 4) - pkg/input/console: watchTerminalInterrupt now reserves the running slot before consulting the handler stack so re-entrant Ctrl+C is suppressed even if the stack is briefly empty (e.g. handler popped but still executing the prompt). - pkg/infra/provisioning/bicep/bicep_provider: defer cleanup until after the interrupt outcome is received so a second Ctrl+C during the prompt is still suppressed; the no-interrupt path tears down immediately as before. - pkg/infra/provisioning/cancel: doc reads 'sentinel errors' instead of 'typed errors' to match the implementation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: address Copilot review feedback (iteration 5) - pkg/input/interrupt: enforce strict LIFO when popping handlers (only pop when this handler is still top-of-stack), so out-of-order pops never accidentally remove unrelated newer handlers. - pkg/infra/provisioning/bicep/interrupt: defensive default in terminalToOutcome now stops the spinner and emits a warning with the observed state and portal URL, leaving the UI clean if an unexpected terminal state is ever observed. - pkg/infra/provisioning/bicep/interrupt: treat DeploymentProvisioningStateDeleted as terminal in the cancel poll so we don't keep polling until the deadline if the deployment is deleted out from under us. Test updated accordingly. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: address Copilot review feedback (iteration 6) - pkg/infra/provisioning/bicep/interrupt: wrap the interrupt handler closure with sync.OnceValue so close(started), cancelDeploy() and the outcome channel send all run at most once. Combined with the in-flight guard from tryStartInterruptHandler and the strict LIFO pop, additional Ctrl+C signals after the prompt completes can no longer panic or block on the buffered channel. - pkg/infra/provisioning/bicep/interrupt: print the portal URL on the prompt-failure leave-running path so the user always has a link to follow up when the URL is available. - docs/provision-cancellation: clarify that the portal URL is printed when available (not 'in every case'). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: address Copilot review feedback (iteration 7) - pkg/input/interrupt: nil out the popped slot before truncating the interrupt stack so the GC can reclaim the popped handler and any state it captured, even before the underlying array is reallocated. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: address Copilot review feedback (iteration 8) - pkg/input/console: run the registered interrupt handler inline on the signal goroutine instead of in a nested goroutine. This removes the scheduling window where SIGINT was received but the handler had not yet run, which could let a deploy goroutine complete naturally and silently drop the Ctrl+C. Re-entrant signals remain suppressed via tryStartInterruptHandler. - pkg/infra/provisioning/bicep/interrupt: switch the cancel poll loop to a time.Ticker and move the wait before each Get, so a slow Get cannot produce back-to-back ARM polls (preventing throttling). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: address review findings from wbreza and jongio on PR #7795 Fixes from wbreza's review: - H1/N1: Race between deploy-success and interrupt handler — replaced select-based check with atomic CAS state machine (deployStateRunning → deployStateInterrupting or deployStateCompleted) so the handler and Deploy goroutine never conflict. - H2: Panic in interrupt handler — added recover() with stack trace logging in watchTerminalInterrupt so a handler panic doesn't leave the process unkillable. - H3: Second Ctrl+C force-exit — added forceExitPending counter in interrupt.go; second suppressed Ctrl+C while a handler is running triggers os.Exit(130) matching POSIX convention (kubectl, terraform). - M13: terminalToOutcome now a BicepProvider method with ctx as first parameter per AGENTS.md convention. - L7: Spelling consistency — 'Cancelling' → 'Canceling' to match ARM API and codebase convention. - L8: Removed stray blank line in cmd/middleware/error.go. Fixes from jongio's review: - N1: Same race fix as H1 above (CAS state machine). - N2: Panic recovery (defense-in-depth per Jon's suggestion). - N3: Test cleanup — added t.Cleanup() for PushInterruptHandler pops and finishInterruptHandler to prevent global state leaks on assertion failure. Fixes from Copilot bot review: - Unbounded Get call in cancel-request error path — added context.WithTimeout wrapper (30s). - DeploymentUrl fetch in prompt — added timeout to prevent indefinite blocking on slow/unreachable ARM. - Deleted state mismatch — added explicit case in terminalToOutcome for DeploymentProvisioningStateDeleted. - Test cleanup in interrupt_test.go (same as N3 above). New tests: - TestForceExitCounter: validates force-exit on 2nd suppressed Ctrl+C. - TestForceExitCounter_ResetsOnNewHandler: ensures counter resets between handler lifecycles. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test(bicep): add unit tests for interrupt prompt/cancel/install flow Addresses follow-up review feedback from @wbreza on PR #7795: - Adds targeted unit tests for runInterruptPrompt, cancelAndAwaitTerminal, and installDeploymentInterruptHandler using a programmable fake infra.Deployment and the existing MockConsole. Tests cover the leave-running, cancel, prompt-failure, URL-fetch-failure, cancel-not-supported, cancel-failed-with-fallback-Get, polled-canceled, and poll-timeout paths, plus the markCompleted/interrupt CAS race. - Promotes cancelRequestTimeout, cancelTerminalTimeout, and cancelPollInterval from const to package-level var so unit tests can shrink them to keep the suite sub-second. - Logs the post-cancel Get error when the cancel API itself failed and the fallback Get also fails (it was previously silently dropped, hurting production diagnosability). - Exposes input.SnapshotInterruptStack as a test-only helper so cross-package tests can invoke the registered handler without installing the OS signal pipeline. Refs: #7933 (follow-up for replacing the process-global interrupt state with an injectable InterruptBroker). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * perf(bicep): issue first cancel-poll Get immediately Previously cancelAndAwaitTerminal entered a ticker-driven loop that waited cancelPollInterval (5s in production) BEFORE every Get, including the first one issued right after the cancel API succeeded. For deployments that Azure transitions to Canceled quickly (e.g. deployments that just started), the user saw a needless ~5s pause before azd reported the cancellation. Fix: do an immediate Get right after the cancel request returns; only the subsequent retries are ticker-spaced. This preserves the original 'no back-to-back Gets' guarantee for the slow path while removing the unnecessary delay on the fast path. Adds TestCancelAndAwaitTerminal_FirstGetIsImmediate which sets cancelPollInterval to a deliberately large value and asserts the call returns in well under a poll interval when the first Get already returns Canceled. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feat(bicep): wait for nested deployments after cancel + URL formatting Addresses review comments on PR #7795: - #5/#6: Wrap portal URLs in output.WithLinkFormat across all user-facing emission sites; extract printLeaveRunningMessage helper to deduplicate the leave-running prompt body. - #7: After the top-level deployment reaches Canceled, walk the operations tree to discover descendant (nested) deployments, best-effort cancel any that are still non-terminal, and wait for them to reach a terminal state. The whole interrupt flow now lives under a single 5-minute global budget (previously 2-minute terminal timeout). If one or more nested deployments remain non-terminal at budget exhaustion, azd surfaces them by name with portal links and records a new 'cancel_timed_out_nested' telemetry value (still ErrDeploymentCancelTimeout). - #9: Fix misleading 'second Ctrl+C is treated as a force-exit' comment in console.go — the second additional press arms the force-exit latch (and is suppressed); the next press triggers exit. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * ux(bicep): clearer interrupt copy + per-state telemetry split Addresses customer-experience review on PR #7795 (kristenwomack): - R1/R11 Branch terminalToOutcome by state. Succeeded is reframed as a *success* ("completed successfully before cancellation took effect — your resources are deployed") so users who Ctrl+C suspecting a hang aren't told their successful deployment was a 'too-late' failure. Failed/Deleted get distinct copy. Telemetry value split into cancel_raced_succeeded / _failed / _deleted; cancel_too_late kept as the fallback for unexpected terminal states. - R2 Non-interactive prompt fallback now always emits a breadcrumb (portal URL when available, otherwise 'find it under Subscription → Deployments') plus the az-deployment-cancel hint, so CI runs can't silently leak abandoned Azure deployments. - R3 Prompt title is now active and names the cause: 'You pressed Ctrl+C. An Azure deployment is still running — what do you want to do?'. - R4 Prompt help text and leave-running message no longer drop the pointer when the URL fetch fails — they degrade to a portal-search hint that includes the deployment name. - R9 Replace the leaking Go duration in the cancel-timeout message ('within 5m0s') with prose ('within 5 minutes'). Title updated to 'Azure is still canceling — azd will exit'. - R10 Cancel-failed copy reframed: 'Couldn't cancel — Azure deployment is still running. The cancel request was rejected by Azure. The deployment will continue.' - R15 'Deployment was deleted' message now explains it's unusual and suggests checking audit logs. - R16 Leave-running path always prints the 'az deployment sub|group cancel --name <n>' hint so users have a copy-pasteable next step. Docs (provision-cancellation.md) and the ProvisionCancellationKey field comment updated to describe the new telemetry values. R5 (option ordering), R6 (5-min wait UX), R7 (discoverability), R8 (docs site), R12 (skip prompt for Stacks), R13 (a11y), R14 (color/WCAG) are tracked in a follow-up issue. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Unify host gRPC error transport with a structured ActionableErrorDeta… …il (#7919) * Unify host gRPC error transport with structured ActionableErrorDetail Replace the ad-hoc "<err>\n<suggestion>" concatenation in the host gRPC error path with a structured proto detail, and consolidate the helpers that serialize/deserialize host errors so suggestion and links travel as typed data instead of being parsed out of the message string. - Add ActionableErrorDetail { suggestion, links } proto (host -> extension) - Rename wrapErrorWithSuggestion -> mapHostError; statusMessage no longer concatenates the suggestion into status.Message - Remove duplicated grpcStatusFromError / wrapErrorLinks helpers in internal/grpcserver in favor of exported azdext counterparts - Factor WrapError through populateExtensionErrorFromStatus; drop the extErr.Message == err.Error() heuristic - Extend ErrorSuggestion / ErrorMessage / ErrorLinks to read host-attached ActionableErrorDetail so links survive the wire Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address feedback --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
TME test config, mage record command, and re-recorded PreflightQuota … …cassettes (#7779) * Support azd config defaults.test.* keys for functional test config Update cliConfig.init() resolution order to check test-specific azd config keys (defaults.test.subscription, defaults.test.tenant, defaults.test.location) before falling back to general defaults (defaults.subscription, defaults.location). This enables a one-time setup for developers: azd config set defaults.test.subscription <TME-SUB-ID> azd config set defaults.test.tenant <TME-TENANT-ID> azd config set defaults.test.location eastus2 No more manual env var exports per session. Fixes #7777 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: add mage record and defaults.test.* config documentation Update CONTRIBUTING.md, AGENTS.md, recording guide, and environment variables docs to document the new mage record command and defaults.test.* azd config keys for test subscription configuration. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * exclude stale recordings from preflight playback VsServer, Deploy_SlotDeployment, and Up_Down_ContainerAppJob recordings are stale and require TME subscription access to re-record. Exclude them from automatic playback so preflight passes for contributors without TME access. Tracked in #7780 and #7014. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * revert: restore original PreflightQuota recordings The cassettes I re-recorded in 519138c used my personal subscription ID (25fd0362-...) instead of the TME subscription (4d042dc6-...) that CI expects. This caused 'requested interaction not found' errors on all 3 build platforms because azd in CI generates URLs with the TME sub but the cassette URLs use my personal sub. Reverting these 6 cassettes back to the originals from fe57152 (which were recorded against TME and worked in CI). Note: re-recording these requires TME subscription access (see #7780). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * address review feedback: simplify mage record, clarify maintainer workflow - magefile.go: remove manual go build; delegate to azdcli.NewCLI's buildRecordOnce (addresses weikanglim feedback) - AGENTS.md / CONTRIBUTING.md / recording-functional-tests-guide.md: clarify re-recording is a core-maintainer workflow; any subscription works Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: address Copilot PR review feedback - magefile.go: only apply excludedPlaybackTests in playback mode so `mage record -filter=<name>` can re-record stale tests (the whole point of excluding them was to enable re-recording) - magefile.go: include opts.mode in 'no tests match filter' message - cli_test.go: clarify config fallbacks only apply when CI is unset - environment-variables.md: note AZD_TEST_TENANT_ID has no defaults.tenant global fallback; clarify CI-gating - recording-functional-tests-guide.md: same doc clarifications Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Re-record PreflightQuota cassettes against TME subscription All 6 preflight quota tests re-recorded and verified in both record and playback modes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix: address wbreza review feedback - Extract configFallback helper in cli_test.go to remove DRY violation across subscription/tenant/location config lookups - Add opts.mode validation in runFunctionalTests to make the record/playback contract explicit Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Rajesh Kamal <rajeshkamal@microsoft.com>
PreviousNext