Kotlin Multiplatform BLE library for iOS, Android, macos, windows and javascript
This guide explains how to publish Blue Falcon 3.0 modules to Maven Central.
You need a Sonatype account with access to the dev.bluefalcon group:
dev.bluefalcon namespaceGenerate a GPG key for signing artifacts:
# Generate key
gpg --gen-key
# List keys to get the key ID
gpg --list-secret-keys --keyid-format=short
# Export the private key (for GitHub secrets)
gpg --armor --export-secret-keys YOUR_KEY_ID
# Export the public key and upload to keyserver
gpg --armor --export YOUR_KEY_ID | pbcopy
gpg --keyserver keyserver.ubuntu.com --send-keys YOUR_KEY_ID
Add these secrets to your GitHub repository (Settings → Secrets and variables → Actions):
SONATYPEUSERNAME: Your Sonatype usernameSONATYPEPASSWORD: Your Sonatype passwordGPG_KEY: Your GPG private key (full ASCII-armored output from export command)GPG_KEY_PASS: Your GPG key passphraseCreate/update library/local.properties:
# Maven Central credentials
mavenCentralUsername=your_username
mavenCentralPassword=your_password
# GPG signing
signingInMemoryKey=-----BEGIN PGP PRIVATE KEY BLOCK-----\n...\n-----END PGP PRIVATE KEY BLOCK-----
signingInMemoryKeyPassword=your_gpg_passphrase
⚠️ Never commit local.properties to version control!
The easiest way to publish is through GitHub releases:
git tag v3.0.0
git push origin v3.0.0
docs/RELEASE_NOTES_3.0.0.mdFor testing or manual releases:
cd library
# Publish to local Maven repository (for testing)
./gradlew publishToMavenLocal
# Publish to Maven Central
./gradlew publishAllPublicationsToMavenCentralRepository
# Or publish specific modules
./gradlew :core:publishAllPublicationsToMavenCentralRepository
./gradlew :engines:android:publishAllPublicationsToMavenCentralRepository
./gradlew :legacy:publishAllPublicationsToMavenCentralRepository
Blue Falcon 3.0 publishes 11 modules:
dev.bluefalcon:blue-falcon-core:3.0.0
dev.bluefalcon:blue-falcon-engine-android:3.0.0dev.bluefalcon:blue-falcon-engine-ios:3.0.0dev.bluefalcon:blue-falcon-engine-macos:3.0.0dev.bluefalcon:blue-falcon-engine-js:3.0.0dev.bluefalcon:blue-falcon-engine-windows:3.0.0dev.bluefalcon:blue-falcon-engine-rpi:3.0.0dev.bluefalcon:blue-falcon-plugin-logging:3.0.0dev.bluefalcon:blue-falcon-plugin-retry:3.0.0dev.bluefalcon:blue-falcon-plugin-caching:3.0.0dev.bluefalcon:blue-falcon:3.0.0
Versions are centralized in library/gradle.properties:
version=3.0.0
versionCore=3.0.0
versionEngines=3.0.0
versionPlugins=3.0.0
versionLegacy=3.0.0
Version progression:
3.0.0 → Testing with early adopters3.0.0-beta01 → Feature complete, bug fixes only3.0.0-rc01 → Release candidate, production ready3.0.0 → Final releaseAfter publishing, verify artifacts are available:
Search: https://central.sonatype.com/search?q=dev.bluefalcon
Or use direct links:
// build.gradle.kts
dependencies {
implementation("dev.bluefalcon:blue-falcon:3.0.0")
// Should download successfully
}
# Download artifact
curl -O https://repo1.maven.org/maven2/dev/bluefalcon/blue-falcon-core/3.0.0/blue-falcon-core-3.0.0.jar
curl -O https://repo1.maven.org/maven2/dev/bluefalcon/blue-falcon-core/3.0.0/blue-falcon-core-3.0.0.jar.asc
# Verify signature
gpg --verify blue-falcon-core-3.0.0.jar.asc blue-falcon-core-3.0.0.jar
Problem: Build fails with signing errors
Solution: Ensure secrets are set correctly:
# Check environment variables
echo $ORG_GRADLE_PROJECT_signingInMemoryKey
echo $ORG_GRADLE_PROJECT_signingInMemoryKeyPassword
# For local builds, check local.properties exists
cat library/local.properties
Problem: 401 Unauthorized when publishing
Solution: Check Maven Central credentials:
dev.bluefalcon namespaceProblem: Cannot republish same version
Solution: Maven Central doesn’t allow overwriting. You must:
Problem: Published but not showing on Maven Central
Solution:
Before publishing a release:
gradle.propertiesCHANGELOG.md updatedAfter publishing:
If you encounter issues: