{"record":{"id":"96fe47cb272d27b7","repo":"elastic/elasticsearch","slug":"no-version-tags-specified","errorCode":null,"errorMessage":"No version tags specified","messagePattern":"No version tags specified","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/TagVersionsTask.java","lineNumber":60,"sourceCode":"    }\n\n    @Option(option = \"release\", description = \"The release version to be tagged\")\n    public void release(String version) {\n        releaseVersion = Version.fromString(version);\n    }\n\n    @Option(option = \"tag-version\", description = \"Version id to tag. Of the form <VersionType>:<id>.\")\n    public void tagVersions(List<String> version) {\n        this.tagVersions = splitVersionIds(version);\n    }\n\n    @TaskAction\n    public void executeTask() throws IOException {\n        if (releaseVersion == null) {\n            throw new IllegalArgumentException(\"Release version not specified\");\n        }\n        if (tagVersions.isEmpty()) {\n            throw new IllegalArgumentException(\"No version tags specified\");\n        }\n\n        LOGGER.lifecycle(\"Tagging version {} component ids\", releaseVersion);\n\n        var versions = expandV7Version(tagVersions);\n\n        for (var v : versions.entrySet()) {\n            Path recordFile = switch (v.getKey()) {\n                case INDEX_VERSION_TYPE -> rootDir.resolve(INDEX_VERSIONS_RECORD);\n                default -> throw new IllegalArgumentException(\"Unknown version type \" + v.getKey());\n            };\n\n            LOGGER.lifecycle(\"Adding version record for {} to [{}]: [{},{}]\", v.getKey(), recordFile, releaseVersion, v.getValue());\n\n            Path file = rootDir.resolve(recordFile);\n            List<String> versionRecords = Files.readAllLines(file);\n            var modified = addVersionRecord(versionRecords, releaseVersion, v.getValue());\n            if (modified.isPresent()) {","sourceCodeStart":42,"sourceCodeEnd":78,"githubUrl":"https://github.com/elastic/elasticsearch/blob/db6a809a667c081ca1dc7500389d26975573215f/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/release/TagVersionsTask.java#L42-L78","documentation":"Thrown by TagVersionsTask.executeTask() when tagVersions is empty after releaseVersion is already validated. The --tag-version option (form <VersionType>:<id>) was not supplied, so there is nothing to record.","triggerScenarios":"Running tagVersions with --release but omitting --tag-version, or passing a --tag-version list that splitVersionIds() reduced to empty.","commonSituations":"Operator forgets the tag-version argument in the release command; the option value is templated from a variable that resolved empty.","solutions":["Supply --tag-version in <VersionType>:<id> form, e.g. --tag-version=Index:42.","Confirm splitVersionIds() is not stripping the input; verify the option value is non-empty in the release script."],"exampleFix":"// before\n./gradlew tagVersions --release=8.10.0\n\n// after\n./gradlew tagVersions --release=8.10.0 --tag-version=Index:42","handlingStrategy":"validation","validationCode":"// Validate tag-version presence before running\ntasks.named('tagVersions').configure(t -> t.doFirst(spec -> {\n    if (!spec.getProviders().gradleProperty(\"tag-version\").isPresent()) {\n        throw new GradleException(\"--tag-version=<Type>:<id> is required\");\n    }\n}));","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Template the tagVersions invocation to always include both --release and --tag-version.","Fail fast in CI when either is missing."],"tags":["release-tooling","gradle-task","missing-option","precondition"],"analyzedSha":"db6a809a667c081ca1dc7500389d26975573215f","analyzedAt":"2026-08-12T01:39:14.192Z","schemaVersion":2},"datasetVersion":"2026-08-12T06:17:24.410Z"}