Tencent/matrix · error · RuntimeException
No signing configurations.
Error message
No signing configurations.
What it means
bintray-to-maven-central.gradle signs artifacts for Maven Central and requires GPG signing properties (signing.keyId plus secret key/passphrase) to be present. If the project has no 'signing.keyId' property at configuration time, it throws a RuntimeException because unsigned artifacts cannot be published to Maven Central.
Solutions
- Pass signing properties: ./gradlew publish -Psigning.keyId=YOURKEYID -Psigning.password=... -Psigning.secretKeyRingFile=/path/to/secring.gpg
- Add signing.keyId etc. to ~/.gradle/gradle.properties or the project's gradle.properties (do not commit secrets; use CI secrets)
- Generate a GPG key first (gpg --gen-key) and export the secret key ring if you don't have one
- If you only intend Bintray/local publishing, don't apply bintray-to-maven-central.gradle
Example fix
// before ./gradlew publishToMavenCentral // after ./gradlew publishToMavenCentral -Psigning.keyId=ABCDEF01 -Psigning.password="$SIGNING_PASS" -Psigning.secretKeyRingFile=$HOME/.gnupg/secring.gpg
Defensive patterns
Strategy: validation
Validate before calling
// pre-publish check script
if (!project.hasProperty('signing.keyId')) {
throw new GradleException('Provide -Psigning.keyId (and signing.password, signing.secretKeyRingFile) for Maven Central publishing')
} Prevention
- Set up GPG keys once per machine and document the required -P properties
- Inject signing properties as CI secrets into gradle.properties at build time
- Never commit signing passwords to the repo
- Run a signing dry-run (gradle signMavenPublication) before releases
When it happens
Trigger: Running a publish task from bintray-to-maven-central.gradle without -Psigning.keyId (and typically signing.password / signing.secretKeyRingFile) on the command line, gradle.properties, or local.properties.
Common situations: New contributor running ./gradlew publish locally without GPG setup, CI secrets not injected, or properties defined in ~/.gradle/gradle.properties of a different user.
Related errors
- apksigner returned with status: $ret
- Publishing Android library require "release" variant
- need sign apk but apksigner not found!
- need sign apk but apksigner $apksigner was not exist!
- need sign apk but signingConfig not found!
AI-assisted analysis of Tencent/matrix@3b8293bd65 (2026-09-08).
Data as JSON: /api/errors/15a0f0b46ec90dae.
Report an issue: GitHub.
Appendix: source
Thrown at matrix/matrix-android/gradle/bintray-to-maven-central.gradle:127
Properties properties = new Properties()
try {
properties.load(project.rootProject.file('local.properties').newDataInputStream())
} catch (Exception e) {
println("load local properties failed msg:${e.message}")
}
return properties.getProperty(key)
}
def getRepositoryUsername() {
return hasProperty('REPOSITORY_USERNAME') ? REPOSITORY_USERNAME : readPropertyFromLocalProperties('REPOSITORY_USERNAME')
}
def getRepositoryPassword() {
return hasProperty('REPOSITORY_PASSWORD') ? REPOSITORY_PASSWORD : readPropertyFromLocalProperties('REPOSITORY_PASSWORD')
}
if (!project.hasProperty("signing.keyId")) {
throw new RuntimeException("No signing configurations.")
}
ext.transmition_tasks = [:]
// Declare publications
publishing.publications {
(bintray_saving_dir as File).listFiles().each { component_file ->
transmition_tasks[component_file.name] = [] as Set
if (target_components != null && component_file.name != target_components) {
return
}
component_file.listFiles().each { version_file ->
if (!version_file.isDirectory()) {
return
}View on GitHub (pinned to 3b8293bd65)