[AutoPR @azure-arm-relationships]-generated-from-SDK Generation - JS-6103938#37954
[AutoPR @azure-arm-relationships]-generated-from-SDK Generation - JS-6103938#37954
Conversation
…/tspconfig.yaml', API Version: 2023-09-01-preview, SDK Release Type: beta, and CommitSHA: '843ab81f0fb6e0d22bca64e1c73ffe64d1681ca9' in SpecRepo: 'https://github.com/Azure/azure-rest-api-specs' Pipeline run: https://dev.azure.com/azure-sdk/internal/_build/results?buildId=6103938 Refer to https://eng.ms/docs/products/azure-developer-experience/develop/sdk-release/sdk-release-prerequisites to prepare for SDK release.
API Change CheckAPIView identified API level changes in this PR and created the following API reviews |
There was a problem hiding this comment.
Pull request overview
Adds a new TypeSpec-generated ARM management package @azure/arm-relationships (beta) for the Microsoft.Relationships resource provider (api-version 2023-09-01-preview), along with CI wiring, samples, API reports, and repo metadata updates needed for integration in the monorepo.
Changes:
- Introduces the new
sdk/relationships/arm-relationshipspackage (client, models, static helpers, tests, samples, API reports, and build config). - Adds service-directory CI pipeline definition for
relationships. - Updates repo-wide metadata (lockfile, link ignore list, CODEOWNERS) to include the new package.
Reviewed changes
Copilot reviewed 85 out of 86 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| sdk/relationships/ci.mgmt.yml | Adds CI pipeline for relationships |
| sdk/relationships/arm-relationships/warp.config.yml | Warp build/export configuration |
| sdk/relationships/arm-relationships/vitest.esm.config.ts | Vitest ESM config |
| sdk/relationships/arm-relationships/vitest.config.ts | Vitest base config |
| sdk/relationships/arm-relationships/vitest.browser.config.ts | Vitest browser config |
| sdk/relationships/arm-relationships/tsp-location.yaml | Tracks TypeSpec source location |
| sdk/relationships/arm-relationships/tsconfig.test.node.json | Node test TS config |
| sdk/relationships/arm-relationships/tsconfig.test.json | Test references config |
| sdk/relationships/arm-relationships/tsconfig.src.json | Source TS config |
| sdk/relationships/arm-relationships/tsconfig.snippets.json | Snippets TS config |
| sdk/relationships/arm-relationships/tsconfig.samples.json | Samples TS config |
| sdk/relationships/arm-relationships/tsconfig.json | TS project references |
| sdk/relationships/arm-relationships/tsconfig.browser.config.json | Browser typings path mapping |
| sdk/relationships/arm-relationships/test/snippets.spec.ts | Snippet source for docs |
| sdk/relationships/arm-relationships/test/public/utils/recordedClient.ts | Test-recorder helper |
| sdk/relationships/arm-relationships/test/public/sampleTest.spec.ts | Basic public test scaffold |
| sdk/relationships/arm-relationships/src/static-helpers/urlTemplate.ts | RFC6570 URL template helper |
| sdk/relationships/arm-relationships/src/static-helpers/pollingHelpers.ts | LRO poller helper |
| sdk/relationships/arm-relationships/src/static-helpers/pagingHelpers.ts | Paging iterator helper |
| sdk/relationships/arm-relationships/src/static-helpers/cloudSettingHelpers.ts | Cloud endpoint selection helper |
| sdk/relationships/arm-relationships/src/restorePollerHelpers.ts | Restore LRO poller helper |
| sdk/relationships/arm-relationships/src/relationshipsClient.ts | Public client wrapper |
| sdk/relationships/arm-relationships/src/models/models.ts | Generated models + ser/de |
| sdk/relationships/arm-relationships/src/models/index.ts | Models barrel exports |
| sdk/relationships/arm-relationships/src/logger.ts | Package logger |
| sdk/relationships/arm-relationships/src/index.ts | Package entrypoint exports |
| sdk/relationships/arm-relationships/src/classic/serviceGroupMemberRelationships/index.ts | Classic op-group wrapper |
| sdk/relationships/arm-relationships/src/classic/operations/index.ts | Classic op-group wrapper |
| sdk/relationships/arm-relationships/src/classic/index.ts | Classic barrel exports |
| sdk/relationships/arm-relationships/src/classic/dependencyOfRelationships/index.ts | Classic op-group wrapper |
| sdk/relationships/arm-relationships/src/api/serviceGroupMemberRelationships/options.ts | Options types (serviceGroupMember) |
| sdk/relationships/arm-relationships/src/api/serviceGroupMemberRelationships/operations.ts | REST ops (serviceGroupMember) |
| sdk/relationships/arm-relationships/src/api/serviceGroupMemberRelationships/index.ts | REST op-group exports |
| sdk/relationships/arm-relationships/src/api/relationshipsContext.ts | REST client context factory |
| sdk/relationships/arm-relationships/src/api/operations/options.ts | Options types (operations list) |
| sdk/relationships/arm-relationships/src/api/operations/operations.ts | REST ops (operations list) |
| sdk/relationships/arm-relationships/src/api/operations/index.ts | REST op-group exports |
| sdk/relationships/arm-relationships/src/api/index.ts | REST API barrel exports |
| sdk/relationships/arm-relationships/src/api/dependencyOfRelationships/options.ts | Options types (dependencyOf) |
| sdk/relationships/arm-relationships/src/api/dependencyOfRelationships/operations.ts | REST ops (dependencyOf) |
| sdk/relationships/arm-relationships/src/api/dependencyOfRelationships/index.ts | REST op-group exports |
| sdk/relationships/arm-relationships/samples/v1-beta/typescript/tsconfig.json | TS samples project config |
| sdk/relationships/arm-relationships/samples/v1-beta/typescript/src/serviceGroupMemberRelationshipsGetSample.ts | TS sample: get serviceGroupMember |
| sdk/relationships/arm-relationships/samples/v1-beta/typescript/src/serviceGroupMemberRelationshipsDeleteSample.ts | TS sample: delete serviceGroupMember |
| sdk/relationships/arm-relationships/samples/v1-beta/typescript/src/serviceGroupMemberRelationshipsCreateOrUpdateSample.ts | TS sample: createOrUpdate serviceGroupMember |
| sdk/relationships/arm-relationships/samples/v1-beta/typescript/src/operationsListSample.ts | TS sample: list operations |
| sdk/relationships/arm-relationships/samples/v1-beta/typescript/src/dependencyOfRelationshipsGetSample.ts | TS sample: get dependencyOf |
| sdk/relationships/arm-relationships/samples/v1-beta/typescript/src/dependencyOfRelationshipsDeleteSample.ts | TS sample: delete dependencyOf |
| sdk/relationships/arm-relationships/samples/v1-beta/typescript/src/dependencyOfRelationshipsCreateOrUpdateSample.ts | TS sample: createOrUpdate dependencyOf |
| sdk/relationships/arm-relationships/samples/v1-beta/typescript/sample.env | TS sample env template |
| sdk/relationships/arm-relationships/samples/v1-beta/typescript/README.md | TS samples README |
| sdk/relationships/arm-relationships/samples/v1-beta/typescript/package.json | TS samples package manifest |
| sdk/relationships/arm-relationships/samples/v1-beta/javascript/serviceGroupMemberRelationshipsGetSample.js | JS sample: get serviceGroupMember |
| sdk/relationships/arm-relationships/samples/v1-beta/javascript/serviceGroupMemberRelationshipsDeleteSample.js | JS sample: delete serviceGroupMember |
| sdk/relationships/arm-relationships/samples/v1-beta/javascript/serviceGroupMemberRelationshipsCreateOrUpdateSample.js | JS sample: createOrUpdate serviceGroupMember |
| sdk/relationships/arm-relationships/samples/v1-beta/javascript/sample.env | JS sample env template |
| sdk/relationships/arm-relationships/samples/v1-beta/javascript/README.md | JS samples README |
| sdk/relationships/arm-relationships/samples/v1-beta/javascript/package.json | JS samples package manifest |
| sdk/relationships/arm-relationships/samples/v1-beta/javascript/operationsListSample.js | JS sample: list operations |
| sdk/relationships/arm-relationships/samples/v1-beta/javascript/dependencyOfRelationshipsGetSample.js | JS sample: get dependencyOf |
| sdk/relationships/arm-relationships/samples/v1-beta/javascript/dependencyOfRelationshipsDeleteSample.js | JS sample: delete dependencyOf |
| sdk/relationships/arm-relationships/samples/v1-beta/javascript/dependencyOfRelationshipsCreateOrUpdateSample.js | JS sample: createOrUpdate dependencyOf |
| sdk/relationships/arm-relationships/samples-dev/serviceGroupMemberRelationshipsGetSample.ts | Dev sample: get serviceGroupMember |
| sdk/relationships/arm-relationships/samples-dev/serviceGroupMemberRelationshipsDeleteSample.ts | Dev sample: delete serviceGroupMember |
| sdk/relationships/arm-relationships/samples-dev/serviceGroupMemberRelationshipsCreateOrUpdateSample.ts | Dev sample: createOrUpdate serviceGroupMember |
| sdk/relationships/arm-relationships/samples-dev/operationsListSample.ts | Dev sample: list operations |
| sdk/relationships/arm-relationships/samples-dev/dependencyOfRelationshipsGetSample.ts | Dev sample: get dependencyOf |
| sdk/relationships/arm-relationships/samples-dev/dependencyOfRelationshipsDeleteSample.ts | Dev sample: delete dependencyOf |
| sdk/relationships/arm-relationships/samples-dev/dependencyOfRelationshipsCreateOrUpdateSample.ts | Dev sample: createOrUpdate dependencyOf |
| sdk/relationships/arm-relationships/sample.env | Package sample env template |
| sdk/relationships/arm-relationships/review/arm-relationships-node.api.md | API Extractor report (root) |
| sdk/relationships/arm-relationships/review/arm-relationships-models-node.api.md | API Extractor report (models) |
| sdk/relationships/arm-relationships/review/arm-relationships-api-serviceGroupMemberRelationships-node.api.md | API report (serviceGroupMember API) |
| sdk/relationships/arm-relationships/review/arm-relationships-api-operations-node.api.md | API report (operations API) |
| sdk/relationships/arm-relationships/review/arm-relationships-api-node.api.md | API report (api/index) |
| sdk/relationships/arm-relationships/review/arm-relationships-api-dependencyOfRelationships-node.api.md | API report (dependencyOf API) |
| sdk/relationships/arm-relationships/README.md | Package README |
| sdk/relationships/arm-relationships/package.json | Package manifest/scripts/exports |
| sdk/relationships/arm-relationships/metadata.json | Package metadata mappings |
| sdk/relationships/arm-relationships/LICENSE | License file |
| sdk/relationships/arm-relationships/eslint.config.mjs | Package eslint config |
| sdk/relationships/arm-relationships/CHANGELOG.md | Changelog entry for beta.1 |
| sdk/relationships/arm-relationships/api-extractor.json | API Extractor config |
| pnpm-lock.yaml | Adds new workspace importer |
| eng/ignore-links.txt | Ignores docs/npm links for package |
| .github/CODEOWNERS | Adds CODEOWNERS entry |
Files not reviewed (1)
- pnpm-lock.yaml: Language not supported
| if (named && varName) { | ||
| vals.push(encodeComponent(varName, reserved, op)); | ||
| if (value === "") { | ||
| if (!ifEmpty) { | ||
| vals.push(ifEmpty); | ||
| } | ||
| return !vals.join("") ? undefined : `${first}${vals.join("")}`; | ||
| } |
There was a problem hiding this comment.
In getNonExpandedValue, the if (value === "") handling uses if (!ifEmpty) { vals.push(ifEmpty); }, which is inverted. For ?/& expansions ifEmpty is "=", so the current logic omits the trailing "=" and produces ?name instead of ?name= for empty values. Flip the condition so the ifEmpty suffix is appended when it’s non-empty.
| /** | ||
| * Normalize an expanded URI by decoding percent-encoded unreserved characters. | ||
| * RFC 3986 unreserved: "-" / "." / "~" | ||
| */ | ||
| function normalizeUnreserved(uri: string): string { | ||
| return uri.replace(/%([0-9A-Fa-f]{2})/g, (match, hex) => { | ||
| const char = String.fromCharCode(parseInt(hex, 16)); | ||
| // Decode only if it's unreserved | ||
| if (/[.~-]/.test(char)) { | ||
| return char; |
There was a problem hiding this comment.
The comment above normalizeUnreserved states RFC 3986 unreserved: "-" / "." / "~", but RFC 3986 unreserved also includes alphanumerics and _. Either update the comment to reflect the full unreserved set, or clarify that this function intentionally only normalizes a subset (since encodeURIComponent won’t encode most unreserved characters anyway).
| /** | ||
| * @fixme delete is a reserved word that cannot be used as an operation name. | ||
| * Please add @clientName("clientName") or @clientName("<JS-Specific-Name>", "javascript") | ||
| * to the operation to override the generated name. | ||
| */ |
There was a problem hiding this comment.
The @fixme JSDoc block about delete being a reserved word is generator placeholder text that will surface in public docs/typings. Consider addressing this at the TypeSpec level (e.g., @clientName) so the generated SDK doesn’t ship with @fixme comments.
| /** | ||
| * @fixme delete is a reserved word that cannot be used as an operation name. | ||
| * Please add @clientName("clientName") or @clientName("<JS-Specific-Name>", "javascript") | ||
| * to the operation to override the generated name. | ||
| */ |
There was a problem hiding this comment.
The operation JSDoc includes an @fixme block about delete being reserved. This placeholder text will appear in generated docs and API reports. Prefer resolving naming via TypeSpec (@clientName) so the generated SDK doesn’t ship with @fixme comments.
| /** | ||
| * @fixme delete is a reserved word that cannot be used as an operation name. | ||
| * Please add @clientName("clientName") or @clientName("<JS-Specific-Name>", "javascript") | ||
| * to the operation to override the generated name. | ||
| */ |
There was a problem hiding this comment.
The @fixme JSDoc block about delete being a reserved word is generator placeholder text that will surface in public docs/typings. Consider addressing this at the TypeSpec level (e.g., @clientName) so the generated SDK doesn’t ship with @fixme comments.
| /** | ||
| * @fixme delete is a reserved word that cannot be used as an operation name. | ||
| * Please add @clientName("clientName") or @clientName("<JS-Specific-Name>", "javascript") | ||
| * to the operation to override the generated name. | ||
| */ |
There was a problem hiding this comment.
The operation JSDoc includes an @fixme block about delete being reserved. This placeholder text will appear in generated docs and API reports. Prefer resolving naming via TypeSpec (@clientName) so the generated SDK doesn’t ship with @fixme comments.
Next Steps to MergeOnly failed checks and required actions are listed below.
|
There was a problem hiding this comment.
1 spec issue found (advisory). The overall API surface for this first release of @azure/arm-relationships@1.0.0-beta.1 looks clean: version consistency checks pass, no _N/AutoGenerated/_ naming issues, correct beta versioning for the preview API 2023-09-01-preview, and all public symbols are properly exported. The only finding is that both delete operations use a JavaScript reserved keyword as the method name — the generation tool itself flags these with @fixme comments. This should be fixed in the spec with @clientName.
📊 Structured Report
{"agent":"mgmt-reviewer","pr":37954,"summary":"issues_found","findings":[{"file":"sdk/relationships/arm-relationships/review/arm-relationships-node.api.md","line":80,"issueType":"design","category":"naming","description":"DependencyOfRelationshipsOperations.delete uses reserved keyword 'delete'; generator emits `@fixme`; internal submodule uses $delete workaround. Fix: add `@clientName` in client.tsp."},{"file":"sdk/relationships/arm-relationships/review/arm-relationships-node.api.md","line":287,"issueType":"design","category":"naming","description":"ServiceGroupMemberRelationshipsOperations.delete uses reserved keyword 'delete'; same fix needed."}]}⚡ Benchmarked by Management Release Assistant
| // @public | ||
| export interface ServiceGroupMemberRelationshipsOperations { | ||
| createOrUpdate: (resourceUri: string, name: string, resource: ServiceGroupMemberRelationshipCreateOrUpdate, options?: ServiceGroupMemberRelationshipsCreateOrUpdateOptionalParams) => PollerLike<OperationState<ServiceGroupMemberRelationship>, ServiceGroupMemberRelationship>; | ||
| delete: (resourceUri: string, name: string, options?: ServiceGroupMemberRelationshipsDeleteOptionalParams) => PollerLike<OperationState<void>, void>; |
There was a problem hiding this comment.
🔵 Spec Issue — ServiceGroupMemberRelationshipsOperations.delete
Same issue as in DependencyOfRelationshipsOperations: delete is a JavaScript reserved keyword. The generation tool flags this in src/classic/serviceGroupMemberRelationships/index.ts, and $delete is used internally.
Fix: Apply the same @clientName decorator in client.tsp to rename this delete operation before regenerating.
| // @public | ||
| export interface DependencyOfRelationshipsOperations { | ||
| createOrUpdate: (resourceUri: string, name: string, resource: DependencyOfRelationshipCreateOrUpdate, options?: DependencyOfRelationshipsCreateOrUpdateOptionalParams) => PollerLike<OperationState<DependencyOfRelationship>, DependencyOfRelationship>; | ||
| delete: (resourceUri: string, name: string, options?: DependencyOfRelationshipsDeleteOptionalParams) => PollerLike<OperationState<void>, void>; |
There was a problem hiding this comment.
🔵 Spec Issue — DependencyOfRelationshipsOperations.delete
delete: (resourceUri: string, name: string, options?: ...) => PollerLike<...>.
The operation name delete is a JavaScript reserved keyword. The generation tool itself flags this with a @fixme comment in src/classic/dependencyOfRelationships/index.ts, and the internal submodule function is named $delete as a workaround.
Fix: In the spec's client.tsp, add a @clientName decorator to rename both delete operations (here and in ServiceGroupMemberRelationshipsOperations) to a non-reserved name (e.g., @clientName("remove", "javascript")), then trigger SDK regeneration.
Configurations: 'specification/relationships/Relationships.Management/tspconfig.yaml', API Version: 2023-09-01-preview, SDK Release Type: beta, and CommitSHA: '843ab81f0fb6e0d22bca64e1c73ffe64d1681ca9' in SpecRepo: 'https://github.com/Azure/azure-rest-api-specs' Pipeline run: https://dev.azure.com/azure-sdk/internal/_build/results?buildId=6103938 Refer to https://eng.ms/docs/products/azure-developer-experience/develop/sdk-release/sdk-release-prerequisites to prepare for SDK release. Release plan link: https://web.powerapps.com/apps/821ab569-ae60-420d-8264-d7b5d5ef734c?release-plan-id=3d3b63e5-bc2c-f111-88b4-000d3a597585 Submitted by: meghanagupta@microsoft.com
Release Plan Details
Spec pull request: Simplify all specs to omit
@useDependencyfor Azure Core and Arm librairies azure-rest-api-specs#37016Spec API version: 2023-09-01-preview