{"record":{"id":"204382ab5f5cab3d","repo":"elastic/elasticsearch","slug":"expecting-project-name-containing-zip-or-tar","errorCode":null,"errorMessage":"Expecting project name containing 'zip' or 'tar'.","messagePattern":"Expecting project name containing 'zip' or 'tar'\\.","errorType":"exception","errorClass":"GradleException","httpStatus":null,"severity":"error","filePath":"build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveCheckPlugin.java","lineNumber":96,"sourceCode":"                .add(\n                    \"projectLicenses\",\n                    Map.of(\"Elastic License 2.0\", project.getExtensions().getExtraProperties().get(\"elasticLicenseUrl\"))\n                );\n            TaskProvider<Task> checkMlCppNoticeTask = registerCheckMlCppNoticeTask(\n                project,\n                checkExtraction,\n                distributionArchiveCheckExtension\n            );\n            checkTask.configure(task -> task.dependsOn(checkMlCppNoticeTask));\n        }\n    }\n\n    private File calculateArchiveExtractionDir(Project project) {\n        if (project.getName().contains(\"tar\")) {\n            return new File(project.getBuildDir(), \"tar-extracted\");\n        }\n        if (project.getName().contains(\"zip\") == false) {\n            throw new GradleException(\"Expecting project name containing 'zip' or 'tar'.\");\n        }\n        return new File(project.getBuildDir(), \"zip-extracted\");\n    }\n\n    private static TaskProvider<Task> registerCheckMlCppNoticeTask(\n        Project project,\n        TaskProvider<Copy> checkExtraction,\n        DistributionArchiveCheckExtension extension\n    ) {\n        TaskProvider<Task> checkMlCppNoticeTask = project.getTasks().register(\"checkMlCppNotice\", task -> {\n            task.dependsOn(checkExtraction);\n            final Provider<Path> noticePath = checkExtraction.map(\n                c -> c.getDestinationDir()\n                    .toPath()\n                    .resolve(\"elasticsearch-\" + VersionProperties.getElasticsearch() + \"/modules/x-pack-ml/NOTICE.txt\")\n            );\n            ListProperty<String> expectedMlLicenses = extension.expectedMlLicenses;\n            task.doLast(new Action<Task>() {","sourceCodeStart":78,"sourceCodeEnd":114,"githubUrl":"https://github.com/elastic/elasticsearch/blob/db6a809a667c081ca1dc7500389d26975573215f/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionArchiveCheckPlugin.java#L78-L114","documentation":"Thrown as GradleException by calculateArchiveExtractionDir() when the project name contains neither 'tar' nor 'zip'. The plugin is applied per-distribution-archive project and decides the extraction directory by substring-matching the project name; an unexpected project name indicates the plugin was applied to the wrong project or a project was renamed.","triggerScenarios":"calculateArchiveExtractionDir (line 91) is called once during apply(). If project.getName() lacks both 'tar' and 'zip' — e.g., a project mistakenly applying InternalDistributionArchiveCheckPlugin, or a renamed distribution project — the second if throws.","commonSituations":"A new subproject under :distribution:archives with a name not following the '-zip'/'-tar' convention; someone applied the plugin in a custom build script to a non-archive project; refactoring renamed a project and broke the naming contract.","solutions":["Verify the project applying this plugin is a distribution archive project named with a 'zip' or 'tar' suffix.","Rename the project to follow the convention (e.g., elasticsearch-windows-zip, elasticsearch-linux-tar).","If the plugin was applied erroneously, remove the `apply plugin: 'elasticsearch.internal-distribution-archive-check'` line."],"exampleFix":"// before: project named 'dist-default' → throws\nevaluationDependsOn(':distribution:archives:dist-default')\n\n// after: project named with -zip suffix\ninclude ':distribution:archives:default-zip'","handlingStrategy":"validation","validationCode":"String name = project.getName();\nif (name.contains(\"zip\") == false && name.contains(\"tar\") == false) {\n    throw new IllegalStateException(\"Plugin requires project name containing 'zip' or 'tar': \" + name);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only apply elasticsearch.internal-distribution-archive-check to archive projects named with -zip or -tar suffix.","Follow the :distribution:archives:<platform>-<format> naming convention.","Add a project naming test in settings.gradle validation."],"tags":["distribution","gradle","convention","validation"],"backgroundTag":null,"analyzedSha":"db6a809a667c081ca1dc7500389d26975573215f","analyzedAt":"2026-08-12T01:39:14.192Z","schemaVersion":2},"datasetVersion":"2026-08-13T04:17:16.726Z"}