Azure / Azure/apiops

[BUG] graphql update schema operations are not working

オープン
#693 コメント 3 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
C#
スター
448
フォーク
247
PR マージ指標
30日以内にマージされた PR はありません

説明

### Release version

v6.0.1.1

### Describe the bug

When you update the graphql schema and run the extractor, it will only generate the specification.json file as a change. But publisher will fail because tool expects apiInformation.json file is also needed to make it work. please find below error.

`crit: Publisher[0]
System.InvalidOperationException: API **** has an empty JSON object.
at **publisher.Api.GetApiJson(ApiName apiName, ApiInformationFile apiInformationFile, ApiSpecificationFile specificationFile, JsonObject** configurationApiJson, CancellationToken cancellationToken)
at publisher.Api.PutApi(ApiName apiName, ApiInformationFile apiInformationFile, ApiSpecificationFile specificationFile, JsonObject configurationApiJson, ServiceUri serviceUri, PutRestResource putRestResource, ILogger logger, CancellationToken cancellationToken)
at publisher.Api.<>c__DisplayClass23_0.<b__4>d.MoveNext()
--- End of stack trace from previous location ---
at System.Threading.Tasks.Parallel.<>c__50`1.<b__50_0>d.MoveNext()
--- End of stack trace from previous location ---
at common.IEnumerableExtensions.ForEachParallel[T](IEnumerable`1 enumerable, Func`2 action, CancellationToken cancellationToken)
at publisher.Api.ProcessArtifactsToPut(IReadOnlyCollection`1 files, JsonObject configurationJson, ServiceDirectory serviceDirectory, ServiceUri serviceUri, PutRestResource putRestResource, ILogger logger, CancellationToken cancellationToken)
at publisher.Service.ProcessArtifactsToPut(IReadOnlyCollection`1 files, JsonObject configurationJson, ServiceDirectory serviceDirectory, ServiceUri serviceUri, ListRestResources listRestResources, PutRestResource putRestResource, DeleteRestResource deleteRestResource, ILogger logger, CancellationToken cancellationToken)
at publisher.Publisher.ProcessCommitIdFilesToPut(IReadOnlyCollection`1 commitIdFilesToPut, CancellationToken cancellationToken)
at publisher.Publisher.RunWithCommitId(CommitId commitId, CancellationToken cancellationToken)
at publisher.Publisher.Run(CancellationToken cancellationToken)
at publisher.Publisher.ExecuteAsync(CancellationToken cancellationToken)
info: Microsoft.Hosting.Lifetime[0]
`
You can see the GetAPIJson function expects apiInformationfile to be present while calling.

### Expected behavior

It should run without apiinformtion file as we are changing specification only and it is update to the existing graphQL API.

### Actual behavior

Publisher failing with the above error if we don't put apiInfomation.json file in changes. We have to manually make any dummy updates in the apiInformation file so extractor detects it and then publisher work fine.

### Reproduction Steps

1. use any existing graphQl api. Make schema updates to the same
2. run extractor
3. see the generated changed artifacts in the PR
4. it has generated only specification.json for the api
5. Run the publisher with the last commit option and this error will pop up.

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

publisher.Api.GetApiJson から開始し、extractor で変更されたアーティファクトが publisher に渡される流れを追跡します。extractor を使って GraphQL スキーマのみの更新を再現し、そのうえで、変更された apiInformation.json ファイルがなくても公開が成功し、specification.json の処理は引き続き行われることを確認します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
csharp, graphql
領域
api, backend-api-design
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。