3.2 KiB
Publishing secp256k1-kmp artifacts
snapshots
Snapshots are published to the Sonatype snapshot repository (https://oss.sonatype.org/content/repositories/snapshots/).
To publish snapshot, you must add your sonatype credentials for the ossrh server to your local maven settings (typically in $HOME/.m2/settings.xml)
- Download
snapshot.zipgenerated by thePublish snapshotgithub action - unzip
snapshot.zipin thepublishingdirectory - add additional JNI bindings (optional, see below)
- edit
secp256k1-kmp-snapshot-deploy.shand update theVERSIONenvironment variable if needed - run
secp256k1-kmp-snapshot-deploy.sh
releases
Releases are published to the Sonatype staging repository. If all items are valid they will be published to maven central repository.
You must edit secp256k1-kmp-staging-upload.sh and add your sonatype credentials. You must also have a valid GPG key.
- Download
release.zipgenerated by thePublish releasegithub action (which is triggered every time you publish a github release) - unzip
release.zipin thepublishingdirectory - add additional JNI bindings (optional, see below)
- edit
secp256k1-kmp-staging-upload.shand update theVERSIONenvironment variable if needed - sign all artifacts with a valid gpg key:
find release -type f -print -exec gpg -ab {} \; - run
secp256k1-kmp-staging-upload.sh - log into sonatype, close and publish your staging repository. Artifacts will be available on Maven Central within a few hours.
Adding custom JNI bindings
Github CI currently generates JNI bindings for Windows x64, Linux x64 and iOS x64. But it is possible to add custom bindings to JNI packages before they are published to maven central.
This is how we add linux arm64 bindings:
- compile JNI bindings for Linux Arm64 (on a Linux Arm64 machine, cross-compilation is not supported)
- git clone --recursive https://github.com/ACINQ/secp256k1-kmp.git
- cd secp256k1-kmp
- TARGET=linux ./native/build.sh
- mkdir -p jni/jvm/build/linux
- TARGET=linux ./jni/jvm/build.sh
- JNI library is: jni/jvm/build/linux/libsecp256k1-jni.so
- copy libsecp256k1-jni.so to fr/acinq/secp256k1/jni/native/linux-aarch64/libsecp256k1-jni.so
- run
secp256k1-kmp-add-linuxarm64.shand specify eitherreleaseorsnapshotand theVERSIONenvironment variable, for example:- VERSION=0.9.0-SNAPSHOT ./secp256k1-kmp-add-linuxarm64.sh snapshot
- VERSION=0.9.0 ./secp256k1-kmp-add-linuxarm64.sh release
This is how we add macos arm64 (M1/M2) bindings:
- compile JNI bindings for macos Arm64 (on a macos Arm64 machine, cross-compilation is not supported)
- git clone --recursive https://github.com/ACINQ/secp256k1-kmp.git
- cd secp256k1-kmp
- TARGET=darwin ./native/build.sh
- mkdir -p jni/jvm/build/darwin
- TARGET=darwin ./jni/jvm/build.sh
- JNI library is: jni/jvm/build/darwin/libsecp256k1-jni.dylib
- copy libsecp256k1-jni.dylib to fr/acinq/secp256k1/jni/native/darwin-aarch64/libsecp256k1-jni.dylib
- run
secp256k1-kmp-add-darwinaarch64.shand specify eitherreleaseorsnapshotand theVERSIONenvironment variable, for example:- VERSION=0.9.0-SNAPSHOT ./secp256k1-kmp-add-darwinaarch64.sh snapshot
- VERSION=0.9.0 ./secp256k1-kmp-add-darwinaarch64.sh release