secp256k1-kmp/publishing/PUBLISHING.md
2023-04-13 09:15:43 +02:00

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.zip generated by the Publish snapshot github action
  • unzip snapshot.zip in the publishing directory
  • add additional JNI bindings (optional, see below)
  • edit secp256k1-kmp-snapshot-deploy.sh and update the VERSION environment 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.zip generated by the Publish release github action (which is triggered every time you publish a github release)
  • unzip release.zip in the publishing directory
  • add additional JNI bindings (optional, see below)
  • edit secp256k1-kmp-staging-upload.sh and update the VERSION environment 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.sh and specify either release or snapshot and the VERSION environment 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.sh and specify either release or snapshot and the VERSION environment variable, for example:
    • VERSION=0.9.0-SNAPSHOT ./secp256k1-kmp-add-darwinaarch64.sh snapshot
    • VERSION=0.9.0 ./secp256k1-kmp-add-darwinaarch64.sh release