Skip to content
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

Create federation @policy directive #2818

Merged
merged 8 commits into from Nov 20, 2023
Merged

Conversation

clenfest
Copy link
Contributor

@clenfest clenfest commented Oct 10, 2023

Introduce the new @policy scope for composition

Note that this directive will only be fully supported by the Apollo Router as a GraphOS Enterprise feature at runtime. Also note that composition of valid @policy directive applications will succeed, but the resulting supergraph will not be executable by the Gateway or an Apollo Router which doesn't have the GraphOS Enterprise entitlement.

Users may now compose @policy applications from their subgraphs into a supergraph.

The directive is defined as follows:

scalar federation__Policy

directive @policy(policies: [[federation__Policy!]!]!) on
  | FIELD_DEFINITION
  | OBJECT
  | INTERFACE
  | SCALAR
  | ENUM

The Policy scalar is effectively a String, similar to the FieldSet type.

In order to compose your @policy usages, you must update your subgraph's federation spec version to v2.6 and add the @policy import to your existing imports like so:

@link(url: "https://specs.apollo.dev/federation/v2.6", import: [..., "@policy"])

For additional context, this PR effectively follows the pattern implemented by #2644

@clenfest clenfest requested a review from a team as a code owner October 10, 2023 21:42
@changeset-bot
Copy link

changeset-bot bot commented Oct 10, 2023

🦋 Changeset detected

Latest commit: 6f944a1

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 7 packages
Name Type
apollo-federation-integration-testsuite Minor
@apollo/query-planner Minor
@apollo/query-graphs Minor
@apollo/composition Minor
@apollo/federation-internals Minor
@apollo/gateway Minor
@apollo/subgraph Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@netlify
Copy link

netlify bot commented Oct 10, 2023

Deploy Preview for apollo-federation-docs ready!

Name Link
🔨 Latest commit c25a137
🔍 Latest deploy log https://app.netlify.com/sites/apollo-federation-docs/deploys/6525c86b6a98800008c8f345
😎 Deploy Preview https://deploy-preview-2818--apollo-federation-docs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site configuration.

@codesandbox-ci
Copy link

codesandbox-ci bot commented Oct 10, 2023

This pull request is automatically built and testable in CodeSandbox.

To see build info of the built libraries, click here or the icon next to each commit SHA.

@clenfest clenfest changed the base branch from main to next October 10, 2023 21:56
the directive now uses nested arrays like `@requiresScopes`

Co-authored-by: Geoffroy Couprie <apollo@geoffroycouprie.com>
export * from './tagSpec';
export * from './inaccessibleSpec';
export * from './federationSpec';
export * from './specs/coreSpec';
Copy link
Member

Choose a reason for hiding this comment

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

should we sort those imports in some way?

Copy link
Member

Choose a reason for hiding this comment

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

I don't disagree. We should add the eslint rule and probably in a separate PR. But until it's enforced / automated there's not much point to worrying about it here.

@trevor-scheer trevor-scheer merged commit e325b49 into next Nov 20, 2023
13 checks passed
@trevor-scheer trevor-scheer deleted the clenfest/policy_directive branch November 20, 2023 23:19
pull bot pushed a commit to NOUIY/federation that referenced this pull request Nov 28, 2023
This PR was opened by the [Changesets
release](https://github.com/changesets/action) GitHub action. When
you're ready to do a release, you can merge this and the packages will
be published to npm automatically. If you're not ready to do a release
yet, that's fine, whenever you add more changesets to next, this PR will
be updated.


# Releases
## @apollo/composition@2.6.0

### Minor Changes

- Update `license` field in `package.json` to use `Elastic-2.0` SPDX
identifier
([apollographql#2741](apollographql#2741))


- Introduce the new `@policy` scope for composition
([apollographql#2818](apollographql#2818))

> Note that this directive will only be _fully_ supported by the Apollo
Router as a GraphOS Enterprise feature at runtime. Also note that
_composition_ of valid `@policy` directive applications will succeed,
but the resulting supergraph will not be _executable_ by the Gateway or
an Apollo Router which doesn't have the GraphOS Enterprise entitlement.

Users may now compose `@policy` applications from their subgraphs into a
supergraph.

      The directive is defined as follows:

    ```graphql
    scalar federation__Policy

    directive @Policy(policies: [[federation__Policy!]!]!) on
      | FIELD_DEFINITION
      | OBJECT
      | INTERFACE
      | SCALAR
      | ENUM
    ```

The `Policy` scalar is effectively a `String`, similar to the `FieldSet`
type.

In order to compose your `@policy` usages, you must update your
subgraph's federation spec version to v2.6 and add the `@policy` import
to your existing imports like so:

    ```graphql
@link(url: "https://specs.apollo.dev/federation/v2.6", import: [...,
"@Policy"])
    ```

### Patch Changes

- Updated dependencies
\[[`b18841be`](apollographql@b18841b),
[`e325b499`](apollographql@e325b49)]:
    -   @apollo/query-graphs@2.6.0
    -   @apollo/federation-internals@2.6.0

## @apollo/gateway@2.6.0

### Minor Changes

- Add more information to OpenTelemetry spans.
([apollographql#2700](apollographql#2700))

    Rename `operationName` to `graphql.operation.name` and add a
`graphql.operation.type` attribute, in conformance with the
OpenTelemetry
Semantic Conventions for GraphQL. The `operationName` attribute is now
deprecated, but it is still emitted alongside `graphql.operation.name`.

Add a `graphql.document` span attribute to the `gateway.request` span,
containing the entire GraphQL source sent in the request. This feature
    is disable by default.

When one or more GraphQL or internal errors occur, report them in the
OpenTelemetry span in which they took place, as an exception event. This
    feature is disabled by default.

To enable the `graphql.document` span attribute and the exception event
reporting, add the following entries to your `ApolloGateway` instance
    configuration:

    ```ts
    const gateway = new ApolloGateway({
      // ...
      telemetry: {
        // Set to `true` to include the `graphql.document` attribute
        includeDocument: true,
// Set to `true` to report all exception events, or set to a number
        // to report at most that number of exception events per span
        reportExceptions: true,
        // or: reportExceptions: 1
      },
    });
    ```

- Update `license` field in `package.json` to use `Elastic-2.0` SPDX
identifier
([apollographql#2741](apollographql#2741))


- Introduce the new `@policy` scope for composition
([apollographql#2818](apollographql#2818))

> Note that this directive will only be _fully_ supported by the Apollo
Router as a GraphOS Enterprise feature at runtime. Also note that
_composition_ of valid `@policy` directive applications will succeed,
but the resulting supergraph will not be _executable_ by the Gateway or
an Apollo Router which doesn't have the GraphOS Enterprise entitlement.

Users may now compose `@policy` applications from their subgraphs into a
supergraph.

      The directive is defined as follows:

    ```graphql
    scalar federation__Policy

    directive @Policy(policies: [[federation__Policy!]!]!) on
      | FIELD_DEFINITION
      | OBJECT
      | INTERFACE
      | SCALAR
      | ENUM
    ```

The `Policy` scalar is effectively a `String`, similar to the `FieldSet`
type.

In order to compose your `@policy` usages, you must update your
subgraph's federation spec version to v2.6 and add the `@policy` import
to your existing imports like so:

    ```graphql
@link(url: "https://specs.apollo.dev/federation/v2.6", import: [...,
"@Policy"])
    ```

- Add graphql.operation.name attribute on gateway.plan span
([apollographql#2807](apollographql#2807))

### Patch Changes

- Updated dependencies
\[[`b18841be`](apollographql@b18841b),
[`e325b499`](apollographql@e325b49)]:
    -   @apollo/query-planner@2.6.0
    -   @apollo/composition@2.6.0
    -   @apollo/federation-internals@2.6.0

## @apollo/federation-internals@2.6.0

### Minor Changes

- Update `license` field in `package.json` to use `Elastic-2.0` SPDX
identifier
([apollographql#2741](apollographql#2741))


- Introduce the new `@policy` scope for composition
([apollographql#2818](apollographql#2818))

> Note that this directive will only be _fully_ supported by the Apollo
Router as a GraphOS Enterprise feature at runtime. Also note that
_composition_ of valid `@policy` directive applications will succeed,
but the resulting supergraph will not be _executable_ by the Gateway or
an Apollo Router which doesn't have the GraphOS Enterprise entitlement.

Users may now compose `@policy` applications from their subgraphs into a
supergraph.

      The directive is defined as follows:

    ```graphql
    scalar federation__Policy

    directive @Policy(policies: [[federation__Policy!]!]!) on
      | FIELD_DEFINITION
      | OBJECT
      | INTERFACE
      | SCALAR
      | ENUM
    ```

The `Policy` scalar is effectively a `String`, similar to the `FieldSet`
type.

In order to compose your `@policy` usages, you must update your
subgraph's federation spec version to v2.6 and add the `@policy` import
to your existing imports like so:

    ```graphql
@link(url: "https://specs.apollo.dev/federation/v2.6", import: [...,
"@Policy"])
    ```

## @apollo/query-graphs@2.6.0

### Minor Changes

- Update `license` field in `package.json` to use `Elastic-2.0` SPDX
identifier
([apollographql#2741](apollographql#2741))


- Introduce the new `@policy` scope for composition
([apollographql#2818](apollographql#2818))

> Note that this directive will only be _fully_ supported by the Apollo
Router as a GraphOS Enterprise feature at runtime. Also note that
_composition_ of valid `@policy` directive applications will succeed,
but the resulting supergraph will not be _executable_ by the Gateway or
an Apollo Router which doesn't have the GraphOS Enterprise entitlement.

Users may now compose `@policy` applications from their subgraphs into a
supergraph.

      The directive is defined as follows:

    ```graphql
    scalar federation__Policy

    directive @Policy(policies: [[federation__Policy!]!]!) on
      | FIELD_DEFINITION
      | OBJECT
      | INTERFACE
      | SCALAR
      | ENUM
    ```

The `Policy` scalar is effectively a `String`, similar to the `FieldSet`
type.

In order to compose your `@policy` usages, you must update your
subgraph's federation spec version to v2.6 and add the `@policy` import
to your existing imports like so:

    ```graphql
@link(url: "https://specs.apollo.dev/federation/v2.6", import: [...,
"@Policy"])
    ```

### Patch Changes

- Updated dependencies
\[[`b18841be`](apollographql@b18841b),
[`e325b499`](apollographql@e325b49)]:
    -   @apollo/federation-internals@2.6.0

## @apollo/query-planner@2.6.0

### Minor Changes

- Update `license` field in `package.json` to use `Elastic-2.0` SPDX
identifier
([apollographql#2741](apollographql#2741))


- Introduce the new `@policy` scope for composition
([apollographql#2818](apollographql#2818))

> Note that this directive will only be _fully_ supported by the Apollo
Router as a GraphOS Enterprise feature at runtime. Also note that
_composition_ of valid `@policy` directive applications will succeed,
but the resulting supergraph will not be _executable_ by the Gateway or
an Apollo Router which doesn't have the GraphOS Enterprise entitlement.

Users may now compose `@policy` applications from their subgraphs into a
supergraph.

      The directive is defined as follows:

    ```graphql
    scalar federation__Policy

    directive @Policy(policies: [[federation__Policy!]!]!) on
      | FIELD_DEFINITION
      | OBJECT
      | INTERFACE
      | SCALAR
      | ENUM
    ```

The `Policy` scalar is effectively a `String`, similar to the `FieldSet`
type.

In order to compose your `@policy` usages, you must update your
subgraph's federation spec version to v2.6 and add the `@policy` import
to your existing imports like so:

    ```graphql
@link(url: "https://specs.apollo.dev/federation/v2.6", import: [...,
"@Policy"])
    ```

### Patch Changes

- Updated dependencies
\[[`b18841be`](apollographql@b18841b),
[`e325b499`](apollographql@e325b49)]:
    -   @apollo/query-graphs@2.6.0
    -   @apollo/federation-internals@2.6.0

## @apollo/subgraph@2.6.0

### Patch Changes

- Updated dependencies
\[[`b18841be`](apollographql@b18841b),
[`e325b499`](apollographql@e325b49)]:
    -   @apollo/federation-internals@2.6.0

## apollo-federation-integration-testsuite@2.6.0

### Minor Changes

- Update `license` field in `package.json` to use `Elastic-2.0` SPDX
identifier
([apollographql#2741](apollographql#2741))


- Introduce the new `@policy` scope for composition
([apollographql#2818](apollographql#2818))

> Note that this directive will only be _fully_ supported by the Apollo
Router as a GraphOS Enterprise feature at runtime. Also note that
_composition_ of valid `@policy` directive applications will succeed,
but the resulting supergraph will not be _executable_ by the Gateway or
an Apollo Router which doesn't have the GraphOS Enterprise entitlement.

Users may now compose `@policy` applications from their subgraphs into a
supergraph.

      The directive is defined as follows:

    ```graphql
    scalar federation__Policy

    directive @Policy(policies: [[federation__Policy!]!]!) on
      | FIELD_DEFINITION
      | OBJECT
      | INTERFACE
      | SCALAR
      | ENUM
    ```

The `Policy` scalar is effectively a `String`, similar to the `FieldSet`
type.

In order to compose your `@policy` usages, you must update your
subgraph's federation spec version to v2.6 and add the `@policy` import
to your existing imports like so:

    ```graphql
@link(url: "https://specs.apollo.dev/federation/v2.6", import: [...,
"@Policy"])
    ```

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants