{"record":{"id":"e7e4824e37abd2cb","repo":"theonedev/onedev","slug":"commit-signature-required-please-generate-system","errorCode":null,"errorMessage":"Commit signature required, please generate system GPG signing key first","messagePattern":"Commit signature required, please generate system GPG signing key first","errorType":"exception","errorClass":"ExplicitException","httpStatus":null,"severity":"error","filePath":"server-core/src/main/java/io/onedev/server/git/service/DefaultGitService.java","lineNumber":845,"sourceCode":"\t\t\t\t\t\ttreeWalk.addTree(revTree);\n\t\t\t\t\t} else {\n\t\t\t\t\t\trevTree = null;\n\t\t\t\t\t}\n\n\t\t\t\t\tObjectId treeId = insertTree(revTree, treeWalk, inserter, null,\n\t\t\t\t\t\t\tnew HashSet<>(blobEdits.getOldPaths()),\n\t\t\t\t\t\t\tnew HashMap<>(blobEdits.getNewBlobs()));\n\n\t\t\t\t\tif (treeId != null)\n\t\t\t\t\t\tcommit.setTreeId(treeId);\n\t\t\t\t\telse\n\t\t\t\t\t\tcommit.setTreeId(inserter.insert(new TreeFormatter()));\n\n\t\t\t\t\tPGPSecretKeyRing signingKey = settingService.getGpgSetting().getSigningKey();\n\t\t\t\t\tif (signingKey != null) {\n\t\t\t\t\t\tGitUtils.sign(commit, signingKey);\n\t\t\t\t\t} else if (signRequired) {\n\t\t\t\t\t\tthrow new ExplicitException(\"Commit signature required, please generate \"\n\t\t\t\t\t\t\t\t+ \"system GPG signing key first\");\n\t\t\t\t\t}\n\n\t\t\t\t\tObjectId commitId = inserter.insert(commit);\n\t\t\t\t\tinserter.flush();\n\t\t\t\t\tRefUpdate ru = repository.updateRef(refName);\n\t\t\t\t\tru.setRefLogIdent(authorAndCommitter);\n\t\t\t\t\tru.setNewObjectId(commitId);\n\t\t\t\t\tru.setExpectedOldObjectId(expectedOldCommitId);\n\t\t\t\t\tGitUtils.updateRef(ru);\n\n\t\t\t\t\treturn commitId;\n\t\t\t\t} catch (RevisionSyntaxException | IOException e) {\n\t\t\t\t\tthrow new RuntimeException(e);\n\t\t\t\t}\n\t\t\t}\n\n\t\t});","sourceCodeStart":827,"sourceCodeEnd":863,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/io/onedev/server/git/service/DefaultGitService.java#L827-L863","documentation":"When creating a commit through DefaultGitService with commit signing required (signRequired=true), the system looks up the GPG signing key configured in server settings. If no system signing key exists, the commit cannot be signed and an ExplicitException is thrown telling the admin to generate the system GPG signing key first.","triggerScenarios":"Any server-side commit creation (web edits, API commits) while the server's 'require commit signature' setting is enabled but Server Setting -> GPG has no signing key configured.","commonSituations":"Fresh OneDev instance where GPG signing enforcement was turned on before generating the system key; the signing key was deleted from GPG settings; migrating a server without copying the system GPG key.","solutions":["Open Administration -> Server Setting and generate/import a system GPG signing key under the GPG section.","Alternatively disable the 'commit signature required' setting if signing is not needed.","After generating the key, retry the failed commit operation."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"boolean signRequired = settingService.getSystemSetting().isCommitSignatureRequired();\nboolean hasKey = settingService.getGpgSetting().getSigningKey() != null;\nif (signRequired && !hasKey) throw new IllegalStateException(\"Enable commit signing or generate system GPG key in server settings\");","typeGuard":null,"tryCatchPattern":"try { commit(...); } catch (ExplicitException e) { if (e.getMessage().contains(\"GPG\")) alertAdminToConfigureSigning(); throw e; }","preventionTips":["Generate the system GPG signing key before enabling signature enforcement","Include the GPG key in server backup/migration procedures","Audit GPG settings after upgrades"],"tags":["gpg","commit-signing","configuration"],"backgroundTag":"missing-required-config","analyzedSha":"d44925c47c37992c828ea673a5f9620539bc3ff2","analyzedAt":"2026-09-06T07:18:27.995Z","contentChangedAt":"2026-09-06T07:18:27.995Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}