Skip to content

Commit 9ef71de

Browse files
Update dependencies and modernize build setup (#14)
* Update JNI crate * Update gradle dependencies * Modernize gradle project * Modernize build process * Update github actions * Update publishing actions
1 parent 6b67346 commit 9ef71de

File tree

22 files changed

+576
-442
lines changed

22 files changed

+576
-442
lines changed

.github/workflows/build.yml

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
name: Build Project
2+
3+
on:
4+
push:
5+
branches: [ "master" ]
6+
pull_request:
7+
8+
jobs:
9+
linux:
10+
strategy:
11+
matrix:
12+
include:
13+
- target: x86_64-unknown-linux-gnu
14+
- target: i686-unknown-linux-gnu
15+
deps: apt-get install -y gcc-multilib
16+
- target: aarch64-unknown-linux-gnu
17+
deps: apt-get install -y gcc-aarch64-linux-gnu
18+
- target: armv7-unknown-linux-gnueabihf
19+
deps: apt-get install -y gcc-arm-linux-gnueabihf
20+
21+
name: Build ${{ matrix.target }}
22+
runs-on: ubuntu-latest
23+
container:
24+
image: ubuntu:18.04
25+
steps:
26+
- name: Checkout sources
27+
uses: taiki-e/checkout-action@v1
28+
- name: Install Essentials
29+
run: |
30+
apt-get update -y
31+
apt-get upgrade -y
32+
apt-get install -y curl gcc openjdk-17-jdk-headless
33+
- name: Install Rust toolchain
34+
uses: dtolnay/rust-toolchain@stable
35+
with:
36+
toolchain: stable
37+
targets: ${{ matrix.target }}
38+
- name: Install linker dependencies
39+
run: ${{ matrix.deps }}
40+
if: ${{ matrix.deps != '' }}
41+
- name: Run Gradle Build
42+
run: ./gradlew build -Ptarget=${{ matrix.target }}
43+
44+
windows:
45+
strategy:
46+
matrix:
47+
include:
48+
- target: x86_64-pc-windows-msvc
49+
- target: i686-pc-windows-msvc
50+
51+
name: Build ${{ matrix.target }}
52+
runs-on: windows-2022
53+
steps:
54+
- name: Checkout sources
55+
uses: actions/checkout@v6
56+
- name: Install Rust toolchain
57+
uses: dtolnay/rust-toolchain@stable
58+
with:
59+
toolchain: stable
60+
target: ${{ matrix.target }}
61+
- name: Set up JDK
62+
uses: actions/setup-java@v5
63+
with:
64+
distribution: 'temurin'
65+
java-version: '17'
66+
cache: 'gradle'
67+
- name: Run Gradle Build
68+
run: ./gradlew build -Ptarget=${{ matrix.target }}
69+
70+
macos:
71+
name: Build macOS universal binary
72+
runs-on: macos-14
73+
steps:
74+
- name: Checkout sources
75+
uses: actions/checkout@v6
76+
77+
- name: Install Rust toolchain
78+
uses: dtolnay/rust-toolchain@stable
79+
with:
80+
toolchain: stable
81+
82+
- name: Compile natives
83+
working-directory: native
84+
run: |
85+
rustup target add x86_64-apple-darwin
86+
cargo build -r --target=x86_64-apple-darwin
87+
rustup target add aarch64-apple-darwin
88+
cargo build -r --target=aarch64-apple-darwin
89+
90+
- name: Create target directory for darwin
91+
run: mkdir -p native/target/darwin/release
92+
93+
- name: Combine to universal dylib
94+
run: lipo -create -output native/target/darwin/release/libudpqueue.dylib native/target/**/release/*.dylib
95+
96+
- name: Run Gradle Build
97+
run: ./gradlew build -x cargoBuild -Ptarget=darwin

.github/workflows/musl.yml

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,7 @@
11
name: musl
22

33
on:
4-
push:
5-
branches: [ "master" ]
6-
paths:
7-
- '.github/workflows/musl.yml' # when new targets are added
8-
- 'build.gradle.kts' # when the root build script changes
9-
- 'api' # when api source is changed
10-
- 'native' # when natives are changed
4+
workflow_dispatch:
115

126
concurrency:
137
group: "pub-musl"
@@ -37,14 +31,14 @@ jobs:
3731
image: alpine:3.18
3832
steps:
3933
- name: Checkout sources
40-
uses: actions/checkout@v2
34+
uses: taiki-e/checkout-action@v1
4135
- name: Install Essentials
4236
run: |
4337
apk add curl gcc bash
4438
mkdir -p /root/musl
4539
curl -q https://musl.cc/x86_64-linux-musl-cross.tgz | tar xzf - -C /root/musl
4640
- name: Install Rust toolchain
47-
uses: dtolnay/rust-toolchain@0e66bd3e6b38ec0ad5312288c83e47c143e6b09e #@v1.0.6
41+
uses: dtolnay/rust-toolchain@stable
4842
with:
4943
toolchain: stable
5044
target: x86_64-unknown-linux-musl ${{ matrix.target }} # requires native target installed to build proc-macros2

.github/workflows/publish-api.yml

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,6 @@
11
name: publish-api
22

33
on:
4-
push:
5-
branches: [ "master" ]
6-
paths:
7-
- '.github/workflows/publish-api.yml' # when new targets are added
8-
- 'build.gradle.kts' # when the root build script changes
9-
- 'api' # when api source is changed
104
workflow_dispatch:
115

126

@@ -21,15 +15,13 @@ jobs:
2115
runs-on: ubuntu-latest
2216
steps:
2317
- name: Checkout sources
24-
uses: actions/checkout@v4
18+
uses: actions/checkout@v6
2519

26-
- name: Publish
20+
- name: Build and Publish
2721
env:
28-
ORG_GRADLE_PROJECT_ossrhUser: ${{ secrets.OSSRH_USER }}
29-
ORG_GRADLE_PROJECT_ossrhPassword: ${{ secrets.OSSRH_PASSWORD }}
30-
ORG_GRADLE_PROJECT_stagingProfile: ${{ secrets.STAGING_PROFILE_ID }}
31-
ORG_GRADLE_PROJECT_signingKey: ${{ secrets.GPG_KEY }}
32-
ORG_GRADLE_PROJECT_signingKeyId: ${{ secrets.GPG_KEYID }}
33-
run: |
34-
chmod u+x gradlew
35-
./gradlew --console plain --stacktrace -Ptarget=x86_64-unknown-linux-gnu api:publishToSonatype closeAndReleaseStagingRepository
22+
JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.MAVENCENTRAL_USERNAME }}
23+
JRELEASER_MAVENCENTRAL_TOKEN: ${{ secrets.MAVENCENTRAL_TOKEN }}
24+
JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.GPG_PUBLIC_KEY }}
25+
JRELEASER_GPG_SECRET_KEY: ${{ secrets.GPG_SECRET_KEY }}
26+
JRELEASER_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
27+
run: ./gradlew api:publish api:jreleaserRelease

.github/workflows/publish-mac.yml

Lines changed: 0 additions & 55 deletions
This file was deleted.

.github/workflows/publish.yml

Lines changed: 60 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
11
name: publish-natives
22

33
on:
4-
push:
5-
branches: [ "master" ]
6-
paths:
7-
- '.github/workflows/publish.yml' # when new targets are added
8-
- 'build.gradle.kts' # when the root build script changes
9-
- 'api' # when api source is changed
10-
- 'native' # when natives are changed
114
workflow_dispatch:
125

136
concurrency:
@@ -29,22 +22,17 @@ jobs:
2922

3023
name: Publish ${{ matrix.target }}
3124
environment: MavenRelease
32-
runs-on: ubuntu-20.04
25+
runs-on: ubuntu-latest
3326
container:
34-
image: ubuntu:16.04
27+
image: ubuntu:18.04
3528
steps:
3629
- name: Checkout sources
3730
uses: taiki-e/checkout-action@v1
3831
- name: Install Essentials
3932
run: |
4033
apt-get update -y
4134
apt-get upgrade -y
42-
apt-get install -y curl gcc openjdk-8-jdk-headless
43-
- name: Setup rustup
44-
run: |
45-
curl --proto '=https' --tlsv1.2 --retry 10 --location --silent --show-error --fail "https://sh.rustup.rs" | sh -s -- --default-toolchain none -y
46-
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
47-
shell: bash
35+
apt-get install -y curl gcc openjdk-17-jdk-headless
4836
- name: Install Rust toolchain
4937
uses: dtolnay/rust-toolchain@stable
5038
with:
@@ -53,19 +41,15 @@ jobs:
5341
- name: Install linker dependencies
5442
run: ${{ matrix.deps }}
5543
if: ${{ matrix.deps != '' }}
56-
- name: Compile natives
57-
working-directory: native
58-
run: cargo build -r --target=${{ matrix.target }}
59-
- name: Publish
44+
- name: Build and Publish
6045
env:
61-
ORG_GRADLE_PROJECT_ossrhUser: ${{ secrets.OSSRH_USER }}
62-
ORG_GRADLE_PROJECT_ossrhPassword: ${{ secrets.OSSRH_PASSWORD }}
63-
ORG_GRADLE_PROJECT_stagingProfile: ${{ secrets.STAGING_PROFILE_ID }}
64-
ORG_GRADLE_PROJECT_signingKey: ${{ secrets.GPG_KEY }}
65-
ORG_GRADLE_PROJECT_signingKeyId: ${{ secrets.GPG_KEYID }}
66-
run: |
67-
chmod u+x gradlew
68-
./gradlew --console plain --stacktrace -Ptarget="${{ matrix.target }}" native:publishToSonatype closeAndReleaseStagingRepository
46+
JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.MAVENCENTRAL_USERNAME }}
47+
JRELEASER_MAVENCENTRAL_TOKEN: ${{ secrets.MAVENCENTRAL_TOKEN }}
48+
JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.GPG_PUBLIC_KEY }}
49+
JRELEASER_GPG_SECRET_KEY: ${{ secrets.GPG_SECRET_KEY }}
50+
JRELEASER_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
51+
run: ./gradlew native:publish native:jreleaserRelease -Ptarget=${{ matrix.target }}
52+
6953
windows:
7054
strategy:
7155
matrix:
@@ -75,27 +59,61 @@ jobs:
7559

7660
name: Publish ${{ matrix.target }}
7761
environment: MavenRelease
78-
runs-on: windows-2019
62+
runs-on: windows-2022
7963
steps:
8064
- name: Checkout sources
81-
uses: actions/checkout@v2
65+
uses: actions/checkout@v6
8266
- name: Install Rust toolchain
83-
uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af #@v1
67+
uses: dtolnay/rust-toolchain@stable
8468
with:
85-
profile: minimal
8669
toolchain: stable
87-
override: true
8870
target: ${{ matrix.target }}
71+
- name: Set up JDK
72+
uses: actions/setup-java@v5
73+
with:
74+
distribution: 'temurin'
75+
java-version: '17'
76+
cache: 'gradle'
77+
- name: Build and Publish
78+
env:
79+
JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.MAVENCENTRAL_USERNAME }}
80+
JRELEASER_MAVENCENTRAL_TOKEN: ${{ secrets.MAVENCENTRAL_TOKEN }}
81+
JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.GPG_PUBLIC_KEY }}
82+
JRELEASER_GPG_SECRET_KEY: ${{ secrets.GPG_SECRET_KEY }}
83+
JRELEASER_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
84+
run: ./gradlew native:publish native:jreleaserRelease -Ptarget=${{ matrix.target }}
85+
86+
macos:
87+
name: Build macOS universal binary
88+
runs-on: macos-14
89+
steps:
90+
- name: Checkout sources
91+
uses: actions/checkout@v6
92+
93+
- name: Install Rust toolchain
94+
uses: dtolnay/rust-toolchain@stable
95+
with:
96+
toolchain: stable
97+
8998
- name: Compile natives
9099
working-directory: native
91-
run: cargo build -r --target=${{ matrix.target }}
92-
- name: Publish
93-
env:
94-
ORG_GRADLE_PROJECT_ossrhUser: ${{ secrets.OSSRH_USER }}
95-
ORG_GRADLE_PROJECT_ossrhPassword: ${{ secrets.OSSRH_PASSWORD }}
96-
ORG_GRADLE_PROJECT_stagingProfile: ${{ secrets.STAGING_PROFILE_ID }}
97-
ORG_GRADLE_PROJECT_signingKey: ${{ secrets.GPG_KEY }}
98-
ORG_GRADLE_PROJECT_signingKeyId: ${{ secrets.GPG_KEYID }}
99100
run: |
100-
chmod u+x gradlew
101-
./gradlew --console plain --stacktrace -Ptarget="${{ matrix.target }}" native:publishToSonatype closeAndReleaseStagingRepository
101+
rustup target add x86_64-apple-darwin
102+
cargo build -r --target=x86_64-apple-darwin
103+
rustup target add aarch64-apple-darwin
104+
cargo build -r --target=aarch64-apple-darwin
105+
106+
- name: Create target directory for darwin
107+
run: mkdir -p native/target/darwin/release
108+
109+
- name: Combine to universal dylib
110+
run: lipo -create -output native/target/darwin/release/libudpqueue.dylib native/target/**/release/*.dylib
111+
112+
- name: Build and Publish
113+
env:
114+
JRELEASER_MAVENCENTRAL_USERNAME: ${{ secrets.MAVENCENTRAL_USERNAME }}
115+
JRELEASER_MAVENCENTRAL_TOKEN: ${{ secrets.MAVENCENTRAL_TOKEN }}
116+
JRELEASER_GPG_PUBLIC_KEY: ${{ secrets.GPG_PUBLIC_KEY }}
117+
JRELEASER_GPG_SECRET_KEY: ${{ secrets.GPG_SECRET_KEY }}
118+
JRELEASER_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }}
119+
run: ./gradlew native:publish native:jreleaserRelease -Ptarget=${{ matrix.target }} -x cargoBuild

.github/workflows/rust-clippy.yml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,13 @@ jobs:
3434
security-events: write
3535
steps:
3636
- name: Checkout code
37-
uses: actions/checkout@v2
37+
uses: actions/checkout@v6
3838

3939
- name: Install Rust toolchain
40-
uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af #@v1
40+
uses: dtolnay/rust-toolchain@stable
4141
with:
42-
profile: minimal
4342
toolchain: stable
4443
components: clippy
45-
override: true
4644

4745
- name: Install required cargo
4846
run: cargo install clippy-sarif sarif-fmt

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## v0.2.10 - TBD
4+
5+
- Update dependencies and modernize gradle project
6+
37
## v0.2.9 - 2024/08/21
48

59
- Update dependencies

0 commit comments

Comments
 (0)