-
Notifications
You must be signed in to change notification settings - Fork 108
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
chore(deps): migration to sentry v9 #6527
base: main
Are you sure you want to change the base?
Conversation
📝 WalkthroughSummary by CodeRabbit
WalkthroughThis pull request updates the Sentry integration across the codebase. Multiple package manifest files have been modified to upgrade various Sentry dependencies (e.g., updating from version 7.120.2 to 9.1.0, and related peer or CLI changes). In addition, several code changes adjust how Sentry captures errors and configures user context. Modifications include replacing deprecated function calls with updated methods, removing obsolete Sentry interceptors and tracing configurations, and streamlining asynchronous context handling. Changes
Sequence Diagram(s)sequenceDiagram
participant Client
participant GraphQLHandler
participant Sentry
Client->>GraphQLHandler: Send GraphQL Request
GraphQLHandler->>Sentry: Execute withIsolationScope for async context
Sentry-->>GraphQLHandler: Return isolated context
GraphQLHandler->>Client: Respond with result or error
sequenceDiagram
participant Request
participant Server
participant Sentry
Request->>Server: Trigger operation (e.g., db task)
Server->>Sentry: captureException(error)
Sentry-->>Server: Log captured exception
Server->>Request: Return error response
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
📚 Storybook DeploymentThe latest changes are available as preview in: https://9e6a7e40.hive-storybook.pages.dev |
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.
Actionable comments posted: 2
🔭 Outside diff range comments (1)
packages/services/storage/src/db/pool.ts (1)
25-44
: 🛠️ Refactor suggestionConsider capturing database errors with Sentry.
The
interceptError
function successfully captures SQL queries and values in errors, but these errors are not being reported to any monitoring system. Consider wrapping the error in a Sentry capture call before rejecting the promise.Here's a suggested implementation that integrates with Sentry v9:
function interceptor<T extends QueryResultRow>( this: any, sql: TaggedTemplateLiteralInvocation<T>, values?: QueryResultRowColumn[], ): any { return (original as any).call(this, sql, values).catch((error: any) => { error.sql = sql.sql; error.values = sql.values || values; + + // Capture database errors in Sentry with additional context + Sentry.captureException(error, { + extra: { + sql: error.sql, + values: error.values, + }, + tags: { + type: 'database_error', + }, + }); return Promise.reject(error); }); }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
pnpm-lock.yaml
is excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (23)
package.json
(1 hunks)packages/services/api/package.json
(1 hunks)packages/services/emails/package.json
(1 hunks)packages/services/policy/package.json
(1 hunks)packages/services/rate-limit/package.json
(1 hunks)packages/services/schema/package.json
(1 hunks)packages/services/server/package.json
(1 hunks)packages/services/server/src/graphql-handler.ts
(2 hunks)packages/services/server/src/index.ts
(2 hunks)packages/services/server/src/use-sentry-user.ts
(1 hunks)packages/services/service-common/package.json
(2 hunks)packages/services/storage/package.json
(1 hunks)packages/services/storage/src/db/pool.ts
(1 hunks)packages/services/storage/src/db/sentry.ts
(0 hunks)packages/services/stripe-billing/package.json
(1 hunks)packages/services/tokens/package.json
(1 hunks)packages/services/usage-estimator/package.json
(1 hunks)packages/services/usage-ingestor/package.json
(1 hunks)packages/services/usage/package.json
(1 hunks)packages/services/webhooks/package.json
(1 hunks)packages/web/app/package.json
(1 hunks)packages/web/app/src/env/backend.ts
(0 hunks)packages/web/app/src/router.tsx
(3 hunks)
💤 Files with no reviewable changes (2)
- packages/web/app/src/env/backend.ts
- packages/services/storage/src/db/sentry.ts
✅ Files skipped from review due to trivial changes (1)
- package.json
🧰 Additional context used
📓 Path-based instructions (1)
`packages/services/**`: Microservices written in NodeJS and ...
packages/services/**
: Microservices written in NodeJS and TypeScript. Most of the dirs under this directory are packages and deployed as Docker packages.
Interaction between services is done using tRPC.
We prefer writing code that does input/output validations with Zod.
The directories that ends with-worker
are projects that are built on top of CloudFlare Workers infrastructure and deployed there.
Thecdn-worker
is a special one, it serves a high-available, detached CDN on CloudFlare Workers. This is how our end-users fetches the crucial data from our platform, in a way that does not depend/couple on our main API (served as GraphQL API).
packages/services/emails/package.json
packages/services/schema/package.json
packages/services/usage/package.json
packages/services/usage-ingestor/package.json
packages/services/stripe-billing/package.json
packages/services/rate-limit/package.json
packages/services/usage-estimator/package.json
packages/services/tokens/package.json
packages/services/policy/package.json
packages/services/server/src/graphql-handler.ts
packages/services/storage/src/db/pool.ts
packages/services/server/package.json
packages/services/server/src/use-sentry-user.ts
packages/services/api/package.json
packages/services/storage/package.json
packages/services/webhooks/package.json
packages/services/service-common/package.json
packages/services/server/src/index.ts
⏰ Context from checks skipped due to timeout of 90000ms (11)
- GitHub Check: alpha / npm / snapshot
- GitHub Check: test / unit
- GitHub Check: typescript / typecheck
- GitHub Check: storybook-preview / deployment
- GitHub Check: static-analysis / analyze (typescript)
- GitHub Check: static-analysis / analyze (javascript)
- GitHub Check: db-types / diff
- GitHub Check: build / dockerize (linux/arm64)
- GitHub Check: code-style / eslint-and-prettier
- GitHub Check: build / dockerize (linux/amd64)
- GitHub Check: alpha / cli-artifacts
🔇 Additional comments (21)
packages/services/server/src/graphql-handler.ts (1)
29-29
:❓ Verification inconclusive
LGTM! Updated to use Sentry's new isolation API.
The change from
runWithAsyncContext
towithIsolationScope
aligns with Sentry v9's context isolation API.Let's verify that all instances of
runWithAsyncContext
have been migrated:Also applies to: 269-270
🏁 Script executed:
#!/bin/bash # Search for any remaining uses of runWithAsyncContext rg "runWithAsyncContext" --type tsLength of output: 34
LGTM! Sentry migration appears complete.
The use of
withIsolationScope
is correctly replacingrunWithAsyncContext
inpackages/services/server/src/graphql-handler.ts
per Sentry v9's API. Although the initial search in TypeScript files returned no results, please perform a manual verification or run a broader repository search (e.g., without file type restrictions) to ensure no lingering references exist (notably in non-TypeScript files).packages/services/server/src/index.ts (2)
45-53
: LGTM! Updated Sentry imports and configuration.The imports have been updated to match Sentry v9's module structure.
91-91
:✅ Verification successful
Verify impact of disabling spans in HTTP integration.
The HTTP integration has been configured with
spans: false
, which disables performance monitoring for HTTP requests. Ensure this aligns with your monitoring requirements.
🌐 Web query:
What is the impact of setting spans: false in Sentry's HTTP integration?
💡 Result:
Setting
spans: false
in Sentry's HTTP integration primarily disables span creation for outgoing HTTP requests while retaining breadcrumb capture (if enabled). Here's a detailed breakdown of its impact:1. Loss of Performance Monitoring Data
- Spans for outgoing HTTP requests (
http.client
operations) will no longer be recorded[2][3].- This removes visibility into request durations, status codes, and network errors within Sentry's Performance/Transactions view[3][9].
2. Impact on Distributed Tracing
- The
sentry-trace
andbaggage
headers will not be injected into outgoing HTTP requests[5][9].- Breaks trace continuity between services since downstream systems won't receive propagation context[5][9].
3. Breadcrumb Functionality
- Breadcrumbs for HTTP requests can still be captured if configured via
breadcrumbs: true
[2][3].- Breadcrumb data includes URL, method, status code (but lacks granular timing details)[3].
4. Error Correlation
- Errors from HTTP requests won't be linked to parent transactions/spans since no span context exists[3][9].
- Reduces debugging context for failed API calls (e.g., missing parent transaction ID)[3].
Example Configuration
Sentry.init({ integrations: [ Sentry.httpIntegration({ // Explicitly disable spans while keeping breadcrumbs breadcrumbs: true, tracing: { // Equivalent to 'spans: false' enableSpans: false } }) ] });When to Use This
- If you need breadcrumbs without transaction overhead.
- To avoid duplicate spans when using multiple tracing integrations (e.g., with Supabase or custom instrumentation)[6].
- When optimizing SDK performance by reducing telemetry data volume[5][9].
For most production use cases involving distributed systems, keep spans enabled unless explicitly troubleshooting span duplication or resource constraints[3][6].
Citations:
- 1: https://develop-git-python3bydefault.sentry.dev/sdk/unified-api/tracing
- 2: https://docs.sentry.io/platforms/javascript/guides/connect/configuration/integrations/http/
- 3: https://develop.sentry.dev/sdk/expected-features/
- 4: https://docs.sentry.io/platforms/javascript/configuration/options/
- 5: https://develop.sentry.dev/sdk/telemetry/traces/
- 6: https://supabase.com/docs/guides/telemetry/sentry-monitoring
- 7: https://sentry.nuxtjs.org/configuration/options
- 8: https://github.com/getsentry/sentry-javascript/blob/develop/MIGRATION.md
- 9: https://docs.sentry.io/platforms/javascript/tracing/instrumentation/automatic-instrumentation/
- 10: https://docs.sentry.io/platforms/javascript/tracing/instrumentation/custom-instrumentation/
Attention: Verify the Impact of Disabling HTTP Spans
Setting
spans: false
in the HTTP integration prevents the creation of spans for outgoing HTTP requests. This configuration change means:
- No Performance Data Collection: HTTP request spans (which capture durations, errors, and status codes) will not be recorded, reducing visibility into request performance.
- Broken Distributed Tracing: The SDK will not inject tracing headers (e.g.,
sentry-trace
andbaggage
), which may disrupt trace continuity across services.- Breadcrumb Capture Remains: While breadcrumbs (if enabled) will still be captured, they lack the detailed timing information that spans provide.
Ensure this trade-off aligns with your monitoring strategy, especially if detailed performance data or end-to-end trace propagation is required for debugging and observability.
packages/web/app/src/router.tsx (2)
14-14
: LGTM! Simplified Sentry initialization.The Sentry initialization has been updated to match v9's configuration style, removing tracing-related options.
Also applies to: 75-81
92-94
: LGTM! Updated user identification method.The change to use
getCurrentScope().setUser()
is consistent with the server-side changes and Sentry v9's best practices.packages/services/usage-ingestor/package.json (1)
15-15
: Sentry Dependency Version Update Confirmed.
The update of@sentry/node
from the previous version to"9.1.0"
is correctly applied here and aligns with the migration to Sentry v9. No issues detected.packages/services/usage/package.json (1)
15-15
: Sentry Dependency Version Update Verified.
The dependency update of@sentry/node
to"9.1.0"
is consistent with the overall PR objective and ensures uniformity with other services.packages/services/usage-estimator/package.json (1)
15-15
: Sentry Migration Update Approved.
The change updating@sentry/node
from the older version to"9.1.0"
is correctly reflected in thedevDependencies
. This change is in line with the migration to Sentry v9.packages/services/webhooks/package.json (1)
14-14
: Sentry Dependency Version Change is Correct.
The update to"9.1.0"
for@sentry/node
ensures that this package now aligns with the new Sentry v9 integration across the codebase.packages/services/tokens/package.json (1)
14-14
: Sentry Dependency Version Update Approved.
The dependency"@sentry/node": "9.1.0"
has been updated in thedevDependencies
section. This update meets the migration requirements for Sentry v9 without introducing any issues.packages/services/stripe-billing/package.json (1)
15-15
: Sentry Version Update for Stripe Billing
The dependency for@sentry/node
has been updated to"9.1.0"
, aligning with the migration effort across services. Please ensure that any integration of Sentry in this service (e.g., error capturing and reporting) is tested accordingly.packages/services/policy/package.json (1)
14-14
: Sentry Upgrade and Tracing Removal in Policy Service
The update to@sentry/node
"9.1.0"
is in line with the migration to Sentry v9. Note that the removal of@sentry/tracing
should be verified to ensure that no parts of the codebase depend on its functionality, and that error logging continues to function as expected.packages/services/rate-limit/package.json (1)
16-16
: Sentry Dependency Upgrade in Rate-Limit Service
The@sentry/node
dependency has been updated to"9.1.0"
. Confirm that this change integrates seamlessly with the service’s error reporting and that any custom Sentry initialization code is compatible with the new version.packages/services/emails/package.json (1)
14-14
: Sentry Update for Emails Service
The dependency update to@sentry/node: "9.1.0"
aligns this service with the overall Sentry v9 migration. Please verify that any Sentry initialization or configuration within the emails service has been adapted to the new API changes introduced in version 9.packages/services/service-common/package.json (2)
7-7
: Peer Dependency Update for Sentry in Service Common
The peer dependency now specifies@sentry/node
with the version range"^9.0.0"
. This ensures consistency for downstream packages relying on this common service. It’s a good idea to run integration tests in packages that depend on@hive/service-common
to verify compatibility.
22-23
: DevDependencies Sentry Upgrade in Service Common
The devDependencies now include@sentry/node: "9.1.0"
and a new inclusion of@sentry/types: "9.1.0"
. The removal of@sentry/utils
appears intentional given the migration focus. Verify that no internal tooling or tests depend on the removed package and that Sentry error capturing works as expected throughout the system.packages/services/schema/package.json (1)
18-18
: Upgrade Sentry Dependency VersionThe
@sentry/node
dependency has been correctly updated to version9.1.0
in line 18. This is in line with the PR objectives for migrating to Sentry v9. Make sure to review any associated configuration changes or breaking changes introduced in v9.packages/services/storage/package.json (1)
20-21
: Upgrade Sentry DependenciesThe dependencies for
@sentry/node
and@sentry/types
are updated to version9.1.0
. This coordinated update aligns well with the overall migration effort. Please verify that any Sentry-related configurations in this package are adjusted if needed for compatibility with the new version.packages/services/server/package.json (1)
32-32
: Upgrade @sentry/node and Validate Dependency RemovalThe
@sentry/node
dependency is correctly updated to9.1.0
(line 32). Additionally, note that the removal of the@sentry/integrations
dependency (as mentioned in the summary) should be double-checked throughout the project to ensure that its functionality has been fully migrated to the new error capturing approach.packages/services/api/package.json (1)
34-35
: Upgrade Sentry DependenciesBoth
@sentry/node
and@sentry/types
have been upgraded to9.1.0
, which is consistent with the rest of the codebase. Ensure that any initialization or usage of Sentry within this package has been reviewed against the v9 documentation to handle any API changes.packages/web/app/package.json (1)
52-54
: Upgrade Sentry Packages in the Web AppThe Sentry-related packages (
@sentry/node
,@sentry/react
, and@sentry/types
) in the@hive/app
package have been updated to9.1.0
. This is an important change for ensuring end-to-end consistency with the new Sentry version. Please verify that the new versions’ API changes—especially in error capturing, user context configuration, and React integrations—are properly reflected in your application code.
|
||
const dbInterceptors: Interceptor[] = [createQueryLoggingInterceptor(), createSentryInterceptor()]; | ||
const dbInterceptors: Interceptor[] = [createQueryLoggingInterceptor()]; |
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.
💡 Verification agent
🧩 Analysis chain
Implement Sentry v9 integration for database error tracking.
The removal of the Sentry interceptor means database errors won't be automatically reported to Sentry. Since this PR's objective is to migrate to Sentry v9, we should implement a new Sentry interceptor compatible with v9 instead of removing it entirely.
Let me help you implement a Sentry v9 compatible interceptor. First, let's verify the correct approach by checking Sentry's documentation:
🌐 Web query:
What is the recommended way to capture database errors in Sentry v9 for Node.js?
💡 Result:
To capture database errors effectively in Sentry v9 for Node.js applications, use these recommended approaches based on best practices from Sentry's documentation and community insights:
1. Explicit Error Capture
Wrap database operations in try/catch
blocks and manually report errors:
import * as Sentry from "@sentry/node";
try {
await database.query("SELECT * FROM users");
} catch (error) {
Sentry.captureException(error); // Captures the error with stack trace[1][7]
// Add context (e.g., query details)
Sentry.setContext("Database Query", {
query: "SELECT * FROM users",
params: {}
})[6][7].
}
2. Global Error Handling (Express)
For Express.js apps, use Sentry's middleware to automate error reporting:
const express = require('express');
const app = express();
// Initialize Sentry first
Sentry.init({ dsn: process.env.SENTRY_DSN });
// Add error-handling middleware
app.use(Sentry.Handlers.errorHandler())[9].
This captures unhandled errors in routes/middleware automatically[5][9].
3. Automated Wrappers/Decorators
Reduce boilerplate by wrapping database functions:
function withSentryCapture(fn) {
return async (...args) => {
try {
return await fn(...args);
} catch (error) {
Sentry.captureException(error);
throw error;
}
};
}
// Usage
const safeQuery = withSentryCapture(database.query);
await safeQuery("SELECT * FROM posts")[3].
4. Enrich Error Context
Add metadata to errors for debugging:
Sentry.configureScope((scope) => {
scope.setTag("database", "postgres");
scope.setExtra("query", "SELECT * FROM invalid_table");
})[6][7].
Key Considerations:
- Use
captureMessage
for non-exception events (e.g., connection timeouts)[1][2]. - Configure performance monitoring for transactions involving DB calls[4][5]:
const transaction = Sentry.startTransaction({ op: "db.query" }); // ... run query ... transaction.finish();
- Avoid capturing sensitive data by configuring data scrubbing rules[8].
For advanced use cases like profiling or release tracking, refer to Sentry's Node.js documentation[1][8].
Citations:
- 1: https://docs.sentry.io/platforms/javascript/guides/node/usage/
- 2: https://dev.to/mogery/tracking-errors-in-sentry-in-nodejs-4d1o
- 3: https://forum.sentry.io/t/capture-exceptions-in-all-catch-blocks/7778
- 4: https://www.youtube.com/watch?v=bsiwhthPfNA
- 5: https://www.youtube.com/watch?v=_vsJfC08nYE
- 6: https://www.youtube.com/watch?v=DzhVEK65eYg
- 7: https://forum.sentry.io/t/problem-with-nodejs-captureexception/345
- 8: https://docs.sentry.io/platforms/javascript/guides/node/
- 9: https://community.wappler.io/t/how-to-install-sentry-on-the-back-end-nodejs/31987
- 10: NodeJS and Attachment getsentry/sentry-javascript#4371
Implement Sentry v9 error capturing for database operations
Currently, the removal of the legacy Sentry interceptor leaves a gap in automatic error reporting. Given that this PR aims to migrate to Sentry v9, please replace the old interceptor with a Sentry v9–compatible solution. For instance, consider wrapping your database queries in a try/catch
block and using Sentry.captureException
along with error context configuration. An example approach:
import * as Sentry from "@sentry/node";
async function safeQuery(query, params) {
try {
return await database.query(query, params);
} catch (error) {
Sentry.captureException(error);
Sentry.configureScope(scope => {
scope.setContext("Database Query", { query, params });
});
throw error;
}
}
- Action required: Implement a Sentry v9–compatible interceptor or query wrapper to ensure database errors are properly captured and reported.
Sentry.getCurrentScope().setUser({ | ||
id, | ||
}); |
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.
💡 Verification agent
🧩 Analysis chain
LGTM! Simplified user context setting.
The change to use getCurrentScope().setUser()
instead of configureScope
is a good modernization that aligns with Sentry v9's best practices for setting user context.
Let's verify that all instances of configureScope
have been migrated:
🏁 Script executed:
#!/bin/bash
# Search for any remaining uses of configureScope
rg "configureScope" --type ts
Length of output: 115
Action Required: Migrate Remaining configureScope
Usage
The update in packages/services/server/src/use-sentry-user.ts
is spot on, leveraging getCurrentScope().setUser()
per Sentry v9 best practices. However, the verification script found an instance still calling configureScope
in:
- packages/services/server/src/graphql-handler.ts
→ Please review whether this usage should be updated for consistency with the new Sentry configuration approach.
🐋 This PR was built and pushed to the following Docker images: Targets: Platforms: Image Tag: Docker Bake metadata{
"app": {
"buildx.build.provenance": {
"buildType": "https://mobyproject.org/buildkit@v1",
"materials": [
{
"uri": "pkg:docker/[email protected]?platform=linux%2Farm64",
"digest": {
"sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
}
}
],
"invocation": {
"configSource": {
"entryPoint": "services.dockerfile"
},
"parameters": {
"frontend": "dockerfile.v0",
"args": {
"build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/api/health",
"build-arg:IMAGE_DESCRIPTION": "The app of the GraphQL Hive project.",
"build-arg:IMAGE_TITLE": "graphql-hive/app",
"build-arg:PORT": "3000",
"build-arg:RELEASE": "77a05164641b5c5cda45c5442afce7d77c322876",
"build-arg:SERVICE_DIR_NAME": "@hive/app",
"context:dist": "local:dist",
"context:shared": "local:shared",
"frontend.caps": "moby.buildkit.frontend.contexts+forward",
"local-sessionid:context": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:dockerfile": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:shared": "xjacy7udbvsd8y3g62puneexu"
},
"locals": [
{
"name": "context"
},
{
"name": "dist"
},
{
"name": "dockerfile"
},
{
"name": "shared"
}
]
},
"environment": {
"platform": "linux/arm64"
}
}
},
"buildx.build.ref": "builder-7c05b933-1024-4d12-8632-12e59c019e20/builder-7c05b933-1024-4d12-8632-12e59c019e200/q219rqml9kulicooh6ill4cja",
"containerimage.config.digest": "sha256:e10e9999b83098aefb465b9ed5511a9b094b2594576f84e2593c9f2034c0568c",
"containerimage.descriptor": {
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:2b5e48bb91b82ac23fb16b46213a7f4ff9b772ec4ec120d7bfa426d29bb36dd3",
"size": 2075,
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
"containerimage.digest": "sha256:2b5e48bb91b82ac23fb16b46213a7f4ff9b772ec4ec120d7bfa426d29bb36dd3",
"image.name": "ghcr.io/graphql-hive/app:77a05164641b5c5cda45c5442afce7d77c322876-arm64,ghcr.io/graphql-hive/app:sentry_fix_2-arm64"
},
"buildx.build.warnings": [
{
"vertex": "sha256:4ee86491a9bfff40dbbd09cec68dd9a10ca4db435526384e50078b44c862107e",
"level": 1,
"short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRSRUxFQVNFJyAobGluZSAxMik=",
"detail": [
"VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
],
"url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
"sourceInfo": {
"filename": "migrations.dockerfile",
"data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSBjYS1jZXJ0aWZpY2F0ZXMKCldPUktESVIgL3Vzci9zcmMvYXBwCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgTk9ERV9FTlYgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQoKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmxpY2Vuc2VzPU1JVApMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudGl0bGU9JElNQUdFX1RJVExFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZXJzaW9uPSRSRUxFQVNFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5kZXNjcmlwdGlvbj0kSU1BR0VfREVTQ1JJUFRJT04KTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmF1dGhvcnM9IlRoZSBHdWlsZCIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlbmRvcj0iS2FtaWwgS2lzaWVsYSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnVybD0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnNvdXJjZT0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKCkVOVFJZUE9JTlQgWyAiL2VudHJ5cG9pbnQuc2giIF0K",
"language": "Dockerfile"
},
"range": [
{
"start": {
"line": 12
},
"end": {
"line": 12
}
}
]
},
{
"vertex": "sha256:4ee86491a9bfff40dbbd09cec68dd9a10ca4db435526384e50078b44c862107e",
"level": 1,
"short": "TGVnYWN5S2V5VmFsdWVGb3JtYXQ6ICJFTlYga2V5PXZhbHVlIiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGxlZ2FjeSAiRU5WIGtleSB2YWx1ZSIgZm9ybWF0IChsaW5lIDEyKQ==",
"detail": [
"TGVnYWN5IGtleS92YWx1ZSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlIHNlcGFyYXRvciBzaG91bGQgbm90IGJlIHVzZWQ="
],
"url": "https://docs.docker.com/go/dockerfile/rule/legacy-key-value-format/",
"sourceInfo": {
"filename": "migrations.dockerfile",
"data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSBjYS1jZXJ0aWZpY2F0ZXMKCldPUktESVIgL3Vzci9zcmMvYXBwCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgTk9ERV9FTlYgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQoKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmxpY2Vuc2VzPU1JVApMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudGl0bGU9JElNQUdFX1RJVExFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZXJzaW9uPSRSRUxFQVNFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5kZXNjcmlwdGlvbj0kSU1BR0VfREVTQ1JJUFRJT04KTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmF1dGhvcnM9IlRoZSBHdWlsZCIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlbmRvcj0iS2FtaWwgS2lzaWVsYSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnVybD0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnNvdXJjZT0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKCkVOVFJZUE9JTlQgWyAiL2VudHJ5cG9pbnQuc2giIF0K",
"language": "Dockerfile"
},
"range": [
{
"start": {
"line": 12
},
"end": {
"line": 12
}
}
]
},
{
"vertex": "sha256:8c57c79421b57d33332a4e77c30c3335201b18aa28c7a26c95e1431ae15cc8bf",
"level": 1,
"short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRSRUxFQVNFJyAobGluZSAyMSk=",
"detail": [
"VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
],
"url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
"sourceInfo": {
"filename": "services.dockerfile",
"data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSB3Z2V0IGNhLWNlcnRpZmljYXRlcyAmJiBybSAtcmYgL3Zhci9saWIvYXB0L2xpc3RzLyoKCkFSRyBTRVJWSUNFX0RJUl9OQU1FCldPUktESVIgL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5WIEVOVklST05NRU5UIHByb2R1Y3Rpb24KRU5WIFJFTEVBU0UgJFJFTEVBU0UKRU5WIFBPUlQgJFBPUlQKCkhFQUxUSENIRUNLIC0taW50ZXJ2YWw9NXMgXAogIC0tdGltZW91dD01cyBcCiAgLS1zdGFydC1wZXJpb2Q9NXMgXAogIC0tcmV0cmllcz02IFwKICBDTUQgJEhFQUxUSENIRUNLX0NNRAoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
"language": "Dockerfile"
},
"range": [
{
"start": {
"line": 21
},
"end": {
"line": 21
}
}
]
},
{
"vertex": "sha256:8c57c79421b57d33332a4e77c30c3335201b18aa28c7a26c95e1431ae15cc8bf",
"level": 1,
"short": "TGVnYWN5S2V5VmFsdWVGb3JtYXQ6ICJFTlYga2V5PXZhbHVlIiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGxlZ2FjeSAiRU5WIGtleSB2YWx1ZSIgZm9ybWF0IChsaW5lIDIyKQ==",
"detail": [
"TGVnYWN5IGtleS92YWx1ZSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlIHNlcGFyYXRvciBzaG91bGQgbm90IGJlIHVzZWQ="
],
"url": "https://docs.docker.com/go/dockerfile/rule/legacy-key-value-format/",
"sourceInfo": {
"filename": "services.dockerfile",
"data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSB3Z2V0IGNhLWNlcnRpZmljYXRlcyAmJiBybSAtcmYgL3Zhci9saWIvYXB0L2xpc3RzLyoKCkFSRyBTRVJWSUNFX0RJUl9OQU1FCldPUktESVIgL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5WIEVOVklST05NRU5UIHByb2R1Y3Rpb24KRU5WIFJFTEVBU0UgJFJFTEVBU0UKRU5WIFBPUlQgJFBPUlQKCkhFQUxUSENIRUNLIC0taW50ZXJ2YWw9NXMgXAogIC0tdGltZW91dD01cyBcCiAgLS1zdGFydC1wZXJpb2Q9NXMgXAogIC0tcmV0cmllcz02IFwKICBDTUQgJEhFQUxUSENIRUNLX0NNRAoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
"language": "Dockerfile"
},
"range": [
{
"start": {
"line": 22
},
"end": {
"line": 22
}
}
]
},
{
"vertex": "sha256:4ee86491a9bfff40dbbd09cec68dd9a10ca4db435526384e50078b44c862107e",
"level": 1,
"short": "TGVnYWN5S2V5VmFsdWVGb3JtYXQ6ICJFTlYga2V5PXZhbHVlIiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGxlZ2FjeSAiRU5WIGtleSB2YWx1ZSIgZm9ybWF0IChsaW5lIDExKQ==",
"detail": [
"TGVnYWN5IGtleS92YWx1ZSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlIHNlcGFyYXRvciBzaG91bGQgbm90IGJlIHVzZWQ="
],
"url": "https://docs.docker.com/go/dockerfile/rule/legacy-key-value-format/",
"sourceInfo": {
"filename": "migrations.dockerfile",
"data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSBjYS1jZXJ0aWZpY2F0ZXMKCldPUktESVIgL3Vzci9zcmMvYXBwCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgTk9ERV9FTlYgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQoKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmxpY2Vuc2VzPU1JVApMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudGl0bGU9JElNQUdFX1RJVExFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZXJzaW9uPSRSRUxFQVNFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5kZXNjcmlwdGlvbj0kSU1BR0VfREVTQ1JJUFRJT04KTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmF1dGhvcnM9IlRoZSBHdWlsZCIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlbmRvcj0iS2FtaWwgS2lzaWVsYSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnVybD0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnNvdXJjZT0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKCkVOVFJZUE9JTlQgWyAiL2VudHJ5cG9pbnQuc2giIF0K",
"language": "Dockerfile"
},
"range": [
{
"start": {
"line": 11
},
"end": {
"line": 11
}
}
]
},
{
"vertex": "sha256:8c57c79421b57d33332a4e77c30c3335201b18aa28c7a26c95e1431ae15cc8bf",
"level": 1,
"short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRSRUxFQVNFJyAobGluZSAxMyk=",
"detail": [
"VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
],
"url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
"sourceInfo": {
"filename": "services.dockerfile",
"data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSB3Z2V0IGNhLWNlcnRpZmljYXRlcyAmJiBybSAtcmYgL3Zhci9saWIvYXB0L2xpc3RzLyoKCkFSRyBTRVJWSUNFX0RJUl9OQU1FCldPUktESVIgL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5WIEVOVklST05NRU5UIHByb2R1Y3Rpb24KRU5WIFJFTEVBU0UgJFJFTEVBU0UKRU5WIFBPUlQgJFBPUlQKCkhFQUxUSENIRUNLIC0taW50ZXJ2YWw9NXMgXAogIC0tdGltZW91dD01cyBcCiAgLS1zdGFydC1wZXJpb2Q9NXMgXAogIC0tcmV0cmllcz02IFwKICBDTUQgJEhFQUxUSENIRUNLX0NNRAoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
"language": "Dockerfile"
},
"range": [
{
"start": {
"line": 13
},
"end": {
"line": 13
}
}
]
},
{
"vertex": "sha256:4ee86491a9bfff40dbbd09cec68dd9a10ca4db435526384e50078b44c862107e",
"level": 1,
"short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRJTUFHRV9USVRMRScgKGxpbmUgMTUp",
"detail": [
"VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
],
"url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
"sourceInfo": {
"filename": "migrations.dockerfile",
"data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSBjYS1jZXJ0aWZpY2F0ZXMKCldPUktESVIgL3Vzci9zcmMvYXBwCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgTk9ERV9FTlYgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQoKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmxpY2Vuc2VzPU1JVApMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudGl0bGU9JElNQUdFX1RJVExFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZXJzaW9uPSRSRUxFQVNFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5kZXNjcmlwdGlvbj0kSU1BR0VfREVTQ1JJUFRJT04KTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmF1dGhvcnM9IlRoZSBHdWlsZCIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlbmRvcj0iS2FtaWwgS2lzaWVsYSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnVybD0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnNvdXJjZT0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKCkVOVFJZUE9JTlQgWyAiL2VudHJ5cG9pbnQuc2giIF0K",
"language": "Dockerfile"
},
"range": [
{
"start": {
"line": 15
},
"end": {
"line": 15
}
}
]
},
{
"vertex": "sha256:4ee86491a9bfff40dbbd09cec68dd9a10ca4db435526384e50078b44c862107e",
"level": 1,
"short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRJTUFHRV9ERVNDUklQVElPTicgKGxpbmUgMTcp",
"detail": [
"VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
],
"url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
"sourceInfo": {
"filename": "migrations.dockerfile",
"data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSBjYS1jZXJ0aWZpY2F0ZXMKCldPUktESVIgL3Vzci9zcmMvYXBwCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgTk9ERV9FTlYgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQoKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmxpY2Vuc2VzPU1JVApMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudGl0bGU9JElNQUdFX1RJVExFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZXJzaW9uPSRSRUxFQVNFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5kZXNjcmlwdGlvbj0kSU1BR0VfREVTQ1JJUFRJT04KTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmF1dGhvcnM9IlRoZSBHdWlsZCIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlbmRvcj0iS2FtaWwgS2lzaWVsYSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnVybD0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnNvdXJjZT0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKCkVOVFJZUE9JTlQgWyAiL2VudHJ5cG9pbnQuc2giIF0K",
"language": "Dockerfile"
},
"range": [
{
"start": {
"line": 17
},
"end": {
"line": 17
}
}
]
},
{
"vertex": "sha256:8c57c79421b57d33332a4e77c30c3335201b18aa28c7a26c95e1431ae15cc8bf",
"level": 1,
"short": "TGVnYWN5S2V5VmFsdWVGb3JtYXQ6ICJFTlYga2V5PXZhbHVlIiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGxlZ2FjeSAiRU5WIGtleSB2YWx1ZSIgZm9ybWF0IChsaW5lIDIwKQ==",
"detail": [
"TGVnYWN5IGtleS92YWx1ZSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlIHNlcGFyYXRvciBzaG91bGQgbm90IGJlIHVzZWQ="
],
"url": "https://docs.docker.com/go/dockerfile/rule/legacy-key-value-format/",
"sourceInfo": {
"filename": "services.dockerfile",
"data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSB3Z2V0IGNhLWNlcnRpZmljYXRlcyAmJiBybSAtcmYgL3Zhci9saWIvYXB0L2xpc3RzLyoKCkFSRyBTRVJWSUNFX0RJUl9OQU1FCldPUktESVIgL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5WIEVOVklST05NRU5UIHByb2R1Y3Rpb24KRU5WIFJFTEVBU0UgJFJFTEVBU0UKRU5WIFBPUlQgJFBPUlQKCkhFQUxUSENIRUNLIC0taW50ZXJ2YWw9NXMgXAogIC0tdGltZW91dD01cyBcCiAgLS1zdGFydC1wZXJpb2Q9NXMgXAogIC0tcmV0cmllcz02IFwKICBDTUQgJEhFQUxUSENIRUNLX0NNRAoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
"language": "Dockerfile"
},
"range": [
{
"start": {
"line": 20
},
"end": {
"line": 20
}
}
]
},
{
"vertex": "sha256:8c57c79421b57d33332a4e77c30c3335201b18aa28c7a26c95e1431ae15cc8bf",
"level": 1,
"short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRQT1JUJyAobGluZSAyMik=",
"detail": [
"VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
],
"url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
"sourceInfo": {
"filename": "services.dockerfile",
"data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSB3Z2V0IGNhLWNlcnRpZmljYXRlcyAmJiBybSAtcmYgL3Zhci9saWIvYXB0L2xpc3RzLyoKCkFSRyBTRVJWSUNFX0RJUl9OQU1FCldPUktESVIgL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5WIEVOVklST05NRU5UIHByb2R1Y3Rpb24KRU5WIFJFTEVBU0UgJFJFTEVBU0UKRU5WIFBPUlQgJFBPUlQKCkhFQUxUSENIRUNLIC0taW50ZXJ2YWw9NXMgXAogIC0tdGltZW91dD01cyBcCiAgLS1zdGFydC1wZXJpb2Q9NXMgXAogIC0tcmV0cmllcz02IFwKICBDTUQgJEhFQUxUSENIRUNLX0NNRAoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
"language": "Dockerfile"
},
"range": [
{
"start": {
"line": 22
},
"end": {
"line": 22
}
}
]
},
{
"vertex": "sha256:4ee86491a9bfff40dbbd09cec68dd9a10ca4db435526384e50078b44c862107e",
"level": 1,
"short": "TGVnYWN5S2V5VmFsdWVGb3JtYXQ6ICJFTlYga2V5PXZhbHVlIiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGxlZ2FjeSAiRU5WIGtleSB2YWx1ZSIgZm9ybWF0IChsaW5lIDEwKQ==",
"detail": [
"TGVnYWN5IGtleS92YWx1ZSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlIHNlcGFyYXRvciBzaG91bGQgbm90IGJlIHVzZWQ="
],
"url": "https://docs.docker.com/go/dockerfile/rule/legacy-key-value-format/",
"sourceInfo": {
"filename": "migrations.dockerfile",
"data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSBjYS1jZXJ0aWZpY2F0ZXMKCldPUktESVIgL3Vzci9zcmMvYXBwCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpFTlYgRU5WSVJPTk1FTlQgcHJvZHVjdGlvbgpFTlYgTk9ERV9FTlYgcHJvZHVjdGlvbgpFTlYgUkVMRUFTRSAkUkVMRUFTRQoKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmxpY2Vuc2VzPU1JVApMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudGl0bGU9JElNQUdFX1RJVExFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS52ZXJzaW9uPSRSRUxFQVNFCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS5kZXNjcmlwdGlvbj0kSU1BR0VfREVTQ1JJUFRJT04KTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmF1dGhvcnM9IlRoZSBHdWlsZCIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlbmRvcj0iS2FtaWwgS2lzaWVsYSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnVybD0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnNvdXJjZT0iaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwtaGl2ZS9wbGF0Zm9ybSIKCkVOVFJZUE9JTlQgWyAiL2VudHJ5cG9pbnQuc2giIF0K",
"language": "Dockerfile"
},
"range": [
{
"start": {
"line": 10
},
"end": {
"line": 10
}
}
]
},
{
"vertex": "sha256:8c57c79421b57d33332a4e77c30c3335201b18aa28c7a26c95e1431ae15cc8bf",
"level": 1,
"short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRJTUFHRV9USVRMRScgKGxpbmUgMTIp",
"detail": [
"VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
],
"url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
"sourceInfo": {
"filename": "services.dockerfile",
"data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSB3Z2V0IGNhLWNlcnRpZmljYXRlcyAmJiBybSAtcmYgL3Zhci9saWIvYXB0L2xpc3RzLyoKCkFSRyBTRVJWSUNFX0RJUl9OQU1FCldPUktESVIgL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5WIEVOVklST05NRU5UIHByb2R1Y3Rpb24KRU5WIFJFTEVBU0UgJFJFTEVBU0UKRU5WIFBPUlQgJFBPUlQKCkhFQUxUSENIRUNLIC0taW50ZXJ2YWw9NXMgXAogIC0tdGltZW91dD01cyBcCiAgLS1zdGFydC1wZXJpb2Q9NXMgXAogIC0tcmV0cmllcz02IFwKICBDTUQgJEhFQUxUSENIRUNLX0NNRAoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
"language": "Dockerfile"
},
"range": [
{
"start": {
"line": 12
},
"end": {
"line": 12
}
}
]
},
{
"vertex": "sha256:8c57c79421b57d33332a4e77c30c3335201b18aa28c7a26c95e1431ae15cc8bf",
"level": 1,
"short": "VW5kZWZpbmVkVmFyOiBVc2FnZSBvZiB1bmRlZmluZWQgdmFyaWFibGUgJyRJTUFHRV9ERVNDUklQVElPTicgKGxpbmUgMTQp",
"detail": [
"VmFyaWFibGVzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSB0aGVpciB1c2U="
],
"url": "https://docs.docker.com/go/dockerfile/rule/undefined-var/",
"sourceInfo": {
"filename": "services.dockerfile",
"data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSB3Z2V0IGNhLWNlcnRpZmljYXRlcyAmJiBybSAtcmYgL3Zhci9saWIvYXB0L2xpc3RzLyoKCkFSRyBTRVJWSUNFX0RJUl9OQU1FCldPUktESVIgL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5WIEVOVklST05NRU5UIHByb2R1Y3Rpb24KRU5WIFJFTEVBU0UgJFJFTEVBU0UKRU5WIFBPUlQgJFBPUlQKCkhFQUxUSENIRUNLIC0taW50ZXJ2YWw9NXMgXAogIC0tdGltZW91dD01cyBcCiAgLS1zdGFydC1wZXJpb2Q9NXMgXAogIC0tcmV0cmllcz02IFwKICBDTUQgJEhFQUxUSENIRUNLX0NNRAoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
"language": "Dockerfile"
},
"range": [
{
"start": {
"line": 14
},
"end": {
"line": 14
}
}
]
},
{
"vertex": "sha256:8c57c79421b57d33332a4e77c30c3335201b18aa28c7a26c95e1431ae15cc8bf",
"level": 1,
"short": "TGVnYWN5S2V5VmFsdWVGb3JtYXQ6ICJFTlYga2V5PXZhbHVlIiBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIGxlZ2FjeSAiRU5WIGtleSB2YWx1ZSIgZm9ybWF0IChsaW5lIDIxKQ==",
"detail": [
"TGVnYWN5IGtleS92YWx1ZSBmb3JtYXQgd2l0aCB3aGl0ZXNwYWNlIHNlcGFyYXRvciBzaG91bGQgbm90IGJlIHVzZWQ="
],
"url": "https://docs.docker.com/go/dockerfile/rule/legacy-key-value-format/",
"sourceInfo": {
"filename": "services.dockerfile",
"data": "RlJPTSBub2RlOjIyLjEzLjAtc2xpbQoKUlVOIGFwdC1nZXQgdXBkYXRlICYmIGFwdC1nZXQgaW5zdGFsbCAteSB3Z2V0IGNhLWNlcnRpZmljYXRlcyAmJiBybSAtcmYgL3Zhci9saWIvYXB0L2xpc3RzLyoKCkFSRyBTRVJWSUNFX0RJUl9OQU1FCldPUktESVIgL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FCgpDT1BZIC0tZnJvbT1kaXN0IC4gL3Vzci9zcmMvYXBwLyRTRVJWSUNFX0RJUl9OQU1FLwpDT1BZIC0tZnJvbT1zaGFyZWQgLiAvCgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UubGljZW5zZXM9TUlUCkxBQkVMIG9yZy5vcGVuY29udGFpbmVycy5pbWFnZS50aXRsZT0kSU1BR0VfVElUTEUKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLnZlcnNpb249JFJFTEVBU0UKTEFCRUwgb3JnLm9wZW5jb250YWluZXJzLmltYWdlLmRlc2NyaXB0aW9uPSRJTUFHRV9ERVNDUklQVElPTgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UuYXV0aG9ycz0iVGhlIEd1aWxkIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudmVuZG9yPSJLYW1pbCBLaXNpZWxhIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2UudXJsPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgpMQUJFTCBvcmcub3BlbmNvbnRhaW5lcnMuaW1hZ2Uuc291cmNlPSJodHRwczovL2dpdGh1Yi5jb20vZ3JhcGhxbC1oaXZlL3BsYXRmb3JtIgoKRU5WIEVOVklST05NRU5UIHByb2R1Y3Rpb24KRU5WIFJFTEVBU0UgJFJFTEVBU0UKRU5WIFBPUlQgJFBPUlQKCkhFQUxUSENIRUNLIC0taW50ZXJ2YWw9NXMgXAogIC0tdGltZW91dD01cyBcCiAgLS1zdGFydC1wZXJpb2Q9NXMgXAogIC0tcmV0cmllcz02IFwKICBDTUQgJEhFQUxUSENIRUNLX0NNRAoKRU5UUllQT0lOVCBbICIvZW50cnlwb2ludC5zaCIgXQo=",
"language": "Dockerfile"
},
"range": [
{
"start": {
"line": 21
},
"end": {
"line": 21
}
}
]
}
],
"composition-federation-2": {
"buildx.build.provenance": {
"buildType": "https://mobyproject.org/buildkit@v1",
"materials": [
{
"uri": "pkg:docker/[email protected]?platform=linux%2Farm64",
"digest": {
"sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
}
}
],
"invocation": {
"configSource": {
"entryPoint": "services.dockerfile"
},
"parameters": {
"frontend": "dockerfile.v0",
"args": {
"build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
"build-arg:IMAGE_DESCRIPTION": "Federation 2 Composition Service for GraphQL Hive.",
"build-arg:IMAGE_TITLE": "graphql-hive/composition-federation-2",
"build-arg:PORT": "3069",
"build-arg:RELEASE": "77a05164641b5c5cda45c5442afce7d77c322876",
"build-arg:SERVICE_DIR_NAME": "@hive/external-composition",
"context:dist": "local:dist",
"context:shared": "local:shared",
"frontend.caps": "moby.buildkit.frontend.contexts+forward",
"local-sessionid:context": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:dockerfile": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:shared": "xjacy7udbvsd8y3g62puneexu"
},
"locals": [
{
"name": "context"
},
{
"name": "dist"
},
{
"name": "dockerfile"
},
{
"name": "shared"
}
]
},
"environment": {
"platform": "linux/arm64"
}
}
},
"buildx.build.ref": "builder-7c05b933-1024-4d12-8632-12e59c019e20/builder-7c05b933-1024-4d12-8632-12e59c019e200/mb8xmnj0t7lps0d55yjgyz2de",
"containerimage.config.digest": "sha256:0d85156f66bd0470ce110fe6595d04acef9a97914054b794d54a2a3311299f5b",
"containerimage.descriptor": {
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:2721ce5ac4db747ed9c90ed2408021ed4719e58db14ddc5c088b535168351295",
"size": 2075,
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
"containerimage.digest": "sha256:2721ce5ac4db747ed9c90ed2408021ed4719e58db14ddc5c088b535168351295",
"image.name": "ghcr.io/graphql-hive/composition-federation-2:77a05164641b5c5cda45c5442afce7d77c322876-arm64,ghcr.io/graphql-hive/composition-federation-2:sentry_fix_2-arm64"
},
"emails": {
"buildx.build.provenance": {
"buildType": "https://mobyproject.org/buildkit@v1",
"materials": [
{
"uri": "pkg:docker/[email protected]?platform=linux%2Farm64",
"digest": {
"sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
}
}
],
"invocation": {
"configSource": {
"entryPoint": "services.dockerfile"
},
"parameters": {
"frontend": "dockerfile.v0",
"args": {
"build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
"build-arg:IMAGE_DESCRIPTION": "The emails service of the GraphQL Hive project.",
"build-arg:IMAGE_TITLE": "graphql-hive/emails",
"build-arg:PORT": "3006",
"build-arg:RELEASE": "77a05164641b5c5cda45c5442afce7d77c322876",
"build-arg:SERVICE_DIR_NAME": "@hive/emails",
"context:dist": "local:dist",
"context:shared": "local:shared",
"frontend.caps": "moby.buildkit.frontend.contexts+forward",
"local-sessionid:context": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:dockerfile": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:shared": "xjacy7udbvsd8y3g62puneexu"
},
"locals": [
{
"name": "context"
},
{
"name": "dist"
},
{
"name": "dockerfile"
},
{
"name": "shared"
}
]
},
"environment": {
"platform": "linux/arm64"
}
}
},
"buildx.build.ref": "builder-7c05b933-1024-4d12-8632-12e59c019e20/builder-7c05b933-1024-4d12-8632-12e59c019e200/snrkn1om5ppo552o5tnww1bk2",
"containerimage.config.digest": "sha256:6e223c22860d9eb50d4f7dbb936065c608b49403d5126edeacc9d16d64167dcf",
"containerimage.descriptor": {
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:63853a527c192a47611f658025d4dffc327db04792b20cefd6b4ec47aeb43f36",
"size": 2075,
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
"containerimage.digest": "sha256:63853a527c192a47611f658025d4dffc327db04792b20cefd6b4ec47aeb43f36",
"image.name": "ghcr.io/graphql-hive/emails:77a05164641b5c5cda45c5442afce7d77c322876-arm64,ghcr.io/graphql-hive/emails:sentry_fix_2-arm64"
},
"policy": {
"buildx.build.provenance": {
"buildType": "https://mobyproject.org/buildkit@v1",
"materials": [
{
"uri": "pkg:docker/[email protected]?platform=linux%2Farm64",
"digest": {
"sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
}
}
],
"invocation": {
"configSource": {
"entryPoint": "services.dockerfile"
},
"parameters": {
"frontend": "dockerfile.v0",
"args": {
"build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
"build-arg:IMAGE_DESCRIPTION": "The policy service of the GraphQL Hive project.",
"build-arg:IMAGE_TITLE": "graphql-hive/policy",
"build-arg:PORT": "3012",
"build-arg:RELEASE": "77a05164641b5c5cda45c5442afce7d77c322876",
"build-arg:SERVICE_DIR_NAME": "@hive/policy",
"context:dist": "local:dist",
"context:shared": "local:shared",
"frontend.caps": "moby.buildkit.frontend.contexts+forward",
"local-sessionid:context": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:dockerfile": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:shared": "xjacy7udbvsd8y3g62puneexu"
},
"locals": [
{
"name": "context"
},
{
"name": "dist"
},
{
"name": "dockerfile"
},
{
"name": "shared"
}
]
},
"environment": {
"platform": "linux/arm64"
}
}
},
"buildx.build.ref": "builder-7c05b933-1024-4d12-8632-12e59c019e20/builder-7c05b933-1024-4d12-8632-12e59c019e200/n2m6s65ablqihyvquizpsrvz7",
"containerimage.config.digest": "sha256:808708406d687f360891aa46eed46adaae71e0cd5c839cce679bd65dc5b74303",
"containerimage.descriptor": {
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:e0a2bc7fbe92979bb3dcb9eb3aec660d064b69652d261fb0d5e507ffff3ec010",
"size": 2075,
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
"containerimage.digest": "sha256:e0a2bc7fbe92979bb3dcb9eb3aec660d064b69652d261fb0d5e507ffff3ec010",
"image.name": "ghcr.io/graphql-hive/policy:77a05164641b5c5cda45c5442afce7d77c322876-arm64,ghcr.io/graphql-hive/policy:sentry_fix_2-arm64"
},
"rate-limit": {
"buildx.build.provenance": {
"buildType": "https://mobyproject.org/buildkit@v1",
"materials": [
{
"uri": "pkg:docker/[email protected]?platform=linux%2Farm64",
"digest": {
"sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
}
}
],
"invocation": {
"configSource": {
"entryPoint": "services.dockerfile"
},
"parameters": {
"frontend": "dockerfile.v0",
"args": {
"build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
"build-arg:IMAGE_DESCRIPTION": "The rate limit service of the GraphQL Hive project.",
"build-arg:IMAGE_TITLE": "graphql-hive/rate-limit",
"build-arg:PORT": "3009",
"build-arg:RELEASE": "77a05164641b5c5cda45c5442afce7d77c322876",
"build-arg:SERVICE_DIR_NAME": "@hive/rate-limit",
"context:dist": "local:dist",
"context:shared": "local:shared",
"frontend.caps": "moby.buildkit.frontend.contexts+forward",
"local-sessionid:context": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:dockerfile": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:shared": "xjacy7udbvsd8y3g62puneexu"
},
"locals": [
{
"name": "context"
},
{
"name": "dist"
},
{
"name": "dockerfile"
},
{
"name": "shared"
}
]
},
"environment": {
"platform": "linux/arm64"
}
}
},
"buildx.build.ref": "builder-7c05b933-1024-4d12-8632-12e59c019e20/builder-7c05b933-1024-4d12-8632-12e59c019e200/8pbvnd2h1yt6yuv0tb701to9v",
"containerimage.config.digest": "sha256:70cd2b72a2d88317a3b122422596923cc168e18592c14c180e6820aa7d9b5126",
"containerimage.descriptor": {
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:465519445a8dc85ebc5d3539143775ae339bd4e76294264e7c101dcf59a454ea",
"size": 2075,
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
"containerimage.digest": "sha256:465519445a8dc85ebc5d3539143775ae339bd4e76294264e7c101dcf59a454ea",
"image.name": "ghcr.io/graphql-hive/rate-limit:77a05164641b5c5cda45c5442afce7d77c322876-arm64,ghcr.io/graphql-hive/rate-limit:sentry_fix_2-arm64"
},
"schema": {
"buildx.build.provenance": {
"buildType": "https://mobyproject.org/buildkit@v1",
"materials": [
{
"uri": "pkg:docker/[email protected]?platform=linux%2Farm64",
"digest": {
"sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
}
}
],
"invocation": {
"configSource": {
"entryPoint": "services.dockerfile"
},
"parameters": {
"frontend": "dockerfile.v0",
"args": {
"build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
"build-arg:IMAGE_DESCRIPTION": "The schema service of the GraphQL Hive project.",
"build-arg:IMAGE_TITLE": "graphql-hive/schema",
"build-arg:PORT": "3002",
"build-arg:RELEASE": "77a05164641b5c5cda45c5442afce7d77c322876",
"build-arg:SERVICE_DIR_NAME": "@hive/schema",
"context:dist": "local:dist",
"context:shared": "local:shared",
"frontend.caps": "moby.buildkit.frontend.contexts+forward",
"local-sessionid:context": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:dockerfile": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:shared": "xjacy7udbvsd8y3g62puneexu"
},
"locals": [
{
"name": "context"
},
{
"name": "dist"
},
{
"name": "dockerfile"
},
{
"name": "shared"
}
]
},
"environment": {
"platform": "linux/arm64"
}
}
},
"buildx.build.ref": "builder-7c05b933-1024-4d12-8632-12e59c019e20/builder-7c05b933-1024-4d12-8632-12e59c019e200/psab5va8cjgb7qd3q3ebuz6ha",
"containerimage.config.digest": "sha256:9d164dcbcb109c16258aaa65570cfc020ef2081b5fc1b5b27825bdfc7b87e606",
"containerimage.descriptor": {
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:7f19f714ff30225300a5ba65bab06b096eb263bf4f70591ed55a89473facd79d",
"size": 2075,
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
"containerimage.digest": "sha256:7f19f714ff30225300a5ba65bab06b096eb263bf4f70591ed55a89473facd79d",
"image.name": "ghcr.io/graphql-hive/schema:77a05164641b5c5cda45c5442afce7d77c322876-arm64,ghcr.io/graphql-hive/schema:sentry_fix_2-arm64"
},
"server": {
"buildx.build.provenance": {
"buildType": "https://mobyproject.org/buildkit@v1",
"materials": [
{
"uri": "pkg:docker/[email protected]?platform=linux%2Farm64",
"digest": {
"sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
}
}
],
"invocation": {
"configSource": {
"entryPoint": "services.dockerfile"
},
"parameters": {
"frontend": "dockerfile.v0",
"args": {
"build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
"build-arg:IMAGE_DESCRIPTION": "The server service of the GraphQL Hive project.",
"build-arg:IMAGE_TITLE": "graphql-hive/server",
"build-arg:PORT": "3001",
"build-arg:RELEASE": "77a05164641b5c5cda45c5442afce7d77c322876",
"build-arg:SERVICE_DIR_NAME": "@hive/server",
"context:dist": "local:dist",
"context:shared": "local:shared",
"frontend.caps": "moby.buildkit.frontend.contexts+forward",
"local-sessionid:context": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:dockerfile": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:shared": "xjacy7udbvsd8y3g62puneexu"
},
"locals": [
{
"name": "context"
},
{
"name": "dist"
},
{
"name": "dockerfile"
},
{
"name": "shared"
}
]
},
"environment": {
"platform": "linux/arm64"
}
}
},
"buildx.build.ref": "builder-7c05b933-1024-4d12-8632-12e59c019e20/builder-7c05b933-1024-4d12-8632-12e59c019e200/id5jivnvozhhzsbldi2h62aa2",
"containerimage.config.digest": "sha256:51ab07c417c4eade474bc78e7f34e96e5f86ab49266b3691aa73b417f6dcc004",
"containerimage.descriptor": {
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:fed36a999163ba8dca37535a71706dc71a8786c80cbfe94792bc55047ebbb1c6",
"size": 2076,
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
"containerimage.digest": "sha256:fed36a999163ba8dca37535a71706dc71a8786c80cbfe94792bc55047ebbb1c6",
"image.name": "ghcr.io/graphql-hive/server:77a05164641b5c5cda45c5442afce7d77c322876-arm64,ghcr.io/graphql-hive/server:sentry_fix_2-arm64"
},
"storage": {
"buildx.build.provenance": {
"buildType": "https://mobyproject.org/buildkit@v1",
"materials": [
{
"uri": "pkg:docker/[email protected]?platform=linux%2Farm64",
"digest": {
"sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
}
}
],
"invocation": {
"configSource": {
"entryPoint": "migrations.dockerfile"
},
"parameters": {
"frontend": "dockerfile.v0",
"args": {
"build-arg:IMAGE_DESCRIPTION": "The migrations service of the GraphQL Hive project.",
"build-arg:IMAGE_TITLE": "graphql-hive/storage",
"build-arg:RELEASE": "77a05164641b5c5cda45c5442afce7d77c322876",
"context:dist": "local:dist",
"context:shared": "local:shared",
"frontend.caps": "moby.buildkit.frontend.contexts+forward",
"local-sessionid:context": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:dockerfile": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:shared": "xjacy7udbvsd8y3g62puneexu"
},
"locals": [
{
"name": "context"
},
{
"name": "dist"
},
{
"name": "dockerfile"
},
{
"name": "shared"
}
]
},
"environment": {
"platform": "linux/arm64"
}
}
},
"buildx.build.ref": "builder-7c05b933-1024-4d12-8632-12e59c019e20/builder-7c05b933-1024-4d12-8632-12e59c019e200/psjl7fikzel0l7yw0bcd2nt12",
"containerimage.config.digest": "sha256:7c871a4e2fba044ae57afc03846a85f54a07d9cf1ce018ea137fdd6d18eb7ad0",
"containerimage.descriptor": {
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:772949ad251a77682f242e21a5c5dc0fa2f0fecc2be5bc3fd403d1a1e1b5f4c7",
"size": 2075,
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
"containerimage.digest": "sha256:772949ad251a77682f242e21a5c5dc0fa2f0fecc2be5bc3fd403d1a1e1b5f4c7",
"image.name": "ghcr.io/graphql-hive/storage:77a05164641b5c5cda45c5442afce7d77c322876-arm64,ghcr.io/graphql-hive/storage:sentry_fix_2-arm64"
},
"stripe-billing": {
"buildx.build.provenance": {
"buildType": "https://mobyproject.org/buildkit@v1",
"materials": [
{
"uri": "pkg:docker/[email protected]?platform=linux%2Farm64",
"digest": {
"sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
}
}
],
"invocation": {
"configSource": {
"entryPoint": "services.dockerfile"
},
"parameters": {
"frontend": "dockerfile.v0",
"args": {
"build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
"build-arg:IMAGE_DESCRIPTION": "The stripe billing service of the GraphQL Hive project.",
"build-arg:IMAGE_TITLE": "graphql-hive/stripe-billing",
"build-arg:PORT": "3010",
"build-arg:RELEASE": "77a05164641b5c5cda45c5442afce7d77c322876",
"build-arg:SERVICE_DIR_NAME": "@hive/stripe-billing",
"context:dist": "local:dist",
"context:shared": "local:shared",
"frontend.caps": "moby.buildkit.frontend.contexts+forward",
"local-sessionid:context": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:dockerfile": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:shared": "xjacy7udbvsd8y3g62puneexu"
},
"locals": [
{
"name": "context"
},
{
"name": "dist"
},
{
"name": "dockerfile"
},
{
"name": "shared"
}
]
},
"environment": {
"platform": "linux/arm64"
}
}
},
"buildx.build.ref": "builder-7c05b933-1024-4d12-8632-12e59c019e20/builder-7c05b933-1024-4d12-8632-12e59c019e200/1f3zdiwgdlwyb13e7u0cyi6xm",
"containerimage.config.digest": "sha256:42072e318d045a64aa99e5d05154f1b46d51951810301dd566fd80336953a070",
"containerimage.descriptor": {
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:ed8fb3e4a4c0e2c145583ff688578500356cdd2ea3cb12751a90557708dae370",
"size": 2075,
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
"containerimage.digest": "sha256:ed8fb3e4a4c0e2c145583ff688578500356cdd2ea3cb12751a90557708dae370",
"image.name": "ghcr.io/graphql-hive/stripe-billing:77a05164641b5c5cda45c5442afce7d77c322876-arm64,ghcr.io/graphql-hive/stripe-billing:sentry_fix_2-arm64"
},
"tokens": {
"buildx.build.provenance": {
"buildType": "https://mobyproject.org/buildkit@v1",
"materials": [
{
"uri": "pkg:docker/[email protected]?platform=linux%2Farm64",
"digest": {
"sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
}
}
],
"invocation": {
"configSource": {
"entryPoint": "services.dockerfile"
},
"parameters": {
"frontend": "dockerfile.v0",
"args": {
"build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
"build-arg:IMAGE_DESCRIPTION": "The tokens service of the GraphQL Hive project.",
"build-arg:IMAGE_TITLE": "graphql-hive/tokens",
"build-arg:PORT": "3003",
"build-arg:RELEASE": "77a05164641b5c5cda45c5442afce7d77c322876",
"build-arg:SERVICE_DIR_NAME": "@hive/tokens",
"context:dist": "local:dist",
"context:shared": "local:shared",
"frontend.caps": "moby.buildkit.frontend.contexts+forward",
"local-sessionid:context": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:dockerfile": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:shared": "xjacy7udbvsd8y3g62puneexu"
},
"locals": [
{
"name": "context"
},
{
"name": "dist"
},
{
"name": "dockerfile"
},
{
"name": "shared"
}
]
},
"environment": {
"platform": "linux/arm64"
}
}
},
"buildx.build.ref": "builder-7c05b933-1024-4d12-8632-12e59c019e20/builder-7c05b933-1024-4d12-8632-12e59c019e200/16e4cvrl8irorgyn6b972fva0",
"containerimage.config.digest": "sha256:bc63367bc3def4b3d5bde2f411c6afe149b4d5250953da948562f4a7369b0201",
"containerimage.descriptor": {
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:5f4af3e370d672f1f66c25f8a30539d36c4e7b38f665a52e840f1ab380c1a8fb",
"size": 2075,
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
"containerimage.digest": "sha256:5f4af3e370d672f1f66c25f8a30539d36c4e7b38f665a52e840f1ab380c1a8fb",
"image.name": "ghcr.io/graphql-hive/tokens:77a05164641b5c5cda45c5442afce7d77c322876-arm64,ghcr.io/graphql-hive/tokens:sentry_fix_2-arm64"
},
"usage": {
"buildx.build.provenance": {
"buildType": "https://mobyproject.org/buildkit@v1",
"materials": [
{
"uri": "pkg:docker/[email protected]?platform=linux%2Farm64",
"digest": {
"sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
}
}
],
"invocation": {
"configSource": {
"entryPoint": "services.dockerfile"
},
"parameters": {
"frontend": "dockerfile.v0",
"args": {
"build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
"build-arg:IMAGE_DESCRIPTION": "The usage ingestor service of the GraphQL Hive project.",
"build-arg:IMAGE_TITLE": "graphql-hive/usage",
"build-arg:PORT": "3006",
"build-arg:RELEASE": "77a05164641b5c5cda45c5442afce7d77c322876",
"build-arg:SERVICE_DIR_NAME": "@hive/usage",
"context:dist": "local:dist",
"context:shared": "local:shared",
"frontend.caps": "moby.buildkit.frontend.contexts+forward",
"local-sessionid:context": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:dockerfile": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:shared": "xjacy7udbvsd8y3g62puneexu"
},
"locals": [
{
"name": "context"
},
{
"name": "dist"
},
{
"name": "dockerfile"
},
{
"name": "shared"
}
]
},
"environment": {
"platform": "linux/arm64"
}
}
},
"buildx.build.ref": "builder-7c05b933-1024-4d12-8632-12e59c019e20/builder-7c05b933-1024-4d12-8632-12e59c019e200/p3q8eornx9deorv7c4a85pkr6",
"containerimage.config.digest": "sha256:99bf4351643c5b08e957b69bbb4f1f0eafdeb4f2e65b0f7e4e2054afb0f8cb13",
"containerimage.descriptor": {
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:f072e26295eb294ef1618e975a499a3ad56654d7ba082033b620ebdb076095de",
"size": 2075,
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
"containerimage.digest": "sha256:f072e26295eb294ef1618e975a499a3ad56654d7ba082033b620ebdb076095de",
"image.name": "ghcr.io/graphql-hive/usage:77a05164641b5c5cda45c5442afce7d77c322876-arm64,ghcr.io/graphql-hive/usage:sentry_fix_2-arm64"
},
"usage-estimator": {
"buildx.build.provenance": {
"buildType": "https://mobyproject.org/buildkit@v1",
"materials": [
{
"uri": "pkg:docker/[email protected]?platform=linux%2Farm64",
"digest": {
"sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
}
}
],
"invocation": {
"configSource": {
"entryPoint": "services.dockerfile"
},
"parameters": {
"frontend": "dockerfile.v0",
"args": {
"build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
"build-arg:IMAGE_DESCRIPTION": "The usage estimator service of the GraphQL Hive project.",
"build-arg:IMAGE_TITLE": "graphql-hive/usage-estimator",
"build-arg:PORT": "3008",
"build-arg:RELEASE": "77a05164641b5c5cda45c5442afce7d77c322876",
"build-arg:SERVICE_DIR_NAME": "@hive/usage-estimator",
"context:dist": "local:dist",
"context:shared": "local:shared",
"frontend.caps": "moby.buildkit.frontend.contexts+forward",
"local-sessionid:context": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:dockerfile": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:shared": "xjacy7udbvsd8y3g62puneexu"
},
"locals": [
{
"name": "context"
},
{
"name": "dist"
},
{
"name": "dockerfile"
},
{
"name": "shared"
}
]
},
"environment": {
"platform": "linux/arm64"
}
}
},
"buildx.build.ref": "builder-7c05b933-1024-4d12-8632-12e59c019e20/builder-7c05b933-1024-4d12-8632-12e59c019e200/0k93es2e5cc5i7umkqbdum4dp",
"containerimage.config.digest": "sha256:367b2c1a615f4c4aedfec8361885287f7f095659e71cf559bc8178e6c6335d58",
"containerimage.descriptor": {
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:dfcc4a517c5b6dc13ed5971b97f694861e21e251b8d19865582d9e6781588e3a",
"size": 2075,
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
"containerimage.digest": "sha256:dfcc4a517c5b6dc13ed5971b97f694861e21e251b8d19865582d9e6781588e3a",
"image.name": "ghcr.io/graphql-hive/usage-estimator:77a05164641b5c5cda45c5442afce7d77c322876-arm64,ghcr.io/graphql-hive/usage-estimator:sentry_fix_2-arm64"
},
"usage-ingestor": {
"buildx.build.provenance": {
"buildType": "https://mobyproject.org/buildkit@v1",
"materials": [
{
"uri": "pkg:docker/[email protected]?platform=linux%2Farm64",
"digest": {
"sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
}
}
],
"invocation": {
"configSource": {
"entryPoint": "services.dockerfile"
},
"parameters": {
"frontend": "dockerfile.v0",
"args": {
"build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
"build-arg:IMAGE_DESCRIPTION": "The usage ingestor service of the GraphQL Hive project.",
"build-arg:IMAGE_TITLE": "graphql-hive/usage-ingestor",
"build-arg:PORT": "3007",
"build-arg:RELEASE": "77a05164641b5c5cda45c5442afce7d77c322876",
"build-arg:SERVICE_DIR_NAME": "@hive/usage-ingestor",
"context:dist": "local:dist",
"context:shared": "local:shared",
"frontend.caps": "moby.buildkit.frontend.contexts+forward",
"local-sessionid:context": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:dockerfile": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:shared": "xjacy7udbvsd8y3g62puneexu"
},
"locals": [
{
"name": "context"
},
{
"name": "dist"
},
{
"name": "dockerfile"
},
{
"name": "shared"
}
]
},
"environment": {
"platform": "linux/arm64"
}
}
},
"buildx.build.ref": "builder-7c05b933-1024-4d12-8632-12e59c019e20/builder-7c05b933-1024-4d12-8632-12e59c019e200/fzkjehr4u2fzfz58pb71a0ypj",
"containerimage.config.digest": "sha256:0cb61a61eb69b867811a01793987e7140dcb9c0959f80382d27aa27a61f171c2",
"containerimage.descriptor": {
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:0546a09c527021a1cd16f9eeae8e50b236731798577a7cd53599238bb124dafe",
"size": 2075,
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
"containerimage.digest": "sha256:0546a09c527021a1cd16f9eeae8e50b236731798577a7cd53599238bb124dafe",
"image.name": "ghcr.io/graphql-hive/usage-ingestor:77a05164641b5c5cda45c5442afce7d77c322876-arm64,ghcr.io/graphql-hive/usage-ingestor:sentry_fix_2-arm64"
},
"webhooks": {
"buildx.build.provenance": {
"buildType": "https://mobyproject.org/buildkit@v1",
"materials": [
{
"uri": "pkg:docker/[email protected]?platform=linux%2Farm64",
"digest": {
"sha256": "f5a0871ab03b035c58bdb3007c3d177b001c2145c18e81817b71624dcf7d8bff"
}
}
],
"invocation": {
"configSource": {
"entryPoint": "services.dockerfile"
},
"parameters": {
"frontend": "dockerfile.v0",
"args": {
"build-arg:HEALTHCHECK_CMD": "wget --spider -q http://127.0.0.1:${PORT}/_readiness",
"build-arg:IMAGE_DESCRIPTION": "The webhooks ingestor service of the GraphQL Hive project.",
"build-arg:IMAGE_TITLE": "graphql-hive/webhooks",
"build-arg:PORT": "3005",
"build-arg:RELEASE": "77a05164641b5c5cda45c5442afce7d77c322876",
"build-arg:SERVICE_DIR_NAME": "@hive/webhooks",
"context:dist": "local:dist",
"context:shared": "local:shared",
"frontend.caps": "moby.buildkit.frontend.contexts+forward",
"local-sessionid:context": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:dockerfile": "xjacy7udbvsd8y3g62puneexu",
"local-sessionid:shared": "xjacy7udbvsd8y3g62puneexu"
},
"locals": [
{
"name": "context"
},
{
"name": "dist"
},
{
"name": "dockerfile"
},
{
"name": "shared"
}
]
},
"environment": {
"platform": "linux/arm64"
}
}
},
"buildx.build.ref": "builder-7c05b933-1024-4d12-8632-12e59c019e20/builder-7c05b933-1024-4d12-8632-12e59c019e200/kt8r2ucwolsr6hkhysbuuhpgg",
"containerimage.config.digest": "sha256:2e3d8eb08dc7c3a77e149f96007dc225eb5867a665febc8ed96d583200dd2db6",
"containerimage.descriptor": {
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"digest": "sha256:c9a5e327e612238defead3b672bb2bcde2cbcc04e4e63fd43ca75a9565bbcf19",
"size": 2075,
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
"containerimage.digest": "sha256:c9a5e327e612238defead3b672bb2bcde2cbcc04e4e63fd43ca75a9565bbcf19",
"image.name": "ghcr.io/graphql-hive/webhooks:77a05164641b5c5cda45c5442afce7d77c322876-arm64,ghcr.io/graphql-hive/webhooks:sentry_fix_2-arm64"
}
} |
601b12d
to
77a0516
Compare
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.
Actionable comments posted: 0
🧹 Nitpick comments (1)
packages/services/server/src/index.ts (1)
213-214
: Consider adding context to error capture.While the error capture is correct, consider adding more context about the purge task.
- captureException(error); + captureException(error, { + extra: { + task: 'schema_check_purge', + expiresAt: new Date().toISOString(), + }, + });
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
pnpm-lock.yaml
is excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (23)
package.json
(2 hunks)packages/services/api/package.json
(1 hunks)packages/services/emails/package.json
(1 hunks)packages/services/policy/package.json
(1 hunks)packages/services/rate-limit/package.json
(1 hunks)packages/services/schema/package.json
(1 hunks)packages/services/server/package.json
(1 hunks)packages/services/server/src/graphql-handler.ts
(2 hunks)packages/services/server/src/index.ts
(2 hunks)packages/services/server/src/use-sentry-user.ts
(1 hunks)packages/services/service-common/package.json
(2 hunks)packages/services/storage/package.json
(1 hunks)packages/services/storage/src/db/pool.ts
(1 hunks)packages/services/storage/src/db/sentry.ts
(0 hunks)packages/services/stripe-billing/package.json
(1 hunks)packages/services/tokens/package.json
(1 hunks)packages/services/usage-estimator/package.json
(1 hunks)packages/services/usage-ingestor/package.json
(1 hunks)packages/services/usage/package.json
(1 hunks)packages/services/webhooks/package.json
(1 hunks)packages/web/app/package.json
(1 hunks)packages/web/app/src/env/backend.ts
(0 hunks)packages/web/app/src/router.tsx
(2 hunks)
💤 Files with no reviewable changes (2)
- packages/web/app/src/env/backend.ts
- packages/services/storage/src/db/sentry.ts
🚧 Files skipped from review as they are similar to previous changes (20)
- packages/services/usage-ingestor/package.json
- packages/services/rate-limit/package.json
- packages/services/webhooks/package.json
- packages/services/emails/package.json
- packages/services/tokens/package.json
- packages/services/stripe-billing/package.json
- packages/services/policy/package.json
- packages/services/usage-estimator/package.json
- package.json
- packages/services/server/package.json
- packages/services/usage/package.json
- packages/services/storage/package.json
- packages/web/app/package.json
- packages/services/schema/package.json
- packages/services/api/package.json
- packages/services/server/src/use-sentry-user.ts
- packages/web/app/src/router.tsx
- packages/services/storage/src/db/pool.ts
- packages/services/service-common/package.json
- packages/services/server/src/graphql-handler.ts
🧰 Additional context used
📓 Path-based instructions (1)
`packages/services/**`: Microservices written in NodeJS and ...
packages/services/**
: Microservices written in NodeJS and TypeScript. Most of the dirs under this directory are packages and deployed as Docker packages.
Interaction between services is done using tRPC.
We prefer writing code that does input/output validations with Zod.
The directories that ends with-worker
are projects that are built on top of CloudFlare Workers infrastructure and deployed there.
Thecdn-worker
is a special one, it serves a high-available, detached CDN on CloudFlare Workers. This is how our end-users fetches the crucial data from our platform, in a way that does not depend/couple on our main API (served as GraphQL API).
packages/services/server/src/index.ts
⏰ Context from checks skipped due to timeout of 90000ms (10)
- GitHub Check: alpha / npm / snapshot
- GitHub Check: test / unit
- GitHub Check: typescript / typecheck
- GitHub Check: static-analysis / analyze (typescript)
- GitHub Check: static-analysis / analyze (javascript)
- GitHub Check: storybook-preview / deployment
- GitHub Check: build / dockerize (linux/arm64)
- GitHub Check: build / dockerize (linux/amd64)
- GitHub Check: code-style / eslint-and-prettier
- GitHub Check: alpha / cli-artifacts
🔇 Additional comments (7)
packages/services/server/src/index.ts (7)
45-53
: LGTM! Sentry imports look good.The imports have been correctly updated to match Sentry v9's package structure.
254-261
: LGTM! Error handling with context.Good practice of including additional context with the error capture.
541-546
: LGTM! Validation error handling.Good practice of capturing validation errors with request context.
602-607
: LGTM! Artifact handler error capture.Good practice of including source context with the error capture.
655-657
: LGTM! Fatal error handling.Good practice of setting the correct severity level for fatal errors.
91-91
:❌ Incorrect review comment
Consider enabling performance monitoring.
The
spans
option is set tofalse
which disables performance monitoring. Consider enabling it if performance tracking is needed.
🌐 Web query:
What are the performance monitoring options in Sentry v9?
💡 Result:
Sentry version 9.0 does not include performance monitoring capabilities[6][7]. This older, unsupported release lacks the infrastructure for transaction tracking, distributed traces, and performance metrics analysis found in modern Sentry versions[6][7].
Key limitations in v9:
- No Performance tab/interface
- Missing transaction recording
- No support for distributed tracing
- Incompatible with performance metric collection SDKs[6][7]
The performance monitoring features described in other sources (transactions, spans, web vitals tracking, custom metrics) require Sentry 20.x or newer[1][2][5]. Users needing these capabilities must upgrade to a supported version or use Sentry's cloud offering[6][7].
Citations:
- 1: https://docs.sentry.io/product/performance/
- 2: https://docs.sentry.io/platforms/javascript/guides/react/tracing/instrumentation/performance-metrics/
- 3: https://sentry.io/resources/performance-monitoring/
- 4: https://www.youtube.com/watch?v=ojebwsIeVOg
- 5: https://www.youtube.com/watch?v=rl1wOVlMkCA
- 6: https://vueschool.io/lessons/performance-monitoring-in-sentry
- 7: https://forum.sentry.io/t/enable-performance-monitoring/12205
- 8: https://documentation.solarwinds.com/en/success_center/sqlsentry/content/performance-analysis/analytics-platform-system/performance-metrics.htm
- 9: https://forum.strapi.io/t/performance-monitoring-in-sentry/17180
- 10: https://scribehow.com/shared/Monitoring_Backend_Performance_Metrics_on_Sentry_Dashboard__pbfFE5IVQnisnl1oRQOwBw
Subject: Sentry v9 Lacks Performance Monitoring, So Current Setting is Correct
The web query confirms that Sentry version 9 does not support performance monitoring features (including transactions or distributed tracing). Since these capabilities are unavailable in v9, leaving
spans
set tofalse
is the appropriate configuration. If performance monitoring is required, an upgrade to a newer Sentry version (e.g., 20.x or later) would be necessary.Likely an incorrect or invalid review comment.
80-103
:✅ Verification successful
Verify Sentry configuration for v9.
The Sentry initialization looks good with the updated configuration. However, let's verify that the configuration options are valid for v9.
🌐 Web query:
What are the breaking changes in Sentry SDK v9 configuration options?
💡 Result:
Sentry SDK v9 introduces several breaking changes affecting configuration options across different platforms. Here are the key changes organized by platform:
JavaScript SDK
Removed deprecated APIs
Cleaned up older APIs and configuration options to streamline usage[3][6][8].ES2020 syntax adoption
Now uses modern JavaScript features like optional chaining (?.
) and nullish coalescing (??
), requiring runtime support or transpilation[3][6].Span handling changes
- Returning
null
frombeforeSendSpan
no longer drops spans (now requires integration configuration)[3][6].- Root spans are passed to
beforeSendSpan
, requiring logic updates[3][6].- Custom scopes passed to
startSpan
are cloned instead of directly used[3][6].Sampling context updates
ReplacedsamplingContext.request
with.normalizedRequest
, which has a different structure[3][6].Node.js instrumentation defaults
Flipped default foronlyIncludeInstrumentedModules
from false to true (requires explicit opt-out)[9].watchOS/iOS SDKs
Session tracking enabled by default
Auto-collects application health metrics unless disabled[2][5].Validation changes
Invalid values forsampleRate
now reset to default 1.0 instead of retaining invalid values[2].General Changes
- Tracing configuration updates
- New compatibility requirements with self-hosted Sentry (v24.4.2+ remains supported)[3].
- Minimum iOS version bumped to 11[5].
Developers should consult platform-specific migration guides (JavaScript[3][8], watchOS[2]) when upgrading. Key recommendations include auditing span handling logic, verifying runtime compatibility with ES2020 features, and reviewing session tracking configurations.
Citations:
- 1: https://hexdocs.pm/sentry/changelog.html
- 2: https://docs.docbase.ai/platforms/apple/guides/watchos/migration/
- 3: https://docs.sentry.io/platforms/javascript/migration/v8-to-v9/
- 4: https://develop.sentry.dev/sdk/telemetry/sessions/
- 5: https://cocoapods.org/pods/Sentry/changelog
- 6: https://github.com/getsentry/sentry-javascript/blob/develop/CHANGELOG.md
- 7: https://pub.dev/packages/sentry_logging/changelog
- 8: https://sentry.io/changelog/javascript-sdk-v9/
- 9: [v9] Change default of
onlyIncludeInstrumentedModules
in Node SDK getsentry/sentry-javascript#14332- 10: https://sentry.nuxtjs.org/releases
Sentry Configuration Validated for SDK v9
The Sentry initialization in
packages/services/server/src/index.ts
has been reviewed against the breaking changes in Sentry SDK v9. The configuration options—such asserverName
,dist
,enabled
,environment
,dsn
,release
, the custom integrations list,maxBreadcrumbs
, and the explicit disabling of default integrations—align with the updated guidelines. No deprecated APIs or invalid options were detected. Please proceed with this configuration as it meets the requirements for SDK v9.
No description provided.