{"record":{"id":"55ebf47d262a8872","repo":"elastic/elasticsearch","slug":"transport-version-generation-cannot-run-on-release","errorCode":null,"errorMessage":"Transport version generation cannot run on release branches","messagePattern":"Transport version generation cannot run on release branches","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/GenerateTransportVersionDefinitionTask.java","lineNumber":67,"sourceCode":"    @Option(option = \"name\", description = \"The name of the Transport Version definition, e.g. --name=my_new_tv\")\n    public abstract Property<String> getDefinitionName();\n\n    @Input\n    @Optional\n    @Option(\n        option = \"backport-branches\",\n        description = \"The branches this definition will be backported to, e.g. --backport-branches=9.1,8.19\"\n    )\n    public abstract Property<String> getBackportBranches();\n\n    @Override\n    protected void runGeneration(\n        TransportVersionResourcesService resources,\n        List<TransportVersionUpperBound> upstreamUpperBounds,\n        boolean onReleaseBranch\n    ) throws IOException {\n        if (onReleaseBranch) {\n            throw new IllegalArgumentException(\"Transport version generation cannot run on release branches\");\n        }\n\n        Set<String> referencedNames = TransportVersionReference.collectNames(getReferencesFiles());\n        Set<String> changedDefinitionNames = resources.getChangedReferableDefinitionNames();\n        String targetDefinitionName = getTargetDefinitionName(resources, referencedNames, changedDefinitionNames);\n\n        // First check for any unused definitions. This later generation to not get confused by a definition that can't be used.\n        removeUnusedNamedDefinitions(resources, referencedNames, changedDefinitionNames);\n\n        Map<Integer, List<IdAndDefinition>> idsByBase = resources.getIdsByBase();\n        if (targetDefinitionName.isEmpty()) {\n            getLogger().lifecycle(\"No transport version name detected, resetting upper bounds\");\n            resetAllUpperBounds(resources, idsByBase);\n        } else {\n            generateTransportVersionDefinition(resources, targetDefinitionName, upstreamUpperBounds, idsByBase);\n        }\n    }\n","sourceCodeStart":49,"sourceCodeEnd":85,"githubUrl":"https://github.com/elastic/elasticsearch/blob/db6a809a667c081ca1dc7500389d26975573215f/build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/GenerateTransportVersionDefinitionTask.java#L49-L85","documentation":"IllegalArgumentException from GenerateTransportVersionDefinitionTask.runGeneration() when the task detects it is executing on a release branch. Transport-version definition generation is only permitted on main; release branches consume the versions already produced upstream.","triggerScenarios":"The task is invoked with onReleaseBranch == true, which is set by the task's branch-detection logic based on the current git branch name matching a release-branch pattern.","commonSituations":"Running the generate task while checked out on a 9.x / 8.x release branch; CI misclassifying the current branch; invoking the task from a release-branch build script by mistake.","solutions":["Switch to main before running the generate-transport-version-definition task.","If you are on a release branch intentionally, you do not need to run this task - use UpdateTransportVersionsCSVTask instead.","Fix the branch-detection configuration if it is mislabelling main as a release branch."],"exampleFix":"// before: on branch 9.x, running generateTransportVersionDefinition\n// after:  git switch main && ./gradlew generateTransportVersionDefinition","handlingStrategy":"validation","validationCode":"// Branch guard before invoking the task\nString branch = gitCurrentBranch();\nif (isReleaseBranch(branch)) {\n    throw new IllegalStateException(\"Refusing to run generate task on release branch \" + branch + \"; switch to main\");\n}","typeGuard":"static boolean isReleaseBranch(String b) {\n    return b != null && b.matches(\"\\\\d+\\\\.x\");\n}","tryCatchPattern":null,"preventionTips":["Run generate-transport-version-definition only on main.","Use UpdateTransportVersionsCSVTask on release branches.","Add a CI check that fails if the generate task runs outside main."],"tags":["transport-version","release-workflow","branch-protection","build-tooling"],"backgroundTag":null,"analyzedSha":"db6a809a667c081ca1dc7500389d26975573215f","analyzedAt":"2026-08-12T01:39:14.192Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}