Add new architecture support (Linux x86, Windows x86, Windows ArmV7) and improve build system #775
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: | |
inputs: | |
run_all_tests: | |
description: Run extra tests on different ubuntu versions | |
required: false | |
type: boolean | |
default: false | |
keep_intermediate_builds: | |
description: Keep intermediate builds | |
required: false | |
type: boolean | |
default: false | |
jobs: | |
Linux-Build: | |
strategy: | |
fail-fast: true | |
matrix: | |
architecture: | |
- name: x86_64 | |
centos_version: "6-gcc7" | |
gcc_package_name: "gcc gcc-c++" | |
gcc_exec_name: "x86_64-redhat-linux-gnu" | |
- name: x86 | |
ubuntu_version: "18.04" | |
gcc_package_name: "gcc-i686-linux-gnu g++-i686-linux-gnu" | |
gcc_exec_name: "i686-linux-gnu" | |
- name: aarch64 | |
ubuntu_version: "18.04" | |
gcc_package_name: "gcc-aarch64-linux-gnu g++-aarch64-linux-gnu" | |
gcc_exec_name: "aarch64-linux-gnu" | |
- name: armv7 | |
ubuntu_version: "18.04" | |
gcc_package_name: "gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf" | |
gcc_exec_name: "arm-linux-gnueabihf" | |
- name: ppc64le | |
ubuntu_version: "18.04" | |
gcc_package_name: "gcc-powerpc64le-linux-gnu g++-powerpc64le-linux-gnu" | |
gcc_exec_name: "powerpc64le-linux-gnu" | |
- name: riscv64 | |
ubuntu_version: "18.04" | |
gcc_package_name: "gcc-riscv64-linux-gnu g++-riscv64-linux-gnu" | |
gcc_exec_name: "riscv64-linux-gnu" | |
- name: s390x | |
ubuntu_version: "18.04" | |
gcc_package_name: "gcc-s390x-linux-gnu g++-s390x-linux-gnu" | |
gcc_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: Pre Setup JDK | |
run: | | |
sudo rm -rf /opt/hostedtoolcache/Java_*/* | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'corretto' | |
java-version: ${{ matrix.java_version }} | |
architecture: 'x64' | |
check-latest: true | |
- name: Setup Ubuntu Build | |
if: ${{ matrix.architecture.ubuntu_version }} | |
run: | | |
docker build \ | |
--platform linux/amd64 \ | |
--build-arg "DOCKER_IMAGE=amd64/ubuntu:${{ matrix.architecture.ubuntu_version }}" \ | |
--build-arg "TARGET_GCC_PACKAGE=${{ matrix.architecture.gcc_package_name }}" \ | |
--build-arg "TARGET_GCC_EXEC=${{ matrix.architecture.gcc_exec_name }}" \ | |
--tag linux-buildimage:${{ matrix.architecture.name }} \ | |
docker/build/ | |
- name: Setup CentOS Build | |
if: ${{ matrix.architecture.centos_version }} | |
run: | | |
docker build \ | |
--platform linux/amd64 \ | |
--build-arg "DOCKER_IMAGE=gatlingcorp/centos:${{ matrix.architecture.centos_version }}" \ | |
--build-arg "TARGET_GCC_PACKAGE=${{ matrix.architecture.gcc_package_name }}" \ | |
--build-arg "TARGET_GCC_EXEC=${{ matrix.architecture.gcc_exec_name }}" \ | |
--tag linux-buildimage:${{ matrix.architecture.name }} \ | |
docker/centosbuild/ | |
- name: Build | |
run: | | |
chmod +x ./mvnw ./mvnw.cmd | |
docker run \ | |
--platform linux/amd64 \ | |
--volume "$PWD:/data" \ | |
--volume "$JAVA_HOME:/opt/java" \ | |
linux-buildimage:${{ matrix.architecture.name }} \ | |
./mvnw -B -V -ntp -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: Pre Setup JDK | |
run: | | |
Remove-Item -Recurse -Force -Path C:\hostedtoolcache\windows\Java_*\* | |
- 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: | | |
./mvnw -B -V -ntp -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: Pre Setup JDK | |
run: | | |
sudo rm -rf /Users/runner/hostedtoolcache/Java_*/* | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: ${{ matrix.java_version }} | |
architecture: 'x64' | |
check-latest: true | |
- name: Build | |
run: | | |
chmod +x ./mvnw ./mvnw.cmd | |
./mvnw -B -V -ntp -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, Linux-Test-Docker, Linux-Test-QEMU, Windows-Test, OSX-Test ] | |
if: ${{ always() && !cancelled() }} | |
name: Complete-Build-JDK${{ matrix.java_version }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Pre Setup JDK | |
run: | | |
sudo rm -rf /opt/hostedtoolcache/Java_*/* | |
- name: Setup JDK | |
uses: actions/setup-java@v4 | |
with: | |
distribution: 'temurin' | |
java-version: ${{ matrix.java_version }} | |
architecture: 'x64' | |
check-latest: true | |
- name: Download intermediate builds | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: "*-JDK${{ matrix.java_version }}" | |
path: builds/ | |
merge-multiple: false | |
- name: Merge intermediate builds | |
run: | | |
chmod +x docker/merge-builds.sh | |
docker/merge-builds.sh | |
- name: Setup Build | |
run: | | |
docker build \ | |
--platform linux/amd64 \ | |
--build-arg "DOCKER_IMAGE=amd64/ubuntu:18.04" \ | |
--tag linux-buildimage:complete \ | |
docker/completebuild/ | |
- name: Build | |
run: | | |
chmod +x ./mvnw ./mvnw.cmd | |
docker run \ | |
--platform linux/amd64 \ | |
--volume "$PWD:/data" \ | |
--volume "$JAVA_HOME:/opt/java" \ | |
linux-buildimage:complete \ | |
./mvnw -B -V -ntp -P "release" "-Dmaven.test.skip=true" package | |
- name: Remove intermediate builds | |
if: ${{ !(inputs.keep_intermediate_builds == true) }} | |
continue-on-error: true | |
uses: geekyeggo/delete-artifact@v5 | |
with: | |
name: '*-JDK${{ matrix.java_version }}' | |
- name: Upload build | |
uses: actions/upload-artifact@v4 | |
with: | |
name: Complete-Build-JDK${{ matrix.java_version }} | |
path: . | |
compression-level: 9 | |
Linux-Test-Docker: | |
strategy: | |
fail-fast: true | |
matrix: | |
architecture: | |
- name: x86_64 | |
ubuntu_docker_arch: amd64 | |
java_distro: 'temurin' | |
java_name: x64 | |
docker_name: linux/amd64 | |
- name: aarch64 | |
ubuntu_docker_arch: arm64v8 | |
java_distro: 'temurin' | |
java_name: aarch64 | |
docker_name: linux/aarch64 | |
ubuntu_version: [ "16.04", "18.04", "20.04", "22.04", "24.04" ] | |
java_version: [ 8, 11, 17, 21 ] | |
needs: [ Linux-Build ] | |
if: ${{ inputs.run_all_tests == true }} | |
name: Linux-${{ matrix.architecture.name }}-Test-JDK${{ matrix.java_version }}-Docker-Ubuntu_${{ matrix.ubuntu_version }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Pre Setup JDK | |
run: | | |
sudo rm -rf /opt/hostedtoolcache/Java_*/* | |
- 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: Setup QEMU | |
uses: docker/setup-qemu-action@v3 | |
with: | |
platforms: ${{ matrix.architecture.docker_name }} | |
- name: Download build | |
uses: actions/download-artifact@v4 | |
with: | |
name: Linux-${{ matrix.architecture.name }}-Build-JDK${{ matrix.java_version }} | |
path: . | |
- name: Setup Test | |
run: | | |
docker build \ | |
--platform ${{ matrix.architecture.docker_name }} \ | |
--build-arg "DOCKER_IMAGE=${{ matrix.architecture.ubuntu_docker_arch }}/ubuntu:${{ matrix.ubuntu_version }}" \ | |
--tag linux-testimage:${{ matrix.architecture.name }} \ | |
docker/test/ | |
- name: Test | |
run: | | |
chmod +x ./mvnw ./mvnw.cmd | |
docker run \ | |
--platform ${{ matrix.architecture.docker_name }} \ | |
--volume "$PWD:/data" \ | |
--volume "$JAVA_HOME:/opt/java" \ | |
linux-testimage:${{ matrix.architecture.name }} \ | |
./mvnw -B -V -ntp -P "release" test | |
Linux-Test-QEMU: | |
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: ppc64le | |
- 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 }}-QEMU | |
runs-on: ${{ matrix.architecture.runs_on }} | |
steps: | |
- name: Pre Setup JDK | |
run: | | |
sudo rm -rf /opt/hostedtoolcache/Java_*/* | |
- 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: Setup QEMU | |
run: | | |
chmod +x docker/install-qemu.sh | |
docker/install-qemu.sh "${{ matrix.architecture.linux_name }}" "${{ matrix.architecture.is_ports }}" "${{ matrix.architecture.qemu_package_name }}" | |
- name: Test | |
run: | | |
chmod +x ./mvnw ./mvnw.cmd | |
qemu-${{ matrix.architecture.qemu_name }} /opt/bash -c "./mvnw -B -V -ntp -P \"release\" test" | |
Windows-Test: | |
strategy: | |
fail-fast: true | |
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: Pre Setup JDK | |
run: | | |
Remove-Item -Recurse -Force -Path C:\hostedtoolcache\windows\Java_*\* | |
- 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: | | |
./mvnw -B -V -ntp -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: 'liberica' | |
java_name: aarch64 | |
java_version: [ 8, 11, 17, 21 ] | |
needs: [ OSX-Build ] | |
name: OSX-${{ matrix.architecture.name }}-Test-JDK${{ matrix.java_version }} | |
runs-on: ${{ matrix.architecture.runs_on }} | |
steps: | |
- name: Pre Setup JDK | |
run: | | |
sudo rm -rf /Users/runner/hostedtoolcache/Java_*/* | |
- 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: | | |
chmod +x ./mvnw ./mvnw.cmd | |
./mvnw -B -V -ntp -P "release" test |