-
Notifications
You must be signed in to change notification settings - Fork 2
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
Package all natives in a single jar. #9
Changes from 33 commits
29a0539
c493df0
db2deda
7222d93
844cb9f
2e75294
f940624
90b86e3
a47ec64
7354687
6b62a7d
c2b3680
8d99d9b
e12ede0
67c552f
c414ee4
09ed8bd
3736a81
a49e03e
bcf195d
257a9b5
bdc6e44
80e6301
c18d01f
a247e8b
c326cb8
3ccfb91
618b740
78e7574
7106719
4479461
78b3643
bac7a89
01fb7d7
c8a3b3c
92de665
b77263d
cc1f341
bd53621
2963391
59d0a33
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,137 @@ | ||
# This workflow compiles the native wasmer_jni lib into various OS and architectures using dynamic_libs_reusable.yaml. | ||
# Then it builds and publishes the JAR based on the GITHUB_REF that calls the workflow. There are 2 options: | ||
# 1. The workflow is executed from a branch. In that case the JAR is available in the GitHub action as an artifact. | ||
# 2. The workflow is executed from a tag. In that case the JAR is published in the corresponding GitHub release. | ||
name: Build and publish | ||
|
||
on: | ||
push: | ||
branches: | ||
- '*' # Trigger on push to any branch | ||
tags: | ||
- '*' # Trigger on push to any tag | ||
|
||
jobs: | ||
upload_dynamic_libs: | ||
strategy: | ||
matrix: | ||
platform: | ||
- os: 'macos-latest' | ||
target: 'aarch64-apple-darwin' | ||
artifact: 'darwin-arm64' | ||
lib_name: 'libwasmer_jni.dylib' | ||
|
||
- os: 'macos-latest' | ||
target: 'x86_64-apple-darwin' | ||
artifact: 'darwin-amd64' | ||
lib_name: 'libwasmer_jni.dylib' | ||
|
||
- os: 'ubuntu-latest' | ||
target: 'x86_64-unknown-linux-gnu' | ||
artifact: 'linux-amd64' | ||
lib_name: 'libwasmer_jni.so' | ||
|
||
- os: 'windows-latest' | ||
target: 'x86_64-pc-windows-msvc' | ||
artifact: 'win32-amd64' | ||
lib_name: 'wasmer_jni.dll' | ||
uses: ./.github/workflows/dynamic_libs_reusable.yaml | ||
with: | ||
platform_os: ${{ matrix.platform.os }} | ||
platform_target: ${{ matrix.platform.target }} | ||
platform_artifact: ${{ matrix.platform.artifact }} | ||
platform_lib_name: ${{ matrix.platform.lib_name }} | ||
|
||
publish_jar: | ||
name: Publish the JARs | ||
runs-on: ubuntu-latest | ||
needs: [upload_dynamic_libs] | ||
|
||
steps: | ||
- name: Check out code | ||
uses: actions/checkout@v2 | ||
|
||
- name: Set up Java 21 | ||
uses: actions/setup-java@v1 | ||
with: | ||
java-version: 21 | ||
|
||
- name: Set up Rust | ||
uses: actions-rs/toolchain@v1 | ||
with: | ||
toolchain: stable | ||
default: true | ||
override: true | ||
|
||
- name: Cache Cargo registry | ||
uses: actions/cache@v1 | ||
with: | ||
path: ~/.cargo/registry | ||
key: cargo-registry-${{ hashFiles('**/Cargo.lock') }} | ||
|
||
- name: Cache Cargo bin | ||
uses: actions/cache@v1 | ||
with: | ||
path: ~/.cargo/bin | ||
key: cargo-bin-${{ hashFiles('**/Cargo.lock') }} | ||
|
||
- name: Cache Cargo build | ||
uses: actions/cache@v1 | ||
with: | ||
path: target | ||
key: cargo-build-target-${{ hashFiles('**/Cargo.lock') }} | ||
|
||
- name: Setup wasmer-jni artifacts dir | ||
id: setip_dir | ||
Zurcusa marked this conversation as resolved.
Show resolved
Hide resolved
|
||
shell: bash | ||
run: | | ||
random_string=$(uuidgen) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. why not use a custom name like "dynamic_libs" or something similar? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It will be less likely for someone to create a dir with the same name ( even though there's not a high chance anyways). There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The VM used for each workflow run is destroyed and re-created from a fresh instance each run. Deleting isn't needed. Will make the change. |
||
mkdir $random_string | ||
echo "EXT_ARTIFACTS_DIR=$random_string" >> $GITHUB_ENV | ||
|
||
- name: Download wasmer_jni artifacts | ||
uses: actions/download-artifact@v4 | ||
with: | ||
path: ./${{ env.EXT_ARTIFACTS_DIR }} | ||
|
||
- name: Display structure of downloaded files | ||
run: ls -R ./$EXT_ARTIFACTS_DIR | ||
|
||
- name: Run all the tests | ||
shell: bash | ||
run: | | ||
export PATH="$HOME/.cargo/bin:$PATH" | ||
make test | ||
|
||
- name: Create the JAR | ||
id: create_jar | ||
shell: bash | ||
run: | | ||
export PATH="$HOME/.cargo/bin:$PATH" | ||
make package | ||
|
||
- name: Upload JAR as workflow artifact | ||
if: startsWith(github.ref, 'refs/heads/') | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: ${{ steps.create_jar.outputs.name }} | ||
path: ${{ steps.create_jar.outputs.path }} | ||
retention-days: 1 | ||
|
||
- name: Get release info | ||
id: get_release_info | ||
if: startsWith(github.ref, 'refs/tags/') | ||
uses: bruceadams/get-release@v1.3.2 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
- name: Upload JAR as Github pre-release asset | ||
if: startsWith(github.ref, 'refs/tags/') | ||
uses: actions/upload-release-asset@v1 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
upload_url: ${{ steps.get_release_info.outputs.upload_url }} | ||
asset_path: ${{ steps.create_jar.outputs.path }} | ||
asset_name: ${{ steps.create_jar.outputs.name }} | ||
asset_content_type: application/java-archive |
This file was deleted.
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
# This workflow cross compiles a rust library into a native based on a provided target. | ||
# The compiled library is then uploaded as a GitHub artifact. | ||
name: upload_dynamic_libs | ||
|
||
on: | ||
workflow_call: | ||
inputs: | ||
platform_os: | ||
description: Operating system that the runner will use. | ||
type: string | ||
required: true | ||
platform_target: | ||
description: The architecture that rust will compile the libs for. | ||
type: string | ||
required: true | ||
platform_artifact: | ||
description: The name of the artifact that will be uploaded. | ||
type: string | ||
required: true | ||
platform_lib_name: | ||
description: Name of the native library to be uploaded in the artifact. | ||
type: string | ||
required: true | ||
|
||
|
||
jobs: | ||
publish_dlibs: | ||
name: Publish the dynamic libraries | ||
runs-on: ${{ inputs.platform_os }} | ||
steps: | ||
- name: Check out code | ||
uses: actions/checkout@v3 | ||
|
||
- name: Set up Rust | ||
uses: actions-rs/toolchain@v1 | ||
with: | ||
toolchain: stable | ||
default: true | ||
override: true | ||
|
||
- name: Create the dynamic libs | ||
shell: bash | ||
run: | | ||
export PATH="$HOME/.cargo/bin:$PATH" | ||
rustup target add ${{ inputs.platform_target }} | ||
cargo build --release --target=${{ inputs.platform_target }} | ||
|
||
- name: Upload the dynamic libs | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: ${{ inputs.platform_artifact }} | ||
path: ./target/${{ inputs.platform_target }}/release/${{ inputs.platform_lib_name }} | ||
retention-days: 1 |
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We don't need this anymore since all natives are bundled in a single jar. |
This file was deleted.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I left the workflow trigger to "on push" because the Workflow UI would only update when this is merged to master branch. From what I see that doesn't happen often.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Manual invocation wold be better imo.