{"record":{"id":"726307293a377b28","repo":"quarkusio/quarkus","slug":"the-registry-descriptor-configuration-is-missing-f","errorCode":null,"errorMessage":"The registry descriptor configuration is missing for ${configId}","messagePattern":"The registry descriptor configuration is missing for (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/client/maven/MavenRegistryClientFactory.java","lineNumber":198,"sourceCode":"            return null;\n        }\n        return new MavenPlatformsResolver(platformsConfig, registryArtifactResolver, log);\n    }\n\n    private RegistryNonPlatformExtensionsResolver getNonPlatformExtensionsResolver(RegistryConfig config,\n            MavenRegistryArtifactResolver registryArtifactResolver) {\n        final RegistryNonPlatformExtensionsConfig nonPlatformExtensions = config.getNonPlatformExtensions();\n        if (nonPlatformExtensions == null || nonPlatformExtensions.isDisabled()) {\n            log.debug(\"Non-platform extension catalogs were disabled for registry %s\", config.getId());\n            return null;\n        }\n        return new MavenNonPlatformExtensionsResolver(nonPlatformExtensions, registryArtifactResolver, log);\n    }\n\n    private static Artifact getDescriptorCoords(RegistryConfig config) {\n        final RegistryDescriptorConfig descriptorConfig = config.getDescriptor();\n        if (descriptorConfig == null) {\n            throw new IllegalArgumentException(\"The registry descriptor configuration is missing for \" + config.getId());\n        }\n        final ArtifactCoords originalDescrCoords = descriptorConfig.getArtifact();\n        return new DefaultArtifact(originalDescrCoords.getGroupId(),\n                originalDescrCoords.getArtifactId(), originalDescrCoords.getClassifier(), originalDescrCoords.getType(),\n                originalDescrCoords.getVersion());\n    }\n\n    private static boolean isCleanupTimestampedArtifacts(RegistryConfig config) {\n        final Object o = config.getExtra().get(CLEANUP_TIMESTAMPED_ARTIFACTS);\n        return o == null || Boolean.parseBoolean(o.toString());\n    }\n\n    private static MavenRegistryArtifactResolver newRegistryArtifactResolver(MavenArtifactResolver resolver,\n            boolean cleanupTimestampedArtifacts) {\n        return new MavenRegistryArtifactResolverWithCleanup(resolver, cleanupTimestampedArtifacts);\n    }\n\n    /**","sourceCodeStart":180,"sourceCodeEnd":216,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/tools/registry-client/src/main/java/io/quarkus/registry/client/maven/MavenRegistryClientFactory.java#L180-L216","documentation":"Thrown when a registry entry in the registry client configuration has no descriptor configuration (`registry.<id>.descriptor`). The factory needs descriptor artifact coordinates (groupId:artifactId:classifier:type:version) to resolve the registry's platform descriptor from Maven, so it refuses to build a client without them.","triggerScenarios":"Calling MavenRegistryClientFactory.buildRegistryClient (via registryDescriptorCoords) with a RegistryConfig whose getDescriptor() returns null — e.g. a custom registry declared in registries.yaml without a `descriptor:` block.","commonSituations":"Hand-edited ~/.quarkus/config.yaml or project registries.yaml where the descriptor section was omitted or mis-indented; programmatically built RegistryConfig missing setDescriptor; config schema changes dropping the field.","solutions":["Add a `descriptor:` block with at least `artifact: io.quarkus.registry:quarkus-platform-descriptor:<version>` under the registry entry in registries.yaml","If the registry entry is a leftover from an older Quarkus version, regenerate the config file or remove the stale registry entry","When building RegistryConfig programmatically, call the descriptor builder before passing the config to the factory"],"exampleFix":"# before\nregistries:\n  - id: registry.acme.org\n# after\nregistries:\n  - id: registry.acme.org\n    descriptor:\n      artifact: io.quarkus.registry:quarkus-platform-descriptor:1.0-SNAPSHOT\n      metadata: true","handlingStrategy":"validation","validationCode":"if (config.getDescriptor() == null) {\n    throw new IllegalArgumentException(\"Registry \" + config.getId() + \" has no descriptor config; add descriptor.artifact to registries.yaml\");\n}","typeGuard":null,"tryCatchPattern":"try { client = factory.buildRegistryClient(cfg); } catch (IllegalArgumentException e) { if (e.getMessage().contains(\"descriptor configuration is missing\")) { fixConfig(cfg.getId()); } else throw e; }","preventionTips":["Always include a descriptor block for non-default registries","Lint registries.yaml against the schema after editing","Regenerate config via Quarkus CLI rather than hand-editing"],"tags":["configuration","registry","yaml"],"backgroundTag":"missing-config-property","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}