mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-06-23 14:24:14 -04:00
Add aarch64
architecture support to CI
Extend CI workflow to build for both `x86_64` and `aarch64` architectures: - Add ARM variants for Ubuntu and macOS in the build matrix - Skip tests on `aarch64` builds with `-x test` flag as JavaFX 21.x.x doesn't currently support the ARM64 architecture - Update artifact naming to include architecture identifiers - Configure architecture-specific build paths and release outputs This change enables native builds for ARM-based systems like Apple Silicon Macs and ARM servers, improving performance for users on these platforms while maintaining full test coverage on `x86_64` where supported. Make localnet cache OS-specific Prevent Error: Failed to CreateArtifact: Received non-retryable error: Failed request: (409) Conflict: an artifact with this name already exists on the workflow run Add a warning about `linux/aarch64` tests being skipped Simplify GitHub Actions workflow conditions Replace verbose condition syntax with simpler `runner.os` expressions to improve readability and maintainability. This change: - Uses `runner.os` instead of specific `matrix.os` version strings - Removes unnecessary `${{ }}` expression wrappers in if conditions - Consolidates OS-specific conditions (e.g. `ubuntu-22.04` or `ubuntu-22.04-arm`) into simpler checks (`runner.os == 'Linux'`) Fix JavaFX loading on Mac ARM64 architecture JavaFX 21.0.2 supports Mac ARM64 (Apple Silicon) but was failing to load with `UnsatisfiedLinkError` because the build system wasn't detecting ARM architecture properly. This change allows the build system to correctly identify Mac ARM64 systems and use the appropriate JavaFX libraries, resolving the compatibility issues when running on Apple Silicon Macs. Split Build and Package Installer steps Cleaner CI output, split Build and Package installer step into two steps
This commit is contained in:
parent
fe3283f3b0
commit
1a42336ba5
3 changed files with 102 additions and 44 deletions
138
.github/workflows/build.yml
vendored
138
.github/workflows/build.yml
vendored
|
@ -14,7 +14,25 @@ jobs:
|
|||
build:
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-22.04, macos-13, windows-latest]
|
||||
os: [ubuntu-22.04, ubuntu-22.04-arm, macos-13, macos-15, windows-latest]
|
||||
include:
|
||||
- os: ubuntu-22.04
|
||||
arch: x86_64
|
||||
skip_tests: false
|
||||
- os: ubuntu-22.04-arm
|
||||
arch: aarch64
|
||||
# JavaFX 21.x.x doesn't support `linux/aarch64`
|
||||
# So skip tests until JavaFX is updated
|
||||
skip_tests: true
|
||||
- os: macos-13
|
||||
arch: x86_64
|
||||
skip_tests: false
|
||||
- os: macos-15
|
||||
arch: aarch64
|
||||
skip_tests: false
|
||||
- os: windows-latest
|
||||
arch: x86_64
|
||||
skip_tests: false
|
||||
fail-fast: false
|
||||
runs-on: ${{ matrix.os }}
|
||||
steps:
|
||||
|
@ -27,8 +45,16 @@ jobs:
|
|||
java-version: '21'
|
||||
distribution: 'adopt'
|
||||
cache: gradle
|
||||
- name: Build with Gradle
|
||||
- name: Build with Gradle with tests
|
||||
if: matrix.skip_tests == false
|
||||
run: ./gradlew build --stacktrace --scan
|
||||
- name: Build with Gradle without tests
|
||||
if: matrix.skip_tests == true
|
||||
run: |
|
||||
./gradlew build --stacktrace --scan -x test
|
||||
echo "::warning title=Tests Skipped::Tests were intentionally skipped for linux/aarch64 builds \
|
||||
as JavaFX 21.x.x doesn't currently support the linux/aarch64 architecture. \
|
||||
This should be revisited when JavaFX is next updated."
|
||||
- uses: actions/upload-artifact@v4
|
||||
if: failure()
|
||||
with:
|
||||
|
@ -38,115 +64,127 @@ jobs:
|
|||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
include-hidden-files: true
|
||||
name: cached-localnet
|
||||
name: cached-localnet-${{ matrix.os }}
|
||||
path: .localnet
|
||||
overwrite: true
|
||||
- name: Install dependencies
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
if: runner.os == 'Linux'
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y rpm libfuse2 flatpak flatpak-builder appstream
|
||||
flatpak remote-add --if-not-exists --user flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
||||
- name: Install WiX Toolset
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
Invoke-WebRequest -Uri 'https://github.com/wixtoolset/wix3/releases/download/wix314rtm/wix314.exe' -OutFile wix314.exe
|
||||
.\wix314.exe /quiet /norestart
|
||||
shell: powershell
|
||||
- name: Build Haveno Installer
|
||||
- name: Build Haveno Installer with tests
|
||||
if: matrix.skip_tests == false
|
||||
run: ./gradlew clean build --refresh-keys --refresh-dependencies
|
||||
working-directory: .
|
||||
- name: Build Haveno Installer without tests
|
||||
if: matrix.skip_tests == true
|
||||
run: |
|
||||
./gradlew clean build --refresh-keys --refresh-dependencies
|
||||
./gradlew packageInstallers
|
||||
./gradlew clean build --refresh-keys --refresh-dependencies -x test
|
||||
echo "::warning title=Tests Skipped::Tests were intentionally skipped for linux/aarch64 builds \
|
||||
as JavaFX 21.x.x doesn't currently support the linux/aarch64 architecture. \
|
||||
This should be revisited when JavaFX is next updated."
|
||||
working-directory: .
|
||||
- name: Package Haveno Installer
|
||||
run: ./gradlew packageInstallers
|
||||
working-directory: .
|
||||
|
||||
# get version from jar
|
||||
- name: Set Version Unix
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' || matrix.os == 'macos-13' }}
|
||||
if: runner.os != 'Windows'
|
||||
run: |
|
||||
export VERSION=$(ls desktop/build/temp-*/binaries/desktop-*.jar.SHA-256 | grep -Eo 'desktop-[0-9]+\.[0-9]+\.[0-9]+' | sed 's/desktop-//')
|
||||
echo "VERSION=$VERSION" >> $GITHUB_ENV
|
||||
- name: Set Version Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
$VERSION = (Get-ChildItem -Path desktop\build\temp-*/binaries\desktop-*.jar.SHA-256).Name -replace 'desktop-', '' -replace '-.*', ''
|
||||
"VERSION=$VERSION" | Out-File -FilePath $env:GITHUB_ENV -Append
|
||||
shell: powershell
|
||||
|
||||
- name: Move Release Files for Linux
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
if: runner.os == 'Linux'
|
||||
run: |
|
||||
mkdir ${{ github.workspace }}/release-linux-rpm
|
||||
mkdir ${{ github.workspace }}/release-linux-deb
|
||||
mkdir ${{ github.workspace }}/release-linux-flatpak
|
||||
mkdir ${{ github.workspace }}/release-linux-appimage
|
||||
mv desktop/build/temp-*/binaries/haveno-*.rpm ${{ github.workspace }}/release-linux-rpm/haveno-v${{ env.VERSION }}-linux-x86_64-installer.rpm
|
||||
mv desktop/build/temp-*/binaries/haveno_*.deb ${{ github.workspace }}/release-linux-deb/haveno-v${{ env.VERSION }}-linux-x86_64-installer.deb
|
||||
mv desktop/build/temp-*/binaries/*.flatpak ${{ github.workspace }}/release-linux-flatpak/haveno-v${{ env.VERSION }}-linux-x86_64.flatpak
|
||||
mv desktop/build/temp-*/binaries/haveno_*.AppImage ${{ github.workspace }}/release-linux-appimage/haveno-v${{ env.VERSION }}-linux-x86_64.AppImage
|
||||
mv desktop/build/temp-*/binaries/haveno-*.rpm ${{ github.workspace }}/release-linux-rpm/haveno-v${{ env.VERSION }}-linux-${{ matrix.arch }}-installer.rpm
|
||||
mv desktop/build/temp-*/binaries/haveno_*.deb ${{ github.workspace }}/release-linux-deb/haveno-v${{ env.VERSION }}-linux-${{ matrix.arch }}-installer.deb
|
||||
mv desktop/build/temp-*/binaries/*.flatpak ${{ github.workspace }}/release-linux-flatpak/haveno-v${{ env.VERSION }}-linux-${{ matrix.arch }}.flatpak
|
||||
mv desktop/build/temp-*/binaries/haveno_*.AppImage ${{ github.workspace }}/release-linux-appimage/haveno-v${{ env.VERSION }}-linux-${{ matrix.arch }}.AppImage
|
||||
cp desktop/build/temp-*/binaries/desktop-*.jar.SHA-256 ${{ github.workspace }}/release-linux-deb
|
||||
cp desktop/build/temp-*/binaries/desktop-*.jar.SHA-256 ${{ github.workspace }}/release-linux-rpm
|
||||
cp desktop/build/temp-*/binaries/desktop-*.jar.SHA-256 ${{ github.workspace }}/release-linux-appimage
|
||||
cp desktop/build/temp-*/binaries/desktop-*.jar.SHA-256 ${{ github.workspace }}/release-linux-flatpak
|
||||
cp desktop/build/temp-*/binaries/desktop-*.jar.SHA-256 ${{ github.workspace }}/haveno-v${{ env.VERSION }}-linux-x86_64-SNAPSHOT-all.jar.SHA-256
|
||||
cp desktop/build/temp-*/binaries/desktop-*.jar.SHA-256 ${{ github.workspace }}/haveno-v${{ env.VERSION }}-linux-${{ matrix.arch }}-SNAPSHOT-all.jar.SHA-256
|
||||
shell: bash
|
||||
- name: Move Release Files for macOS
|
||||
if: ${{ matrix.os == 'macos-13' }}
|
||||
if: runner.os == 'MacOS'
|
||||
run: |
|
||||
mkdir ${{ github.workspace }}/release-macos
|
||||
mv desktop/build/temp-*/binaries/Haveno-*.dmg ${{ github.workspace }}/release-macos/haveno-v${{ env.VERSION }}-macos-installer.dmg
|
||||
cp desktop/build/temp-*/binaries/desktop-*.jar.SHA-256 ${{ github.workspace }}/release-macos
|
||||
cp desktop/build/temp-*/binaries/desktop-*.jar.SHA-256 ${{ github.workspace }}/haveno-v${{ env.VERSION }}-macos-SNAPSHOT-all.jar.SHA-256
|
||||
mkdir ${{ github.workspace }}/release-macos-${{ matrix.arch }}
|
||||
mv desktop/build/temp-*/binaries/Haveno-*.dmg ${{ github.workspace }}/release-macos-${{ matrix.arch }}/haveno-v${{ env.VERSION }}-macos-${{ matrix.arch }}-installer.dmg
|
||||
cp desktop/build/temp-*/binaries/desktop-*.jar.SHA-256 ${{ github.workspace }}/release-macos-${{ matrix.arch }}
|
||||
cp desktop/build/temp-*/binaries/desktop-*.jar.SHA-256 ${{ github.workspace }}/haveno-v${{ env.VERSION }}-macos-${{ matrix.arch }}-SNAPSHOT-all.jar.SHA-256
|
||||
shell: bash
|
||||
- name: Move Release Files on Windows
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
if: runner.os == 'Windows'
|
||||
run: |
|
||||
mkdir ${{ github.workspace }}/release-windows
|
||||
Move-Item -Path desktop\build\temp-*/binaries\Haveno-*.exe -Destination ${{ github.workspace }}/release-windows/haveno-v${{ env.VERSION }}-windows-installer.exe
|
||||
Move-Item -Path desktop\build\temp-*/binaries\Haveno-*.exe -Destination ${{ github.workspace }}/release-windows/haveno-v${{ env.VERSION }}-windows-${{ matrix.arch }}-installer.exe
|
||||
Copy-Item -Path desktop\build\temp-*/binaries\desktop-*.jar.SHA-256 -Destination ${{ github.workspace }}/release-windows
|
||||
Move-Item -Path desktop\build\temp-*/binaries\desktop-*.jar.SHA-256 -Destination ${{ github.workspace }}/haveno-v${{ env.VERSION }}-windows-SNAPSHOT-all.jar.SHA-256
|
||||
shell: powershell
|
||||
|
||||
# win
|
||||
# Windows artifacts
|
||||
- uses: actions/upload-artifact@v4
|
||||
name: "Windows artifacts"
|
||||
if: ${{ matrix.os == 'windows-latest' }}
|
||||
if: runner.os == 'Windows'
|
||||
with:
|
||||
name: haveno-windows
|
||||
name: haveno-windows-${{ matrix.arch }}
|
||||
path: ${{ github.workspace }}/release-windows
|
||||
# macos
|
||||
|
||||
# macOS artifacts
|
||||
- uses: actions/upload-artifact@v4
|
||||
name: "macOS artifacts"
|
||||
if: ${{ matrix.os == 'macos-13' }}
|
||||
if: runner.os == 'MacOS'
|
||||
with:
|
||||
name: haveno-macos
|
||||
path: ${{ github.workspace }}/release-macos
|
||||
# linux
|
||||
name: haveno-macos-${{ matrix.arch }}
|
||||
path: ${{ github.workspace }}/release-macos-${{ matrix.arch }}
|
||||
|
||||
# Linux artifacts
|
||||
- uses: actions/upload-artifact@v4
|
||||
name: "Linux - deb artifact"
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
if: runner.os == 'Linux'
|
||||
with:
|
||||
name: haveno-linux-deb
|
||||
name: haveno-linux-${{ matrix.arch }}-deb
|
||||
path: ${{ github.workspace }}/release-linux-deb
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
name: "Linux - rpm artifact"
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
if: runner.os == 'Linux'
|
||||
with:
|
||||
name: haveno-linux-rpm
|
||||
name: haveno-linux-${{ matrix.arch }}-rpm
|
||||
path: ${{ github.workspace }}/release-linux-rpm
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
name: "Linux - AppImage artifact"
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
if: runner.os == 'Linux'
|
||||
with:
|
||||
name: haveno-linux-appimage
|
||||
name: haveno-linux-${{ matrix.arch }}-appimage
|
||||
path: ${{ github.workspace }}/release-linux-appimage
|
||||
|
||||
- uses: actions/upload-artifact@v4
|
||||
name: "Linux - flatpak artifact"
|
||||
if: ${{ matrix.os == 'ubuntu-22.04' }}
|
||||
if: runner.os == 'Linux'
|
||||
with:
|
||||
name: haveno-linux-flatpak
|
||||
name: haveno-linux-${{ matrix.arch }}-flatpak
|
||||
path: ${{ github.workspace }}/release-linux-flatpak
|
||||
|
||||
- name: Release
|
||||
|
@ -154,14 +192,30 @@ jobs:
|
|||
if: startsWith(github.ref, 'refs/tags/')
|
||||
with:
|
||||
files: |
|
||||
# Linux x86_64
|
||||
${{ github.workspace }}/release-linux-deb/haveno-v${{ env.VERSION }}-linux-x86_64-installer.deb
|
||||
${{ github.workspace }}/release-linux-rpm/haveno-v${{ env.VERSION }}-linux-x86_64-installer.rpm
|
||||
${{ github.workspace }}/release-linux-appimage/haveno-v${{ env.VERSION }}-linux-x86_64.AppImage
|
||||
${{ github.workspace }}/release-linux-flatpak/haveno-v${{ env.VERSION }}-linux-x86_64.flatpak
|
||||
${{ github.workspace }}/haveno-v${{ env.VERSION }}-linux-x86_64-SNAPSHOT-all.jar.SHA-256
|
||||
${{ github.workspace }}/release-macos/haveno-v${{ env.VERSION }}-macos-installer.dmg
|
||||
${{ github.workspace }}/haveno-v${{ env.VERSION }}-macos-SNAPSHOT-all.jar.SHA-256
|
||||
${{ github.workspace }}/release-windows/haveno-v${{ env.VERSION }}-windows-installer.exe
|
||||
|
||||
# Linux aarch64
|
||||
${{ github.workspace }}/release-linux-deb/haveno-v${{ env.VERSION }}-linux-aarch64-installer.deb
|
||||
${{ github.workspace }}/release-linux-rpm/haveno-v${{ env.VERSION }}-linux-aarch64-installer.rpm
|
||||
${{ github.workspace }}/release-linux-appimage/haveno-v${{ env.VERSION }}-linux-aarch64.AppImage
|
||||
${{ github.workspace }}/release-linux-flatpak/haveno-v${{ env.VERSION }}-linux-aarch64.flatpak
|
||||
${{ github.workspace }}/haveno-v${{ env.VERSION }}-linux-aarch64-SNAPSHOT-all.jar.SHA-256
|
||||
|
||||
# macOS x86_64
|
||||
${{ github.workspace }}/release-macos-x86_64/haveno-v${{ env.VERSION }}-macos-x86_64-installer.dmg
|
||||
${{ github.workspace }}/haveno-v${{ env.VERSION }}-macos-x86_64-SNAPSHOT-all.jar.SHA-256
|
||||
|
||||
# macOS aarch64
|
||||
${{ github.workspace }}/release-macos-aarch64/haveno-v${{ env.VERSION }}-macos-aarch64-installer.dmg
|
||||
${{ github.workspace }}/haveno-v${{ env.VERSION }}-macos-aarch64-SNAPSHOT-all.jar.SHA-256
|
||||
|
||||
# Windows
|
||||
${{ github.workspace }}/release-windows/haveno-v${{ env.VERSION }}-windows-x86_64-installer.exe
|
||||
${{ github.workspace }}/haveno-v${{ env.VERSION }}-windows-SNAPSHOT-all.jar.SHA-256
|
||||
|
||||
# https://git-scm.com/docs/git-tag - git-tag Docu
|
||||
|
|
|
@ -79,7 +79,9 @@ configure(subprojects) {
|
|||
slf4jVersion = '1.7.30'
|
||||
sparkVersion = '2.5.2'
|
||||
|
||||
os = osdetector.os == 'osx' ? 'mac' : osdetector.os == 'windows' ? 'win' : osdetector.os
|
||||
def osName = osdetector.os == 'osx' ? 'mac' : osdetector.os == 'windows' ? 'win' : osdetector.os
|
||||
def osArch = System.getProperty("os.arch").toLowerCase()
|
||||
os = (osName == 'mac' && (osArch.contains('aarch64') || osArch.contains('arm'))) ? 'mac-aarch64' : osName
|
||||
}
|
||||
|
||||
repositories {
|
||||
|
@ -951,4 +953,3 @@ configure(project(':apitest')) {
|
|||
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$jupiterVersion"
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2474,6 +2474,9 @@
|
|||
<artifact name="javafx-swing-21.0.2-linux.jar">
|
||||
<sha256 value="67a4369cd556ed9b8b6970116e5f5f7f55ef64e54aaddbcc3f7950f7590631b5" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
<artifact name="javafx-swing-21.0.2-mac-aarch64.jar">
|
||||
<sha256 value="5e6b5f10350915d92e2df8d602646eccf9b7f62c56fe04849a6b6f647d50fb74" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
<artifact name="javafx-swing-21.0.2-mac.jar">
|
||||
<sha256 value="2f047f7a4e5bc8e9603c23b168b472590a0a0607ba16b6c62d5f9b4f361d12ad" origin="Generated by Gradle"/>
|
||||
</artifact>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue