Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 54 additions & 0 deletions .github/workflows/gradle-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# This workflow will build a package using Gradle and then publish it to GitHub packages when a release is created
# For more info see: https://github.com/actions/setup-java/blob/main/docs/advanced-usage.md#Publishing-using-gradle

name: Gradle Publish

on:
release:
types: [created]
workflow_dispatch:
inputs:
version:
description: 'Version to publish (e.g. v0.1.0)'
required: true

jobs:
publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
defaults:
run:
working-directory: bindings/android
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
server-id: github
settings-path: ${{ github.workspace }}

- name: Extract version
id: version
shell: bash
run: |
VERSION="${{ inputs.version }}"
if [[ -z "$VERSION" ]]; then
VERSION="$GITHUB_REF_NAME"
fi
echo "version=${VERSION#v}" >> $GITHUB_OUTPUT

- name: Build
run: ./gradlew assembleRelease -Pversion=${{ steps.version.outputs.version }}

- name: Publish
run: ./gradlew publish -Pversion=${{ steps.version.outputs.version }}
env:
GITHUB_ACTOR: ${{ github.actor }}
GITHUB_TOKEN: ${{ secrets.ORG_PACKAGES_TOKEN }}
GITHUB_REPO: ${{ github.repository }}
3 changes: 3 additions & 0 deletions bindings/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.gradle
build
local.properties
91 changes: 91 additions & 0 deletions bindings/android/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# VSS Rust Client Android

Android library exposing Kotlin bindings for the VSS Rust client FFI.

## Installation

### GitHub Packages

1) Setup your GitHub credentials

Create a GitHub PAT (Personal Access Token):
- Go to GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)
- Generate new token with scopes: `read:packages` (and `repo` if package/repo is private)
- Copy the token once and use it in the next steps:

Set env vars:
```sh
export GITHUB_ACTOR="your_github_username"
export GITHUB_TOKEN="your_pat_with_read:packages"
```

Or add to `~/.gradle/gradle.properties`:
```properties
gpr.user=<your_github_username>
gpr.key=<your_pat_with_read:packages>
```

#### 2. Add the GitHub Packages repository

```kotlin
// settings.gradle.kts
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
maven {
url = uri("https://maven.pkg.github.com/synonymdev/vss-rust-client-ffi")
credentials {
username = System.getenv("GITHUB_ACTOR") ?: providers.gradleProperty("gpr.user").orNull
password = System.getenv("GITHUB_TOKEN") ?: providers.gradleProperty("gpr.key").orNull
}
}
}
}
```

#### 3. Declare the dependency

```kotlin
// app/build.gradle.kts
dependencies {
implementation("com.synonym:vss-client-android:<VERSION>")
// example:
// implementation("com.synonym:vss-client-android:0.1.0")
}
```
### Maven Local (development)

```kotlin
// settings.gradle.kts
dependencyResolutionManagement {
repositories {
mavenLocal()
// others
}
}

// build.gradle.kts
dependencies {
implementation("com.synonym:vss-rust-client-ffi:<LOCAL_VERSION>")
}
```

---

## Publishing

**⚠️ Reminder:** Versions are immutable, bump for each publish.

### GitHub Actions

Create a GitHub Release with a new tag like `v0.1.0`. The workflow `gradle-publish.yml` will publish that version.

Or trigger the "Gradle Publish" workflow manually.

### Terminal

```sh
cd bindings/android
./gradlew publish -Pversion=0.1.0
```
91 changes: 91 additions & 0 deletions bindings/android/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
import java.util.Properties

plugins {
id("com.android.library") version "8.5.2"
id("org.jetbrains.kotlin.android") version "1.9.24"
id("maven-publish")
id("signing")
}

group = "com.synonym"
version = providers.gradleProperty("version").orNull ?: "0.0.0"

android {
namespace = "com.synonym.vssclient"
compileSdk = 34

defaultConfig {
minSdk = 21
consumerProguardFiles("consumer-rules.pro")
}
buildTypes {
release {
isMinifyEnabled = false
proguardFiles(file("proguard-android-optimize.txt"), file("proguard-rules.pro"))
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_11
targetCompatibility = JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = "11"
}
publishing {
singleVariant("release") {
withSourcesJar()
withJavadocJar()
}
}
}

dependencies {
implementation("net.java.dev.jna:jna:5.17.0@aar")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1")
}

afterEvaluate {
publishing {
publications {
create<MavenPublication>("maven") {
val mavenArtifactId = "vss-client-android"
groupId = project.group.toString()
artifactId = mavenArtifactId
version = project.version.toString()

from(components["release"])
pom {
name.set(mavenArtifactId)
description.set("VSS Rust Client Android bindings.")
url.set("https://github.com/synonymdev/vss-rust-client-ffi")
licenses {
license {
name.set("MIT")
url.set("https://github.com/synonymdev/vss-rust-client-ffi/blob/master/LICENSE")
}
}
developers {
developer {
id.set("synonymdev")
name.set("Synonym")
email.set("[email protected]")
}
}
}
}
}
repositories {
maven {
name = "GitHubPackages"
val repo = System.getenv("GITHUB_REPO")
?: providers.gradleProperty("gpr.repo").orNull
?: "synonymdev/vss-rust-client-ffi"
url = uri("https://maven.pkg.github.com/$repo")
credentials {
username = System.getenv("GITHUB_ACTOR") ?: providers.gradleProperty("gpr.user").orNull
password = System.getenv("GITHUB_TOKEN") ?: providers.gradleProperty("gpr.key").orNull
}
}
}
}
}
6 changes: 6 additions & 0 deletions bindings/android/gradle.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
org.gradle.jvmargs=-Xmx2g -Dfile.encoding=UTF-8
android.useAndroidX=true
android.nonTransitiveRClass=true
kotlin.code.style=official
# project settings:
version=0.1.0
Binary file not shown.
7 changes: 7 additions & 0 deletions bindings/android/gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Loading