Update to Gradle 8; resuscitate CI #41
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build | |
on: | |
- push | |
- pull_request | |
jobs: | |
natives-linux-windows: | |
name: Linux (x86/ARM/PPC) and Windows native library compilation | |
runs-on: ubuntu-latest | |
container: | |
image: ubuntu:18.04 | |
env: | |
GCC: gcc-8 | |
defaults: | |
run: | |
working-directory: src/main/c | |
steps: | |
- name: Checkout the target branch | |
uses: actions/checkout@v3 | |
- name: Setup Java | |
uses: actions/setup-java@v3 | |
with: | |
distribution: temurin | |
java-version: 8 | |
# Don't need the dependency cache here (or in any of the other native | |
# library compilation steps), because we're not invoking the Java | |
# compiler in this step. We only need the JDK for its headers. | |
- name: Install build prerequisites | |
run: | | |
apt-get update | |
apt-get --assume-yes install make $GCC | |
make crosstools | |
- name: Build the Linux and Windows native libraries | |
run: | | |
make clean-linux clean-windows | |
make linux windows | |
# The names of the artifacts containing native libraries correspond | |
# exactly to the directories inside `src/main/c/resources/native`. That | |
# way, the Java build job can pull down all artifacts and unpack them | |
# into that directory to overwrite the versions in-repo. This is sadly | |
# necessary because the actions/download-artifact@v3 action flattens | |
# paths inside artifacts. If it retained full relative paths, we could | |
# put Linux and Windows natives inside the same artifact, and we could be | |
# flexible with the artifact names. But it doesn't, so we can't, and we | |
# can't. | |
- name: Upload Linux native libraries | |
uses: actions/upload-artifact@v3 | |
with: | |
name: linux | |
path: src/main/c/resources/native/linux | |
- name: Upload Windows native libraries | |
uses: actions/upload-artifact@v3 | |
with: | |
name: windows | |
path: src/main/c/resources/native/windows | |
natives-macos: | |
name: macOS native library compilation | |
runs-on: macos-latest | |
defaults: | |
run: | |
working-directory: src/main/c | |
steps: | |
- name: Checkout the target branch | |
uses: actions/checkout@v3 | |
- name: Setup Java | |
uses: actions/setup-java@v3 | |
with: | |
distribution: temurin | |
java-version: 8 | |
- name: Build the macOS native libraries | |
run: | | |
make clean-osx | |
make osx | |
- name: Upload macOS native libraries | |
uses: actions/upload-artifact@v3 | |
with: | |
name: osx | |
path: src/main/c/resources/native/osx/libNRJavaSerial.jnilib | |
natives-freebsd: | |
name: FreeBSD native library compilation | |
runs-on: ubuntu-latest | |
container: | |
image: empterdose/freebsd-cross-build:9.3 | |
defaults: | |
run: | |
working-directory: src/main/c | |
steps: | |
- name: Checkout the target branch | |
uses: actions/checkout@v3 | |
- name: Setup Java | |
uses: actions/setup-java@v3 | |
with: | |
distribution: temurin | |
java-version: 8 | |
- name: Fake the FreeBSD Java headers | |
# This feels extremely dirty, but the only native header we care about | |
# is `jni_md.h`, and it is exactly identical between Linux and FreeBSD | |
# (at least in OpenJDK 8). | |
run: | | |
ln -s $JAVA_HOME/include/linux $JAVA_HOME/include/freebsd | |
- name: Build the FreeBSD native libraries | |
run: | | |
make clean-freebsd | |
settarget i386-freebsd9 make freebsd32 | |
settarget x86_64-freebsd9 make freebsd64 | |
- name: Upload FreeBSD native libraries | |
uses: actions/upload-artifact@v3 | |
with: | |
name: freebsd | |
path: src/main/c/resources/native/freebsd | |
java: | |
name: Java compilation | |
runs-on: ubuntu-latest | |
needs: | |
- natives-linux-windows | |
- natives-macos | |
- natives-freebsd | |
steps: | |
# We use Spotless in “ratchet mode” to incrementally enforce code | |
# formatting throughout the project. In order to ensure feature branches | |
# don't regress formatting when compared with the master branch, we need | |
# to have a local copy of the master branch for comparison. | |
- name: Checkout the master branch | |
uses: actions/checkout@v3 | |
with: | |
ref: master | |
- name: Checkout the target branch | |
uses: actions/checkout@v3 | |
- name: Setup Java | |
uses: actions/setup-java@v3 | |
with: | |
distribution: temurin | |
java-version: 8 | |
cache: gradle | |
- name: Download native libraries | |
uses: actions/download-artifact@v3 | |
with: | |
path: src/main/c/resources/native | |
- name: Build the Java library | |
run: ./gradlew build | |
- name: Determine commit hash for artifact filename | |
id: vars | |
run: echo "short-rev=$(git rev-parse --short HEAD)" >>$GITHUB_OUTPUT | |
- name: Upload build artifacts | |
uses: actions/upload-artifact@v3 | |
with: | |
name: nrjavaserial-${{steps.vars.outputs.short-rev}} | |
path: build/libs/*.jar |