{"record":{"id":"ee658a847f2b1105","repo":"GoogleContainerTools/jib","slug":"invalid-base-image-reference-buildplan-getbasei","errorCode":null,"errorMessage":"invalid base image reference: ${buildPlan.getBaseImage()}","messagePattern":"invalid base image reference: (.+?)","errorType":"exception","errorClass":"JibPluginExtensionException","httpStatus":null,"severity":"error","filePath":"jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/GradleProjectProperties.java","lineNumber":482,"sourceCode":"      return jibContainerBuilder;\n    }\n\n    List<JibGradlePluginExtension<?>> loadedExtensions = extensionLoader.get();\n    JibGradlePluginExtension<?> extension = null;\n    ContainerBuildPlan buildPlan = jibContainerBuilder.toContainerBuildPlan();\n    try {\n      for (ExtensionConfiguration config : extensionConfigs) {\n        extension = findConfiguredExtension(loadedExtensions, config);\n\n        log(LogEvent.lifecycle(\"Running extension: \" + config.getExtensionClass()));\n        buildPlan =\n            runPluginExtension(extension.getExtraConfigType(), extension, config, buildPlan);\n        ImageReference.parse(buildPlan.getBaseImage()); // to validate image reference\n      }\n      return jibContainerBuilder.applyContainerBuildPlan(buildPlan);\n\n    } catch (InvalidImageReferenceException ex) {\n      throw new JibPluginExtensionException(\n          Verify.verifyNotNull(extension).getClass(),\n          \"invalid base image reference: \" + buildPlan.getBaseImage(),\n          ex);\n    }\n  }\n\n  // Unchecked casting: \"getExtraConfiguration().get()\" (Object) to Action<T> and \"extension\"\n  // (JibGradlePluginExtension<?>) to JibGradlePluginExtension<T> where T is the extension-defined\n  // config type (as requested by \"JibGradlePluginExtension.getExtraConfigType()\").\n  @SuppressWarnings({\"unchecked\"})\n  private <T> ContainerBuildPlan runPluginExtension(\n      Optional<Class<T>> extraConfigType,\n      JibGradlePluginExtension<?> extension,\n      ExtensionConfiguration config,\n      ContainerBuildPlan buildPlan)\n      throws JibPluginExtensionException {\n    T extraConfig = null;\n    Optional<Object> configs = config.getExtraConfiguration();","sourceCodeStart":464,"sourceCodeEnd":500,"githubUrl":"https://github.com/GoogleContainerTools/jib/blob/fb949e2676afbbd7dd7a1ef61e20251931325654/jib-gradle-plugin/src/main/java/com/google/cloud/tools/jib/gradle/GradleProjectProperties.java#L464-L500","documentation":"GradleProjectProperties.runPluginExtensions validates the base image produced by an extension by calling ImageReference.parse(buildPlan.getBaseImage()); on InvalidImageReferenceException it throws JibPluginExtensionException naming the extension class with 'invalid base image reference: <baseImage>'. The extension set a base image string that is not a valid image reference.","triggerScenarios":"A plugin extension's extend() returns/updates a ContainerBuildPlan whose baseImage field is null, empty, or syntactically invalid (spaces, uppercase repo, bad tag/digest); runPluginExtensions then parses it and fails.","commonSituations":"Custom extension code computing the base image from an environment variable or Gradle property that is unset or malformed; extension bug building the build plan with a placeholder value.","solutions":["Fix the extension (or its input) so buildPlan.baseImage is a valid reference like 'gcr.io/project/app:tag'","Validate the property/env value feeding the base image before running the extension","Set jib.from.image explicitly so extensions that pass it through inherit a valid value"],"exampleFix":"// before (inside extension)\nString base = System.getenv(\"BASE_IMAGE\"); // may be null\nImageReference.parse(base);\n// after\nString base = Objects.requireNonNullElse(System.getenv(\"BASE_IMAGE\"), \"gcr.io/distroless/java17-debian11\");","handlingStrategy":"validation","validationCode":"// inside the extension, before returning the build plan\nimport com.google.cloud.tools.jib.api.ImageReference\nObjects.requireNonNull(plan.baseImage, 'baseImage must be set')\nImageReference.parse(plan.baseImage) // throws early with a clear message","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Parse base image strings with ImageReference.parse at extension config time","Never let env vars/properties flow into baseImage without a default and validation","Keep jib.from.image set even when extensions modify it, so pass-through stays valid"],"tags":["jib","gradle","plugin-extension","image-reference"],"backgroundTag":"invalid-image-reference","analyzedSha":"fb949e2676afbbd7dd7a1ef61e20251931325654","analyzedAt":"2026-09-06T14:04:09.491Z","contentChangedAt":"2026-09-06T14:04:09.491Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}