Skip to content

[Event Hubs] Add 2026-07-01-preview API version#44750

Open
mashrafsiddiquee wants to merge 6 commits into
Azure:mainfrom
mashrafsiddiquee:eventhub-2026-07-preview
Open

[Event Hubs] Add 2026-07-01-preview API version#44750
mashrafsiddiquee wants to merge 6 commits into
Azure:mainfrom
mashrafsiddiquee:eventhub-2026-07-preview

Conversation

@mashrafsiddiquee

Copy link
Copy Markdown
Contributor

Summary

  • Add the 2026-07-01-preview Event Hubs management API version based on 2026-01-01.
  • Add Fabric Shortcut CRUD, list, approve, and reject APIs from internal PR 15914488.
  • Add Dedicated cluster Upgrade Preferences get, create/update, and upgrade-now APIs from internal PR 16291983.
  • Add TypeSpec source examples, generated examples, and the generated preview OpenAPI document.

Validation

  • TypeSpec compilation completed successfully.
  • The generated OpenAPI document passed oav validate-spec.
  • All 2026-01-01 operations and schemas remain unchanged in the new preview version.

Purpose of this PR

  • New API version for an existing resource provider.

Due diligence checklist

  • I confirm this PR is modifying Azure Resource Manager (ARM) related specifications, and not data plane related specifications.
  • I have reviewed the Resource Provider guidelines, ARM resource provider contract, and REST guidelines.
  • A release plan has been created.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 14b08a3b-e248-4245-8e8f-0886ecca8df0
@github-actions

github-actions Bot commented Jul 17, 2026

Copy link
Copy Markdown

Next Steps to Merge

Next steps that must be taken to merge this PR:
  • ❌ This PR is in purview of the ARM review (label: ARMReview). This PR must get ARMSignedOff label from an ARM reviewer.
    This PR is awaiting ARM reviewer feedback (label: WaitForARMFeedback).
    To learn when this PR will get reviewed, see ARM review queue at aka.ms/azsdk/pr-arm-review
    For details of the ARM review, see aka.ms/azsdk/pr-arm-review


Comment generated by summarize-checks workflow run.

@github-actions github-actions Bot added ARMModelingAutoSignedOff ARMReview new-api-version resource-manager TypeSpec Authored with TypeSpec WaitForARMFeedback <valid label in PR review process> add this label when ARM review is required labels Jul 17, 2026
@github-actions

github-actions Bot commented Jul 17, 2026

Copy link
Copy Markdown

API Change Check

APIView identified API level changes in this PR and created the following API reviews

Language API Review for Package
Swagger Microsoft.EventHub-Eventhub
TypeSpec Microsoft.EventHub
Go sdk/resourcemanager/eventhub/armeventhub
Python azure-mgmt-eventhub
JavaScript @azure/arm-eventhub
C# Azure.ResourceManager.EventHubs
Java com.azure.resourcemanager:azure-resourcemanager-eventhubs

Comment generated by After APIView workflow run.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 14b08a3b-e248-4245-8e8f-0886ecca8df0
@mashrafsiddiquee mashrafsiddiquee added the PublishToCustomers Acknowledgement the changes will be published to Azure customers. label Jul 17, 2026
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 14b08a3b-e248-4245-8e8f-0886ecca8df0
@mashrafsiddiquee

mashrafsiddiquee commented Jul 17, 2026

Copy link
Copy Markdown
Contributor Author

Avocado suppression review requested for the five MISSING_APIS_IN_DEFAULT_TAG findings. The ipfilterrules and virtualnetworkrules child-resource routes are supported only by 2018-01-01-preview and were superseded by networkRuleSets; the legacy /sku/{sku}/regions route is not implemented for current API versions. The suppressions are scoped to the three source files and exact five paths, while the default package remains a single 2026-07-01-preview API version. Please apply Approved-Avocado if the rationale is accepted.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 14b08a3b-e248-4245-8e8f-0886ecca8df0

``` yaml
directive:
- suppress: MISSING_APIS_IN_DEFAULT_TAG

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MISSING_APIS_IN_DEFAULT_TAG

for avocado you cant suppress errors using readme file. just leave a message about the reason and we will apply an approval label for it

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Removed the MISSING_APIS_IN_DEFAULT_TAG directives in cb1352a. The PR-level comment retains the rationale for the five legacy routes so the Avocado approval label can be applied.

reason: The legacy SKU region discovery route is not implemented by the current Event Hubs SKU controller.
where: $.paths["/subscriptions/{subscriptionId}/providers/Microsoft.EventHub/sku/{sku}/regions"]

- suppress: ResourceNameRestriction

@razvanbadea-msft razvanbadea-msft Jul 17, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ResourceNameRestriction

can you have empty string as valid names?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adding detail (from the agent review): the empty-name behavior comes from NamePattern = "" in the TypeSpec — FabricShortcut.tsp line 27 and UpgradePreferences.tsp line 27. The empty pattern disables name validation, which is what forced the ResourceNameRestriction suppression. If the service enforces a name shape, setting a real NamePattern removes the suppression; if arbitrary/empty names are genuinely valid, that is worth confirming explicitly.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, empty names are not valid. In cb1352a I added a non-empty pattern for fabricShortcutName; Upgrade Preferences is the literal singleton name default. The remaining scoped suppression is only for the existing clusterName and eventHubName parent parameters, whose shipped service contracts do not enforce a regex that can be introduced only for this preview.

*/
#suppress "@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-envelope-property" "The service returns the parent namespace location in the existing ARM resource envelope."
@visibility(Lifecycle.Read)
location?: string;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

location

why it was not included in FabricShortcutProperties?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adding detail (from the agent review): location?: string on line 35 sits on the ProxyResource envelope, which required the arm-resource-invalid-envelope-property suppression on line 33. It is also the root cause of two other suppressions in readme.mdRequestSchemaForTrackedResourcesMustHaveTags and TrackedResourcePatchOperation — because the linter treats the resource as tracked-ish once location is on the envelope. Moving location into FabricShortcutProperties (as you suggested) removes all three suppressions in one change.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The backend wire model keeps this in the ARM envelope: FabricShortcutArmResourceInfo inherits ArmResourceInfo<T>, where Location is a top-level [NotUserSettable] property, while FabricShortcutArmDescription has no location property. I kept that exact read-only shape and clarified the suppression rationale in cb1352a.

/**
* The resource ID of the Log Analytics workspace.
*/
logAnalyticsResourceId?: string;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

string

you can use armResourceIdentifier with type restriction

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Adding detail (from the agent review): this is logAnalyticsResourceId?: string on line 106 — a fully-qualified ARM resource ID that should use armResourceIdentifier with a type restriction so ARM can perform RBAC linked-access checks (Section 2.4). Also worth checking premiumCapacityId on line 101: if it is an ARM resource ID it should get the same treatment; if it is a Fabric-internal (non-ARM) ID, plain string is fine.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated in cb1352a to armResourceIdentifier restricted to Microsoft.OperationalInsights/workspaces; the regenerated Swagger now emits format: arm-id and the allowed resource type.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also confirmed premiumCapacityId is a Microsoft Fabric-internal capacity identifier, not an Azure Resource Manager resource ID, so it remains a plain string. Only logAnalyticsResourceId is an ARM ID and is now type-restricted.

/**
* Properties of a Microsoft Fabric shortcut.
*/
#suppress "@azure-tools/typespec-azure-resource-manager/arm-resource-provisioning-state" "The service does not expose a provisioning state for this proxy resource."

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The service does not expos

what is the reason?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The synchronous backend contract (FabricShortcutArmDescription : ArmDescription) does not define or return provisioningState. Shortcut lifecycle is exposed through the read-only domain-specific shortcutStatus instead. I clarified this rationale in cb1352a.

/**
* Creates or updates a Microsoft Fabric shortcut.
*/
#suppress "@azure-tools/typespec-azure-resource-manager/arm-put-operation-response-codes" "The service returns 200 for both create and update."

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

200

what is the reason for this

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Fabric Shortcut PUT backend returns 200 for both create and update; the service CIT explicitly asserts HttpStatusCode.OK on create. The TypeSpec response and suppression intentionally match that deployed contract rather than advertising an unsupported 201.

/**
* Creates or updates a Microsoft Fabric shortcut.
*/
#suppress "@azure-tools/typespec-azure-resource-manager/arm-put-operation-response-codes" "The service returns 200 for both create and update."

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

200

why?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The service implementation returns 200 for Fabric Shortcut creation as well as update, and its lifecycle test asserts 200 on the initial PUT. A 201 response is not currently implemented, so the specification retains the scoped suppression.

from: openapi.json
reason: Microsoft Fabric tenant, workspace, and artifact identifiers are UUIDs by definition.
where: $.definitions["Azure.Core.uuid"].format
- suppress: TrackedResourcePatchOperation

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TrackedResourcePatchOperation

this will not be flagged once you move location in property bag. now with location added it is seen as a tracked resource

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moving location would change the JSON wire contract. The backend response type inherits ArmResourceInfo<T>, where Location is a top-level read-only envelope property; FabricShortcutArmDescription has no location property. The tracked-resource findings are therefore false positives caused by accurately modeling that existing backend shape, so the narrowly scoped suppressions must remain unless the service contract changes.

@github-actions github-actions Bot removed the WaitForARMFeedback <valid label in PR review process> add this label when ARM review is required label Jul 17, 2026
``` yaml
openapi-type: arm
tag: package-2026-01
tag: package-2026-07-preview

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[NEW] 🔴 Blocking [Section 11.2] readme.md - line 29 - Default AutoRest tag changed from stable to preview.

Classification reasoning: Introduced in this PR — the global default tag was package-2026-01 (stable) at base SHA 33edaba4 and is changed to package-2026-07-preview here.

The global default tag must point to the latest stable version; SDK consumers get the default tag by default and it must be GA. Changing it to a preview also forced the new MISSING_APIS_IN_DEFAULT_TAG suppressions below (the preview omits legacy routes the stable default carried).

Suggested fix: Restore tag: package-2026-01 as the global default and keep package-2026-07-preview as its own named tag only.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in 6036a83: the global default tag is restored to stable package-2026-01; package-2026-07-preview remains available as its named tag.

*/
#suppress "@azure-tools/typespec-azure-core/no-closed-literal-union" "The service validates the value against this fixed set and rejects unknown values."
@added(Versions.v2026_07_01_preview)
union FabricShortcutType {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[NEW] 🟠 Warning [enum-best-practices] FabricShortcut.tsp - line 124 - Closed (non-extensible) enum.

FabricShortcutType (line 124) and FabricShortcutStatus (line 141) here, plus UpgradePreferenceDayOfWeek (UpgradePreferences.tsp line 135) and ExceptionWindowAction (line 163), emit modelAsString: false via the no-closed-literal-union suppression. Extensible enums (modelAsString: true) should be used so new values can be added later without a breaking change — relevant for FabricShortcutStatus/FabricShortcutType.

Classification reasoning: New enums introduced in this PR.

Suggested fix: Remove the closed-union suppression and model these as open (extensible) unions.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These unions are intentionally closed because the backend uses closed C# enums with StringEnumConverter and rejects unknown values. Making the specification extensible would tell SDKs to accept values that the service does not accept, so the scoped suppressions preserve the actual contract.

* Creates or updates a Microsoft Fabric shortcut.
*/
#suppress "@azure-tools/typespec-azure-resource-manager/arm-put-operation-response-codes" "The service returns 200 for both create and update."
createOrUpdate is ArmResourceCreateOrReplaceSync<

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[NEW] 🟠 Warning [RPC-Put-V1-11] FabricShortcut.tsp - line 170 - PUT returns only 200, not 201 on create.

Both createOrUpdate operations (here, and UpgradePreferences.tsp line 188) use ArmResourceUpdatedResponse (200 only) and suppress PutResponseCodes. PUT must return 201 for creation and 200 for replacement so clients/SDKs can distinguish create from update.

Classification reasoning: New operations in this PR.

Suggested fix: Return ArmResourceCreatedResponse | ArmResourceUpdatedResponse (201 + 200) and drop the suppression, unless the service genuinely cannot emit 201.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The service genuinely cannot emit 201 today. Fabric Shortcut CIT asserts 200 on create, and UpgradePreferencesRequestCoordinator.PutUpgradePreferencesAsync returns HttpStatusCode.OK after persisting. The 200-only responses and scoped suppressions match the implementation.

* Deletes a Microsoft Fabric shortcut.
*/
#suppress "@azure-tools/typespec-azure-resource-manager/arm-delete-operation-response-codes" "The service returns 200 when the shortcut is deleted."
delete is ArmResourceDeleteSync<

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[NEW] 🟠 Warning [RPC-Delete-V1-01] FabricShortcut.tsp - line 188 - Sync DELETE missing 204.

delete returns 200 only and suppresses DeleteResponseCodes/DeleteOperationResponses. A synchronous DELETE must define 200 + 204 + default (204 when the resource does not exist — never 404).

Classification reasoning: New operation in this PR.

Suggested fix: Add a 204 response.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Fabric Shortcut delete implementation and CIT use 200 on successful deletion; 204 is not implemented. The specification keeps the 200-only response with narrowly scoped suppressions rather than claiming an unsupported response.

from: openapi.json
reason: Fabric shortcut deletion returns an empty 200 response on success.
where: $.paths["/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.EventHub/namespaces/{namespaceName}/eventhubs/{eventHubName}/fabricShortcuts/{fabricShortcutName}"].delete.responses
- suppress: GuidUsage

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[NEW] 🔵 Suggestion [R3017 GuidUsage] readme.md - line 331 - Over-scoped GuidUsage suppression.

The suppression targets the shared $.definitions["Azure.Core.uuid"].format, covering tenantId (FabricShortcut.tsp line 86 — acceptable, Entra-adjacent) as well as workspaceId/artifactId (lines 91/96), which are Microsoft Fabric identifiers, not Entra IDs. format: uuid on ARM control-plane is discouraged except for Entra IDs, and R3017 requires Azure API review board sign-off.

Classification reasoning: New suppression in this PR.

Suggested fix: Confirm the ARMModelingAutoSignedOff sign-off covers the non-Entra Fabric identifiers; otherwise keep workspaceId/artifactId as string.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The backend validates tenantId, workspaceId, and artifactId with Guid.TryParse, so all three are UUIDs in the service contract. The suppression is scoped to the emitted shared UUID definition and requires ARM/API review sign-off; changing the Fabric IDs to unconstrained strings would weaken the contract.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 14b08a3b-e248-4245-8e8f-0886ecca8df0
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

Copilot-Session: 14b08a3b-e248-4245-8e8f-0886ecca8df0
@github-actions github-actions Bot added the WaitForARMFeedback <valid label in PR review process> add this label when ARM review is required label Jul 17, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ARMModelingAutoSignedOff ARMReview Event Hubs new-api-version PublishToCustomers Acknowledgement the changes will be published to Azure customers. resource-manager SuppressionReviewRequired TypeSpec Authored with TypeSpec WaitForARMFeedback <valid label in PR review process> add this label when ARM review is required

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants