-
Notifications
You must be signed in to change notification settings - Fork 144
run ci for #8166 #8227
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
run ci for #8166 #8227
Changes from all commits
cbb2585
2df3070
c9d64b7
2d173f3
4264507
223144a
0da96c1
c0debc8
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| --- | ||
| 'hive': patch | ||
| --- | ||
|
|
||
| Include contract changes in the GitHub CI schema-check summary. Previously, a `schema:check --github` run on a composite/federation project that changed only a contract (while the core composed schema was unchanged) was reported as "No changes". The summary now reports the changed contracts and their changes, and "No changes" is only shown when neither the core schema nor any contract changed. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -968,6 +968,13 @@ export class SchemaPublisher { | |
| organization, | ||
| conclusion: checkResult.conclusion, | ||
| changes: checkResult.state?.schemaChanges?.all ?? null, | ||
| contractChanges: | ||
| checkResult.state.contracts | ||
| ?.map(contract => ({ | ||
| contractName: contract.contractName, | ||
| changes: contract.schemaChanges?.all ?? [], | ||
| })) | ||
| .filter(contract => contract.changes.length > 0) ?? null, | ||
| breakingChanges: checkResult.state?.schemaChanges?.breaking ?? null, | ||
| warnings: checkResult.state?.schemaPolicyWarnings ?? null, | ||
| compositionErrors: null, | ||
|
|
@@ -992,6 +999,7 @@ export class SchemaPublisher { | |
| ...(checkResult.state.schemaChanges?.breaking ?? []), | ||
| ...(checkResult.state.schemaChanges?.safe ?? []), | ||
| ], | ||
| contractChanges: null, | ||
| breakingChanges: checkResult.state.schemaChanges?.breaking ?? [], | ||
| compositionErrors: checkResult.state.composition.errors ?? [], | ||
| warnings: checkResult.state.schemaPolicy?.warnings ?? [], | ||
|
|
@@ -1022,6 +1030,7 @@ export class SchemaPublisher { | |
| organization, | ||
| conclusion: SchemaCheckConclusion.Success, | ||
| changes: null, | ||
| contractChanges: null, | ||
| breakingChanges: null, | ||
| warnings: null, | ||
| compositionErrors: null, | ||
|
|
@@ -1039,6 +1048,7 @@ export class SchemaPublisher { | |
| organization, | ||
| conclusion: SchemaCheckConclusion.Failure, | ||
| changes: null, | ||
| contractChanges: null, | ||
| breakingChanges: null, | ||
| compositionErrors: latestVersion.version.schemaCompositionErrors, | ||
| warnings: null, | ||
|
|
@@ -3122,6 +3132,7 @@ export class SchemaPublisher { | |
| conclusion: SchemaCheckConclusion; | ||
| warnings: SchemaCheckWarning[] | null; | ||
| changes: Array<SchemaChangeType> | null; | ||
| contractChanges: Array<{ contractName: string; changes: Array<SchemaChangeType> }> | null; | ||
| breakingChanges: Array<SchemaChangeType> | null; | ||
| compositionErrors: Array<{ | ||
| message: string; | ||
|
|
@@ -3138,15 +3149,10 @@ export class SchemaPublisher { | |
| let shortSummaryFallback: string; | ||
|
|
||
| if (conclusion === SchemaCheckConclusion.Success) { | ||
| if (!changes || changes.length === 0) { | ||
| title = 'No changes'; | ||
| summary = 'No changes detected'; | ||
| shortSummaryFallback = summary; | ||
| } else { | ||
| title = 'No blocking changes'; | ||
| summary = changesToMarkdown(changes); | ||
| shortSummaryFallback = changesToMarkdown(changes, false); | ||
| } | ||
| ({ title, summary, shortSummaryFallback } = buildSchemaCheckSuccessGithubOutput({ | ||
| changes, | ||
| contractChanges: args.contractChanges, | ||
| })); | ||
| } else { | ||
| const total = | ||
| (compositionErrors?.length ?? 0) + (breakingChanges?.length ?? 0) + (errors?.length ?? 0); | ||
|
|
@@ -3539,6 +3545,38 @@ function writeChanges( | |
| } | ||
| } | ||
|
|
||
| export function buildSchemaCheckSuccessGithubOutput(input: { | ||
| changes: Array<MarkdownSchemaChange> | null; | ||
| contractChanges: Array<{ contractName: string; changes: Array<MarkdownSchemaChange> }> | null; | ||
| }): { title: string; summary: string; shortSummaryFallback: string } { | ||
| const coreChanges = input.changes ?? []; | ||
| const contractChanges = input.contractChanges?.filter(contract => contract.changes.length) ?? []; | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Using const contractChanges = input.contractChanges?.filter(contract => contract.changes.length > 0) ?? []; |
||
|
|
||
| if (coreChanges.length === 0 && contractChanges.length === 0) { | ||
| const summary = 'No changes detected'; | ||
| return { title: 'No changes', summary, shortSummaryFallback: summary }; | ||
| } | ||
|
|
||
| const buildSummary = (printListOfChanges: boolean) => | ||
| [ | ||
| coreChanges.length ? changesToMarkdown(coreChanges, printListOfChanges) : null, | ||
| ...contractChanges.map(contract => | ||
| [ | ||
| `## Contract "${contract.contractName}"`, | ||
| changesToMarkdown(contract.changes, printListOfChanges), | ||
| ].join('\n'), | ||
| ), | ||
| ] | ||
| .filter(Boolean) | ||
| .join('\n\n'); | ||
|
|
||
| return { | ||
| title: 'No blocking changes', | ||
| summary: buildSummary(true), | ||
| shortSummaryFallback: buildSummary(false), | ||
| }; | ||
| } | ||
|
|
||
| function buildGitHubActionCheckName(input: { | ||
| targetName: string; | ||
| projectName: string; | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The property
checkResult.stateis accessed directly ascheckResult.state.contractswithout optional chaining. In other parts of this method (such as lines 954, 962, and 963),checkResult.stateis accessed using optional chaining (checkResult.state?.). To prevent potential runtimeTypeErrorexceptions ifstateis null or undefined, please use optional chaining here as well.