Add new architecture support (Linux x86, Windows x86, Windows ArmV7) and improve build system #769
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: | |
branches: | |
- "*" | |
pull_request: | |
workflow_dispatch: | |
jobs: | |
Linux-Build: | |
strategy: | |
fail-fast: true | |
matrix: | |
architecture: | |
- name: x86_64 | |
linux_name: x86-64-linux-gnu | |
exec_name: x86_64-linux-gnu | |
- name: x86 | |
linux_name: i686-linux-gnu | |
exec_name: i686-linux-gnu | |
- name: aarch64 | |
linux_name: aarch64-linux-gnu | |
exec_name: aarch64-linux-gnu | |
- name: armv7 | |
linux_name: arm-linux-gnueabihf | |
exec_name: arm-linux-gnueabihf | |
- name: ppc64le | |
linux_name: powerpc64le-linux-gnu | |
exec_name: powerpc64le-linux-gnu | |
- name: riscv64 | |
linux_name: riscv64-linux-gnu | |
exec_name: riscv64-linux-gnu | |
- name: s390x | |
linux_name: s390x-linux-gnu | |
exec_name: s390x-linux-gnu | |
java_version: [ 8, 11, 17, 21 ] | |
name: Linux-${{ matrix.architecture.name }}-Build-JDK${{ matrix.java_version }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: ${{ matrix.java_version }} | |
architecture: 'x64' | |
check-latest: true | |
- name: Install GCC | |
run: | | |
sudo apt-get install -y gcc-${{ matrix.architecture.linux_name }} g++-${{ matrix.architecture.linux_name }} | |
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/${{ matrix.architecture.exec_name}}-gcc 200 | |
sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/${{ matrix.architecture.exec_name}}-g++ 200 | |
- name: Build | |
run: mvn -B -V -ntp --file pom.xml -P linux-${{ matrix.architecture.name }} "-Dmaven.test.skip=true" clean package | |
- name: Upload build | |
uses: actions/upload-artifact@v4 | |
with: | |
name: Linux-${{ matrix.architecture.name }}-Build-JDK${{ matrix.java_version }} | |
path: . | |
compression-level: 9 | |
Windows-Build: | |
strategy: | |
fail-fast: true | |
matrix: | |
architecture: | |
- name: x86_64 | |
msvc_code: x64 | |
- name: x86 | |
msvc_code: x64_x86 | |
- name: aarch64 | |
msvc_code: x64_arm64 | |
- name: armv7 | |
msvc_code: x64_arm | |
java_version: [ 8, 11, 17, 21 ] | |
name: Windows-${{ matrix.architecture.name }}-Build-JDK${{ matrix.java_version }} | |
runs-on: windows-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: ${{ matrix.java_version }} | |
architecture: 'x64' | |
check-latest: true | |
- name: Enable compiler | |
uses: ilammy/msvc-dev-cmd@v1 | |
with: | |
arch: ${{ matrix.architecture.msvc_code }} | |
- name: Build | |
run: mvn -B -V -ntp --file pom.xml -P windows-${{ matrix.architecture.name }} "-Dmaven.test.skip=true" clean package | |
- name: Upload build | |
uses: actions/upload-artifact@v4 | |
with: | |
name: Windows-${{ matrix.architecture.name }}-Build-JDK${{ matrix.java_version }} | |
path: . | |
compression-level: 9 | |
OSX-Build: | |
strategy: | |
fail-fast: true | |
matrix: | |
architecture: | |
- name: x86_64 | |
- name: aarch64 | |
java_version: [ 8, 11, 17, 21 ] | |
name: OSX-${{ matrix.architecture.name }}-Build-JDK${{ matrix.java_version }} | |
runs-on: macos-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: ${{ matrix.java_version }} | |
architecture: 'x64' | |
check-latest: true | |
- name: Build | |
run: mvn -B -V -ntp --file pom.xml -P osx-${{ matrix.architecture.name }} "-Dmaven.test.skip=true" clean package | |
- name: Upload build | |
uses: actions/upload-artifact@v4 | |
with: | |
name: OSX-${{ matrix.architecture.name }}-Build-JDK${{ matrix.java_version }} | |
path: . | |
compression-level: 9 | |
Complete-Build: | |
strategy: | |
fail-fast: true | |
matrix: | |
java_version: [ 8, 11, 17, 21 ] | |
needs: [ Linux-Build, Windows-Build, OSX-Build ] | |
name: Complete-Build-JDK${{ matrix.java_version }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: ${{ matrix.java_version }} | |
architecture: 'x64' | |
check-latest: true | |
- name: Download builds | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: "*-JDK${{ matrix.java_version }}" | |
path: builds/ | |
merge-multiple: false | |
- name: Copy builds | |
shell: /usr/bin/bash -e {0} | |
run: | | |
OUT=$PWD | |
rootPaths=($(find ./builds/*/natives/ -type d -name "target" | grep -oiP '(.*)\/([^-]*-[^-]*)-Build-JDK([0-9]*)(?=\/natives\/\2\/target)')) | |
paths=($(find ./builds/*/natives/ -type d -name "target" | grep -oiP '(?:(.*)\/([^-]*-[^-]*)-Build-JDK([0-9]*)\/)natives\/\2\/target')) | |
for i in "${!paths[@]}"; do | |
rootPath="${rootPaths[$i]}" | |
rootPathLen="${#rootPath}" | |
path="${paths[$i]}" | |
cd $rootPath | |
path=.${path:rootPathLen:256} | |
cp -r --parent $path $OUT | |
cd $OUT | |
done | |
- name: Build | |
run: mvn -B -V -ntp --file pom.xml -P release "-Dmaven.test.skip=true" package | |
- name: Upload build | |
uses: actions/upload-artifact@v4 | |
with: | |
name: Complete-Build-JDK${{ matrix.java_version }} | |
path: . | |
compression-level: 9 | |
Linux-Test: | |
strategy: | |
fail-fast: true | |
matrix: | |
architecture: | |
- name: x86_64 | |
runs_on: ubuntu-24.04 | |
java_distro: 'temurin' | |
java_name: x64 | |
linux_name: amd64 | |
is_ports: false | |
qemu_package_name: x86 | |
qemu_name: x86_64 | |
- name: x86 | |
runs_on: ubuntu-22.04 | |
java_distro: 'liberica' | |
java_name: x86 | |
linux_name: i386 | |
is_ports: false | |
qemu_package_name: x86 | |
qemu_name: i386 | |
- name: aarch64 | |
runs_on: ubuntu-24.04 | |
java_distro: 'temurin' | |
java_name: aarch64 | |
linux_name: arm64 | |
is_ports: true | |
qemu_package_name: arm | |
qemu_name: aarch64 | |
- name: armv7 | |
runs_on: ubuntu-24.04 | |
java_distro: 'temurin' | |
java_name: arm | |
linux_name: armhf | |
is_ports: true | |
qemu_package_name: arm | |
qemu_name: armhf | |
- name: ppc64le | |
runs_on: ubuntu-24.04 | |
java_distro: 'temurin' | |
java_name: ppc64le | |
linux_name: ppc64el | |
is_ports: true | |
qemu_package_name: ppc | |
qemu_name: ppc64el | |
- name: riscv64 | |
runs_on: ubuntu-24.04 | |
java_distro: 'temurin' | |
java_name: riscv64 | |
linux_name: riscv64 | |
is_ports: true | |
qemu_package_name: misc | |
qemu_name: riscv64 | |
- name: s390x | |
runs_on: ubuntu-24.04 | |
java_distro: 'temurin' | |
java_name: s390x | |
linux_name: s390x | |
is_ports: true | |
qemu_package_name: misc | |
qemu_name: s390x | |
java_version: [ 8, 11, 17, 21 ] | |
exclude: | |
- architecture: | |
name: armv7 | |
java_distro: 'temurin' | |
java_version: 17 | |
- architecture: | |
name: armv7 | |
java_distro: 'temurin' | |
java_version: 21 | |
- architecture: | |
name: s390x | |
java_distro: 'temurin' | |
java_version: 8 | |
- architecture: | |
name: riscv64 | |
java_distro: 'temurin' | |
java_version: 8 | |
- architecture: | |
name: riscv64 | |
java_distro: 'temurin' | |
java_version: 11 | |
needs: Linux-Build | |
name: Linux-${{ matrix.architecture.name }}-Test-JDK${{ matrix.java_version }} | |
runs-on: ${{ matrix.architecture.runs_on }} | |
steps: | |
- name: Setup QEMU | |
run: | | |
sudo dpkg --add-architecture ${{ matrix.architecture.linux_name }} | |
sudo rm -f /etc/apt/sources.list /etc/apt/sources.list.d/ubuntu.sources | |
if [[ ${{ matrix.architecture.is_ports }} != true ]]; then | |
echo "deb [arch=amd64,${{ matrix.architecture.linux_name }}] http://azure.archive.ubuntu.com/ubuntu/ $(lsb_release -sc) main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ubuntu.list | |
echo "deb [arch=amd64,${{ matrix.architecture.linux_name }}] http://azure.archive.ubuntu.com/ubuntu/ $(lsb_release -sc)-updates main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ubuntu-updates.list | |
echo "deb [arch=amd64,${{ matrix.architecture.linux_name }}] http://azure.archive.ubuntu.com/ubuntu/ $(lsb_release -sc)-security main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ubuntu-security.list | |
else | |
echo "deb [arch=amd64] http://azure.archive.ubuntu.com/ubuntu/ $(lsb_release -sc) main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ubuntu.list | |
echo "deb [arch=amd64] http://azure.archive.ubuntu.com/ubuntu/ $(lsb_release -sc)-updates main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ubuntu-updates.list | |
echo "deb [arch=amd64] http://azure.archive.ubuntu.com/ubuntu/ $(lsb_release -sc)-security main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ubuntu-security.list | |
fi | |
if [[ ${{ matrix.architecture.is_ports}} == true ]]; then | |
echo "deb [arch=${{ matrix.architecture.linux_name }}] http://azure.ports.ubuntu.com/ubuntu-ports/ $(lsb_release -sc) main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ubuntu-ports.list | |
echo "deb [arch=${{ matrix.architecture.linux_name }}] http://azure.ports.ubuntu.com/ubuntu-ports/ $(lsb_release -sc)-updates main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ubuntu-ports-updates.list | |
echo "deb [arch=${{ matrix.architecture.linux_name }}] http://azure.ports.ubuntu.com/ubuntu-ports/ $(lsb_release -sc)-security main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/ubuntu-ports-security.list | |
fi | |
sudo apt-get update -y | |
sudo apt-get --fix-broken install | |
sudo NEEDRESTART_SUSPEND=true apt-get install -y qemu-system-${{ matrix.architecture.qemu_package_name }} qemu-user qemu-utils \ | |
libc6:amd64 libc6:${{ matrix.architecture.linux_name }} libstdc++6:amd64 libstdc++6:${{ matrix.architecture.linux_name }} libtinfo6:amd64 libtinfo6:${{ matrix.architecture.linux_name }} \ | |
libatomic1:amd64 libatomic1:${{ matrix.architecture.linux_name }} zlib1g:amd64 zlib1g:${{ matrix.architecture.linux_name }} | |
cd /opt | |
sudo apt-get download bash:${{ matrix.architecture.linux_name }} | |
sudo mkdir -p bashdata | |
sudo ar x bash_*.deb --output=bashdata | |
sudo tar xf bashdata/data.tar.* -C bashdata | |
if [[ -f bashdata/usr/bin/bash ]]; then | |
sudo mv bashdata/usr/bin/bash /opt/bash | |
elif [[ -f bashdata/bin/bash ]]; then | |
sudo mv bashdata/bin/bash /opt/bash | |
fi | |
sudo rm -r bash_*.deb bashdata | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: ${{ matrix.architecture.java_distro }} | |
java-version: ${{ matrix.java_version }} | |
architecture: ${{ matrix.architecture.java_name }} | |
check-latest: true | |
- name: Download build | |
uses: actions/download-artifact@v4 | |
with: | |
name: Linux-${{ matrix.architecture.name }}-Build-JDK${{ matrix.java_version }} | |
path: . | |
- name: Test | |
run: | | |
qemu-${{ matrix.architecture.qemu_name }} /opt/bash -c "mvn -B -V -ntp --file pom.xml -P release test" | |
Windows-Test: | |
strategy: | |
fail-fast: false | |
matrix: | |
architecture: | |
- name: x86_64 | |
runs_on: windows-2022 | |
java_distro: 'temurin' | |
java_name: x64 | |
- name: x86 | |
runs_on: windows-2022 | |
java_distro: 'temurin' | |
java_name: x86 | |
- name: aarch64 | |
runs_on: self-hosted | |
java_distro: 'liberica' | |
java_name: aarch64 | |
java_version: [ 8, 11, 17, 21 ] | |
exclude: | |
- architecture: | |
name: x86 | |
java_distro: 'temurin' | |
java_version: 21 | |
- architecture: | |
name: aarch64 | |
java_distro: 'liberica' | |
java_version: 8 | |
needs: Windows-Build | |
name: Windows-${{ matrix.architecture.name }}-Test-JDK${{ matrix.java_version }} | |
runs-on: ${{ matrix.architecture.runs_on }} | |
steps: | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: ${{ matrix.architecture.java_distro }} | |
java-version: ${{ matrix.java_version }} | |
architecture: ${{ matrix.architecture.java_name }} | |
check-latest: true | |
- name: Download build | |
uses: actions/download-artifact@v4 | |
with: | |
name: Windows-${{ matrix.architecture.name }}-Build-JDK${{ matrix.java_version }} | |
path: . | |
- name: Test | |
run: | | |
mvn -B -V -ntp --file pom.xml -P release test | |
OSX-Test: | |
strategy: | |
fail-fast: true | |
matrix: | |
architecture: | |
- name: x86_64 | |
runs_on: macos-14 | |
java_distro: 'temurin' | |
java_name: x64 | |
- name: aarch64 | |
runs_on: macos-14 | |
java_distro: 'temurin' | |
java_name: aarch64 | |
java_version: [ 8, 11, 17, 21 ] | |
include: | |
- architecture: | |
name: aarch64 | |
runs_on: macos-14 | |
java_distro: 'liberica' | |
java_name: aarch64 | |
java_version: 8 | |
exclude: | |
- architecture: | |
name: aarch64 | |
java_distro: 'temurin' | |
java_version: 8 | |
needs: OSX-Build | |
name: OSX-${{ matrix.architecture.name }}-Test-JDK${{ matrix.java_version }} | |
runs-on: ${{ matrix.architecture.runs_on }} | |
steps: | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: ${{ matrix.architecture.java_distro }} | |
java-version: ${{ matrix.java_version }} | |
architecture: ${{ matrix.architecture.java_name }} | |
check-latest: true | |
- name: Download build | |
uses: actions/download-artifact@v4 | |
with: | |
name: OSX-${{ matrix.architecture.name }}-Build-JDK${{ matrix.java_version }} | |
path: . | |
- name: Test | |
run: | | |
mvn -B -V -ntp --file pom.xml -P release test |