Skip to content

Commit 0f0430f

Browse files
authored
remove compare to latest schema version feature flag (#7584)
1 parent e203a7c commit 0f0430f

20 files changed

Lines changed: 1070 additions & 1514 deletions

.changeset/slimy-trams-search.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
---
2+
'hive': minor
3+
---
4+
5+
Enable automatic retrieval of schema changes by comparing with the latest composable version. This has already been the default for new projects created after April 2024.
6+
7+
Federation and schema stitching projects can now publish service schemas to the registry even if those schemas would break composition. This has also been the default behavior for new projects created after April 2024.
8+
9+
To ensure every version publishd to the schema registry is composable, we recommend to first check the schema against the registry **before** publishing.

integration-tests/tests/api/artifacts-cdn.spec.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1117,11 +1117,10 @@ function runArtifactsCDNTests(
11171117
'access versioned contract artifact with valid credentials',
11181118
async ({ expect }) => {
11191119
const { createOrg, ownerToken } = await initSeed().createOwner();
1120-
const { createProject, setFeatureFlag } = await createOrg();
1121-
const { createTargetAccessToken, createCdnAccess, target, setNativeFederation } =
1122-
await createProject(ProjectType.Federation);
1123-
await setFeatureFlag('compareToPreviousComposableVersion', true);
1124-
await setNativeFederation(true);
1120+
const { createProject } = await createOrg();
1121+
const { createTargetAccessToken, createCdnAccess, target } = await createProject(
1122+
ProjectType.Federation,
1123+
);
11251124

11261125
const writeToken = await createTargetAccessToken({});
11271126

integration-tests/tests/api/schema/check.spec.ts

Lines changed: 3 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1925,12 +1925,8 @@ describe.concurrent(
19251925
() => {
19261926
test.concurrent('native federation', async () => {
19271927
const { createOrg } = await initSeed().createOwner();
1928-
const { createProject, setFeatureFlag } = await createOrg();
1929-
const { createTargetAccessToken, setNativeFederation } = await createProject(
1930-
ProjectType.Federation,
1931-
);
1932-
await setFeatureFlag('compareToPreviousComposableVersion', true);
1933-
await setNativeFederation(true);
1928+
const { createProject } = await createOrg();
1929+
const { createTargetAccessToken } = await createProject(ProjectType.Federation);
19341930

19351931
const token = await createTargetAccessToken({});
19361932

@@ -1976,11 +1972,10 @@ describe.concurrent(
19761972

19771973
test.concurrent('legacy fed composition', async () => {
19781974
const { createOrg } = await initSeed().createOwner();
1979-
const { createProject, setFeatureFlag } = await createOrg();
1975+
const { createProject } = await createOrg();
19801976
const { createTargetAccessToken, setNativeFederation } = await createProject(
19811977
ProjectType.Federation,
19821978
);
1983-
await setFeatureFlag('compareToPreviousComposableVersion', false);
19841979
await setNativeFederation(false);
19851980

19861981
const token = await createTargetAccessToken({});
@@ -2020,58 +2015,6 @@ describe.concurrent(
20202015
}),
20212016
});
20222017
});
2023-
2024-
test.concurrent(
2025-
'legacy fed composition with compareToPreviousComposableVersion=true',
2026-
async () => {
2027-
const { createOrg } = await initSeed().createOwner();
2028-
const { createProject, setFeatureFlag } = await createOrg();
2029-
const { createTargetAccessToken, setNativeFederation } = await createProject(
2030-
ProjectType.Federation,
2031-
);
2032-
await setFeatureFlag('compareToPreviousComposableVersion', true);
2033-
await setNativeFederation(false);
2034-
2035-
const token = await createTargetAccessToken({});
2036-
2037-
// @key(fields:) is invalid - should trigger a composition error
2038-
const sdl = /* GraphQL */ `
2039-
type Query {
2040-
ping: String
2041-
pong: String
2042-
foo: User
2043-
}
2044-
2045-
type User @key(fields: "uuid") {
2046-
id: ID!
2047-
}
2048-
`;
2049-
2050-
// Publish schema with write rights
2051-
await token
2052-
.publishSchema({
2053-
sdl,
2054-
service: 'serviceA',
2055-
url: 'http://localhost:4000',
2056-
})
2057-
.then(r => r.expectNoGraphQLErrors());
2058-
2059-
const result = await token
2060-
.checkSchema(sdl, 'serviceA')
2061-
.then(r => r.expectNoGraphQLErrors());
2062-
2063-
expect(result.schemaCheck).toMatchObject({
2064-
valid: false,
2065-
__typename: 'SchemaCheckError',
2066-
changes: expect.objectContaining({
2067-
total: 0,
2068-
}),
2069-
errors: expect.objectContaining({
2070-
total: 1,
2071-
}),
2072-
});
2073-
},
2074-
);
20752018
},
20762019
);
20772020

integration-tests/tests/api/schema/contracts-check.spec.ts

Lines changed: 15 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,8 @@ const CreateContractMutation = graphql(`
3232

3333
test.concurrent('schema check with successful contract checks', async ({ expect }) => {
3434
const { createOrg, ownerToken } = await initSeed().createOwner();
35-
const { createProject, setFeatureFlag } = await createOrg();
36-
const { createTargetAccessToken, target, setNativeFederation } = await createProject(
37-
ProjectType.Federation,
38-
);
39-
await setFeatureFlag('compareToPreviousComposableVersion', true);
40-
await setNativeFederation(true);
35+
const { createProject } = await createOrg();
36+
const { createTargetAccessToken, target } = await createProject(ProjectType.Federation);
4137

4238
// Create a token with write rights
4339
const writeToken = await createTargetAccessToken({});
@@ -99,12 +95,8 @@ test.concurrent('schema check with successful contract checks', async ({ expect
9995

10096
test.concurrent('schema check with failing contract composition', async ({ expect }) => {
10197
const { createOrg, ownerToken } = await initSeed().createOwner();
102-
const { createProject, setFeatureFlag } = await createOrg();
103-
const { createTargetAccessToken, target, setNativeFederation } = await createProject(
104-
ProjectType.Federation,
105-
);
106-
await setFeatureFlag('compareToPreviousComposableVersion', true);
107-
await setNativeFederation(true);
98+
const { createProject } = await createOrg();
99+
const { createTargetAccessToken, target } = await createProject(ProjectType.Federation);
108100

109101
// Create a token with write rights
110102
const writeToken = await createTargetAccessToken({});
@@ -180,12 +172,8 @@ test.concurrent(
180172
'schema check with failing contract composition (multiple contracts)',
181173
async ({ expect }) => {
182174
const { createOrg, ownerToken } = await initSeed().createOwner();
183-
const { createProject, setFeatureFlag } = await createOrg();
184-
const { createTargetAccessToken, target, setNativeFederation } = await createProject(
185-
ProjectType.Federation,
186-
);
187-
await setFeatureFlag('compareToPreviousComposableVersion', true);
188-
await setNativeFederation(true);
175+
const { createProject } = await createOrg();
176+
const { createTargetAccessToken, target } = await createProject(ProjectType.Federation);
189177

190178
// Create a token with write rights
191179
const writeToken = await createTargetAccessToken({});
@@ -381,12 +369,10 @@ test.concurrent(
381369
'approve failed schema check that has breaking change in contract check -> updates the status to successful and attaches meta information to the breaking change',
382370
async ({ expect }) => {
383371
const { createOrg, ownerToken } = await initSeed().createOwner();
384-
const { createProject, organization, setFeatureFlag } = await createOrg();
385-
const { createTargetAccessToken, project, target, setNativeFederation } = await createProject(
372+
const { createProject, organization } = await createOrg();
373+
const { createTargetAccessToken, project, target } = await createProject(
386374
ProjectType.Federation,
387375
);
388-
await setFeatureFlag('compareToPreviousComposableVersion', true);
389-
await setNativeFederation(true);
390376

391377
// Create a token with write rights
392378
const writeToken = await createTargetAccessToken({});
@@ -547,8 +533,6 @@ test.concurrent(
547533
const { createTargetAccessToken, project, target, setNativeFederation } = await createProject(
548534
ProjectType.Federation,
549535
);
550-
await setFeatureFlag('compareToPreviousComposableVersion', true);
551-
await setNativeFederation(true);
552536

553537
// Create a token with write rights
554538
const writeToken = await createTargetAccessToken({});
@@ -739,12 +723,10 @@ test.concurrent(
739723
'approving a schema check with contextId containing breaking changes does not allow the changes for subsequent checks with a different contextId',
740724
async ({ expect }) => {
741725
const { createOrg, ownerToken } = await initSeed().createOwner();
742-
const { createProject, organization, setFeatureFlag } = await createOrg();
743-
const { createTargetAccessToken, project, target, setNativeFederation } = await createProject(
726+
const { createProject, organization } = await createOrg();
727+
const { createTargetAccessToken, project, target } = await createProject(
744728
ProjectType.Federation,
745729
);
746-
await setFeatureFlag('compareToPreviousComposableVersion', true);
747-
await setNativeFederation(true);
748730

749731
// Create a token with write rights
750732
const writeToken = await createTargetAccessToken({});
@@ -928,12 +910,10 @@ test.concurrent(
928910
'subsequent schema check with shared contextId that contains new breaking changes that have not been approved fails',
929911
async ({ expect }) => {
930912
const { createOrg, ownerToken } = await initSeed().createOwner();
931-
const { createProject, organization, setFeatureFlag } = await createOrg();
932-
const { createTargetAccessToken, project, target, setNativeFederation } = await createProject(
913+
const { createProject, organization } = await createOrg();
914+
const { createTargetAccessToken, project, target } = await createProject(
933915
ProjectType.Federation,
934916
);
935-
await setFeatureFlag('compareToPreviousComposableVersion', true);
936-
await setNativeFederation(true);
937917

938918
// Create a token with write rights
939919
const writeToken = await createTargetAccessToken({});
@@ -1128,12 +1108,10 @@ test.concurrent(
11281108
'schema check that has no composition errors in contract check -> can be approved',
11291109
async ({ expect }) => {
11301110
const { createOrg, ownerToken } = await initSeed().createOwner();
1131-
const { createProject, organization, setFeatureFlag } = await createOrg();
1132-
const { createTargetAccessToken, project, target, setNativeFederation } = await createProject(
1111+
const { createProject, organization } = await createOrg();
1112+
const { createTargetAccessToken, project, target } = await createProject(
11331113
ProjectType.Federation,
11341114
);
1135-
await setFeatureFlag('compareToPreviousComposableVersion', true);
1136-
await setNativeFederation(true);
11371115

11381116
// Create a token with write rights
11391117
const writeToken = await createTargetAccessToken({});
@@ -1237,12 +1215,10 @@ test.concurrent(
12371215
'schema check that has composition errors in contract check -> can not be approved',
12381216
async ({ expect }) => {
12391217
const { createOrg, ownerToken } = await initSeed().createOwner();
1240-
const { createProject, organization, setFeatureFlag } = await createOrg();
1218+
const { createProject, organization } = await createOrg();
12411219
const { createTargetAccessToken, project, target, setNativeFederation } = await createProject(
12421220
ProjectType.Federation,
12431221
);
1244-
await setFeatureFlag('compareToPreviousComposableVersion', true);
1245-
await setNativeFederation(true);
12461222

12471223
// Create a token with write rights
12481224
const writeToken = await createTargetAccessToken({});

0 commit comments

Comments
 (0)