Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Build fs-storage and publish Java package #94

Open
wants to merge 28 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
6af1614
Build and release `fs-storage` JNI libraries and publish Java library
oluiscabral Oct 24, 2024
571aab6
Create `cache.yml` workflow
oluiscabral Dec 2, 2024
560fca7
WIP - start transforming it into AAR
oluiscabral Dec 10, 2024
8ccb90e
WIP - set up library as AAR
oluiscabral Dec 11, 2024
0a76e96
Finish AAR setup
oluiscabral Dec 12, 2024
475a94e
Set up NDK to GitHub Actions
oluiscabral Dec 12, 2024
f5f4420
Fix `Set up NDK` step
oluiscabral Dec 12, 2024
85a00ca
Set up Android SDK
oluiscabral Dec 12, 2024
57a28c1
Set `ANDROID_NDK_HOME` env var
oluiscabral Dec 12, 2024
06db31b
Set specific ndk version
oluiscabral Dec 12, 2024
6730418
Fix NDK version
oluiscabral Dec 12, 2024
68f478f
Bring back Android SDK setup
oluiscabral Dec 12, 2024
c80086b
Final touches on AAR build and release workflow
oluiscabral Dec 12, 2024
2e77dfe
Fix: speedup `build.yml` and add targets to `release.yml`
oluiscabral Dec 12, 2024
3c572a6
Define `GITHUB_ACTOR` as well
oluiscabral Dec 12, 2024
5cec424
Wrap GitHubPackages URI in `uri(string)`
oluiscabral Dec 12, 2024
b6c4d2c
Copy old `publications`
oluiscabral Dec 12, 2024
5b1ea61
Update permissions and publications
oluiscabral Dec 12, 2024
229b48f
Use tag name as version and clean publication
oluiscabral Dec 12, 2024
78d058d
Remove local configuration
oluiscabral Dec 14, 2024
7e2bd8b
add `rustfmt` formatting check
oluiscabral Dec 14, 2024
54d9665
Try using regex as released tag evaluator
oluiscabral Dec 14, 2024
736a206
Try new release regex condition
oluiscabral Dec 14, 2024
ceef135
Fix: Properly remove first character of released tag
oluiscabral Dec 15, 2024
9cd65f3
Fix: Try using `GITHUB_REF_NAME` to remove first char of released tag
oluiscabral Dec 15, 2024
0c1fa09
Fix: export `RELEASE_VERSION` instead of setting it as `env` in yml
oluiscabral Dec 15, 2024
61cd3f5
Update Android NDK and `java/README.md` instructions
oluiscabral Dec 16, 2024
14b2fff
CI Workflow Refactor (#96)
tareknaser Jan 4, 2025
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
20 changes: 0 additions & 20 deletions .github/workflows/benchmark.yml

This file was deleted.

133 changes: 63 additions & 70 deletions .github/workflows/build.yml
kirillt marked this conversation as resolved.
Show resolved Hide resolved
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

 getting this warning locally, and I can also see it in the CI:

> Task :lib:compileReleaseJavaWithJavac
Java compiler version 22 has deprecated support for compiling with source/target version 8.
warning: [options] source value 8 is obsolete and will be removed in a future release
Try one of the following options:
    1. [Recommended] Use Java toolchain with a lower language version
    2. Set a higher source/target version
    3. Use a lower version of the JDK running the build (if you're not using Java toolchain)
For more details on how to configure these settings, see https://developer.android.com/build/jdks.
To suppress this warning, set android.javaCompile.suppressSourceTargetDeprecationWarning=true in gradle.properties.
warning: [options] target value 8 is obsolete and will be removed in a future release
warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
3 warnings
warning: [options] source value 8 is obsolete and will be removed in a future release

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm I see, I'll investigate it

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aaahh, that's why would be great to move all the Java code to ark-android.. especially after we switched from JAR to AAR, so we don't do "plain Java" anymore and really only use Java for Android..

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes. Maybe we could even move the JNI Rust related code to ark-android then, since it is specifically related to Java as well

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@oluiscabral exactly! do you think it's reasonable amount of work for the current pair of PRs, or should we merge these first, and proceed with refactoring in new PRs?

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Verify build
name: Verify Build

on:
push:
Expand All @@ -12,70 +12,70 @@ env:
CARGO_TERM_COLOR: always

jobs:
linux:
name: Build on Linux
format:
name: Code Formatting Check
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Install Rust
- name: Install Nightly Rust with rustfmt
uses: dtolnay/rust-toolchain@stable
with:
toolchain: nightly # nightly is required for fmt
components: rustfmt, clippy
toolchain: nightly
components: rustfmt

- name: Check
run: cargo check
- name: Run rustfmt
run: cargo fmt --all -- --check

- name: Format
run: |
cargo fmt --all -- --check
cargo clippy --workspace --bins -- -D warnings
build-and-test:
name: Build and Test
runs-on: ${{ matrix.os }}
strategy:
matrix:
# We also run on macOS arm in the weekly workflow.
os: [ubuntu-latest, windows-latest, macos-14]

- name: Build Debug
run: cargo build --verbose
steps:
- uses: actions/checkout@v4
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Set up Cargo Cache
uses: Swatinem/rust-cache@v2
with:
save-if: false

- name: Run tests
run: cargo test --verbose
run: cargo test --workspace --verbose

- name: Build Release
run: cargo build --verbose --release

# `ark-cli-watch.sh` script tests the functionality of `ark-cli watch`,
# which monitors a directory for file changes using a filesystem watcher and updates the index file.
# We need to run it on each platform to ensure it works across all OSes.
- name: Run `ark-cli watch` test
run: ./integration/ark-cli-watch.sh

- name: Install JDK
uses: actions/[email protected]
- name: Upload Release Build
uses: actions/upload-artifact@v3
with:
distribution: "temurin"
java-version: "22"
name: release-build-${{ matrix.os }}
path: target/release/

- name: Set up Gradle
uses: gradle/actions/setup-gradle@v3

- name: Java tests
run: gradle test
working-directory: ./java

windows:
name: Test on Windows
runs-on: windows-latest
java-bindings:
name: Java Bindings
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-14]
needs: build-and-test

steps:
- uses: actions/checkout@v4

- name: Install Rust
uses: dtolnay/rust-toolchain@stable

- name: Build Release
run: cargo build --verbose --release

- name: Run tests
run: cargo test --workspace --verbose

- name: Run `ark-cli watch` test
run: ./integration/ark-cli-watch.sh
- name: Download Build Artifacts
uses: actions/download-artifact@v3
with:
name: release-build-${{ matrix.os }}
path: ./release

- name: Install JDK
uses: actions/[email protected]
Expand All @@ -86,38 +86,31 @@ jobs:
- name: Set up Gradle
uses: gradle/actions/setup-gradle@v3

- name: Java tests
- name: Set up Android SDK
uses: android-actions/setup-android@v3

- name: Set up Android NDK
uses: nttld/setup-ndk@v1
with:
link-to-sdk: true
ndk-version: r28-beta2

- name: Run Java Tests
run: gradle test
working-directory: ./java

mac-intel:
name: Test on macOS Intel
runs-on: macos-14
benchmarks:
name: Run Benchmarks
runs-on: ubuntu-latest
needs: java-bindings
# We only want to run benchmarks in case of a pull request
if: ${{ github.event_name == 'pull_request' }}

steps:
- uses: actions/checkout@v4

- name: Install Rust
uses: dtolnay/rust-toolchain@stable

- name: Build Release
run: cargo build --verbose --release

- name: Run tests
run: cargo test --workspace --verbose

- name: Run `ark-cli watch` test
run: ./integration/ark-cli-watch.sh

- name: Install JDK
uses: actions/[email protected]
- name: Run Criterion
uses: boa-dev/criterion-compare-action@v3
with:
distribution: "temurin"
java-version: "22"

- name: Set up Gradle
uses: gradle/actions/setup-gradle@v3

- name: Java tests
run: gradle test
working-directory: ./java
branchName: ${{ github.base_ref }}
token: ${{ secrets.GITHUB_TOKEN }}
82 changes: 82 additions & 0 deletions .github/workflows/cache.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
name: Cache build

on:
push:
branches:
- main
pull_request:
branches:
- main

jobs:
linux:
name: Linux
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Install Rust
uses: dtolnay/rust-toolchain@stable

- name: Set up Cargo Cache
uses: Swatinem/rust-cache@v2
with:
save-if: true

- name: Run tests
run: cargo test --workspace --verbose --release

windows:
name: Windows
runs-on: windows-latest

steps:
- uses: actions/checkout@v4

- name: Install Rust
uses: dtolnay/rust-toolchain@stable

- name: Set up Cargo Cache
uses: Swatinem/rust-cache@v2
with:
save-if: true

- name: Run tests
run: cargo test --workspace --verbose --release

mac-intel:
name: MacOS Intel
runs-on: macos-14

steps:
- uses: actions/checkout@v4

- name: Install Rust
uses: dtolnay/rust-toolchain@stable

- name: Set up Cargo Cache
uses: Swatinem/rust-cache@v2
with:
save-if: true

- name: Run tests
run: cargo test --workspace --verbose --release

mac-arm:
name: MacOS ARM
runs-on: macos-13-xlarge

steps:
- uses: actions/checkout@v4

- name: Install Rust
uses: dtolnay/rust-toolchain@stable

- name: Set up Cargo Cache
uses: Swatinem/rust-cache@v2
with:
save-if: true

- name: Run tests
run: cargo test --workspace --verbose --release
58 changes: 58 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
name: Release

on:
push:
tags:
- "v[0-9]+.[0-9]+.[0-9]+"

jobs:
release:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v4

- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android

Comment on lines +20 to +21
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you add these targets to the instructions in java/README.md, specifically the rustup command?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good idea, do you mean to add a step-by-step on how to locally cross-compile the library?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When I tried running this locally, it failed because I didn’t have these targets set up, and I had to debug it myself. It would be helpful to include a command for adding these targets as a perquisite, something like:

rustup target add \
    aarch64-linux-android \
    armv7-linux-androideabi \
    ...

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, let’s include a note about the supported ndkVersion, because running this with a different version also causes it to completely fail locally for me (I had version 28.0.12674087. This is why I suggested #94 (comment))

with an annoying error as well (I think it said something like ndk not installed)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@tareknaser this one seems to be resolved, right?

- name: Set up Cargo Cache
uses: Swatinem/rust-cache@v2
with:
save-if: false

- name: Run tests
run: cargo test --workspace --verbose

- name: Install JDK
uses: actions/[email protected]
with:
distribution: "temurin"
java-version: "22"

- name: Set up Gradle
uses: gradle/actions/setup-gradle@v3

- name: Set up Android SDK
uses: android-actions/setup-android@v3

- name: Set up Android NDK
uses: nttld/setup-ndk@v1
with:
link-to-sdk: true
ndk-version: r28-beta2

- name: Java tests
run: gradle test
working-directory: ./java

- name: Publish Java release
run: |
export RELEASE_VERSION=$(echo "${{ github.ref_name }}" | cut -c2-)
gradle publish
working-directory: ./java
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Loading
Loading