Repository navigation
feat(api): add App Registry to the browsable API catalog [DEVEX-1173] - #325
Merged
Merged
Conversation
jpage-godaddy
requested review from
axburgess-godaddy,
jpearlman-godaddy,
mguerrero3-godaddy,
qcai-godaddy,
rts1-godaddy,
sgopalan-godaddy,
smukherjee-godaddy and
wcole1-godaddy
as code owners
October 14, 2026 19:29
This was referenced Oct 14, 2026
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
The schema refresh guard accepts connection-type names even when the root Query definition is missing.
1 open finding
What changed in this PR
Adds App Registry to gddy api, establishing the pinned schema for the later typed-client migration.
Changes:
- Vendors the schema and embeds its generated catalog.
- Supports per-source organizations, spec paths, and GraphQL endpoints.
- Adds catalog completeness and endpoint consistency tests.
| File | Description |
|---|---|
| rust/tools/generate-api-catalog/src/manifest.rs | Adds source configuration fields. |
| rust/tools/generate-api-catalog/src/main.rs | Wires schema refresh and endpoint tests. |
| rust/tools/generate-api-catalog/src/graphql.rs | Uses declared GraphQL endpoints. |
| rust/tools/generate-api-catalog/src/github.rs | Supports organization-qualified sources and overrides. |
| rust/tools/generate-api-catalog/src/app_registry_spec.rs | Validates and refreshes the vendored schema. |
| rust/src/api/catalog.rs | Embeds App Registry and tests catalog completeness. |
| rust/schemas/api/manifest.json | Registers the new domain. |
| rust/schemas/api/app-registry.json | Adds generated operation and type metadata. |
| rust/platform-app-client/graphql/schema.graphql | Pins the App Registry schema. |
| rust/api-catalog-sources.json | Declares the source repository and endpoint. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
jpage-godaddy
force-pushed
the
app-registry-schema
branch
2 times, most recently
from
October 14, 2026 20:08
3f4f51f to
694dbf6
Compare
`gddy api` now lists the App Registry GraphQL API: its operations, types and schema are browsable and callable like the other catalog domains. The schema is pinned in the repo, vendored from gdcorp-commerce/app-registry-api (the service's own repo) rather than the stale gdcorp-platform specification repo, and refreshed by generate-api-catalog. Catalog sources can now name their own GitHub org and an explicit spec path. A GraphQL schema carries no server URL, so GraphQL sources must declare `baseUrl` and `endpointPath`; App Registry is served from https://api.godaddy.com/v1/apps/app-registry-subgraph. `API_CATALOG_REPOS` and `API_CATALOG_REPO_REFS` accept `org/repository`, and a bare repository name that more than one source shares is rejected (repos) or ignored (refs) instead of silently picking one. A test now fails if a committed catalog file is not embedded in the CLI, and another if a GraphQL catalog entry drifts from its declared endpoint. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
jpage-godaddy
force-pushed
the
app-registry-schema
branch
from
October 21, 2026 16:32
694dbf6 to
8407e9e
Compare
jpage-godaddy
added a commit
that referenced
this pull request
Oct 21, 2026
…#325) `gddy api` now lists the App Registry GraphQL API: its operations, types and schema are browsable and callable like the other catalog domains. The schema is pinned in the repo, vendored from gdcorp-commerce/app-registry-api (the service's own repo) rather than the stale gdcorp-platform specification repo, and refreshed by generate-api-catalog. Catalog sources can now name their own GitHub org and an explicit spec path. A GraphQL schema carries no server URL, so GraphQL sources must declare `baseUrl` and `endpointPath`; App Registry is served from https://api.godaddy.com/v1/apps/app-registry-subgraph. `API_CATALOG_REPOS` and `API_CATALOG_REPO_REFS` accept `org/repository`, and a bare repository name that more than one source shares is rejected (repos) or ignored (refs) instead of silently picking one. A test now fails if a committed catalog file is not embedded in the CLI, and another if a GraphQL catalog entry drifts from its declared endpoint. Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
jpage-godaddy
added a commit
that referenced
this pull request
Oct 21, 2026
…ate [DEVEX-1173] (#326) - Adds `platform-app-client`, a typed client for the App Registry subgraph generated at build time by `graphql_client` from the pinned schema (#325) and one `.graphql` document per operation (12 operations). It follows the generated-client pattern already used for domains/hosting/shopping/email, including the shared transport-observer bridge in `generated-client-support`. - Unset optional mutation inputs are omitted from the request instead of being sent as explicit `null`: the service treats an omitted field as "leave unchanged" and `null` as "clear". Covered by a wire-shape test in the follow-up PR. - Responses to credential-bearing operations (`CreateApplication`, which returns the client secret, webhook secret and public key, and `GenerateReleaseUploadUrl`, which returns a pre-signed URL) are never handed to the transport observer, so `--debug transport` cannot log them. A response that fails to decode, or an error status, is reported without its contents for those operations. Crate tests fail if any of these leak. - Nothing in the CLI uses the crate yet, so there is no user-facing change.
jpage-godaddy
added a commit
that referenced
this pull request
Oct 21, 2026
…erated client (#282) - Replaces the hand-written GraphQL client in `src/platform/app/client.rs` with the typed `platform-app-client` crate (#326), generated from the pinned App Registry schema (#325). - Every `ApplicationClient` method and its callers across the platform app command tree (including `import`, native Android extensions, and `redirectUris`) now use typed request/response structs end to end. The one remaining untyped field is `presentation`/`metadata`, which the schema itself types as an opaque `JSONObject` scalar. - Mutations that return no data (enable/disable/archive/update/create-release/activate-release) now fail with an error instead of reporting success. - App Registry traffic is registered with `--debug transport`, including the `add native-extension` path. - Unset optional inputs stay out of update/create requests (wire-shape test), so an omitted manifest key still leaves remote values unchanged. - Closes DEVEX-1173.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
gdcorp-commerce/app-registry-api(the service's own repo) rather than the stalegdcorp-platformspecification repo, and refreshes it fromgenerate-api-catalog.gddy api(api domain list,api operation list --domain app-registry,api graphql get/call). It was previously absent.baseUrlandendpointPath(a GraphQL schema carries no server URL); App Registry is served fromhttps://api.godaddy.com/v1/apps/app-registry-subgraph. OpenAPI sources must not set them.API_CATALOG_REPOSandAPI_CATALOG_REPO_REFSacceptorg/repository. A bare repository name shared by more than one source is rejected (repos) or ignored (refs) rather than silently picking one.About 4,250 of the added lines are the generated catalog entry (
schemas/api/app-registry.json) and the vendored schema (schema.graphql); the hand-written change is roughly 400 lines undertools/generate-api-catalog/andsrc/api/catalog.rs.This is the first of three PRs for DEVEX-1173:
gddy api.platform-app-clientcrate (not used by the CLI yet).ApplicationClientand the platform app commands to the typed client (feat(platform-app): convert App Registry GraphQL client to a spec-generated client #282).Test plan
cargo check --workspacecargo clippy --workspace --all-targets -- -D warningscargo test --workspacecargo fmt --check./rust/scripts/check-module-size.shgddy api domain listandgddy api operation list --domain app-registryshow the domain at/v1/apps/app-registry-subgraph🤖 Generated with Claude Code