-
Notifications
You must be signed in to change notification settings - Fork 9
feat: add multiple Linux build variants for GLIBC compatibility #312
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from 3 commits
ecf7f4b
4da3c49
e2ade10
e9fdc26
0e13b67
447fe2d
91f3dab
564c2a2
57a719f
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -3,8 +3,8 @@ name: Release Dash Evo Tool | |
| on: | ||
| push: | ||
| tags: | ||
| - 'v*' | ||
| - 'v*-dev.*' | ||
| - "v*" | ||
| - "v*-dev.*" | ||
| release: | ||
| types: | ||
| - published | ||
|
|
@@ -13,6 +13,11 @@ on: | |
| tag: | ||
| description: "Version (i.e. v0.1.0)" | ||
| required: true | ||
| create_release: | ||
| description: "Create GitHub Release (check to publish release)" | ||
| required: false | ||
| default: false | ||
| type: boolean | ||
|
|
||
| permissions: | ||
| id-token: write | ||
|
|
@@ -25,14 +30,42 @@ jobs: | |
| strategy: | ||
| matrix: | ||
| include: | ||
| # Linux x86_64 - Modern build (Ubuntu 24.04, GLIBC 2.39) | ||
| - name: "linux-x86_64" | ||
| runs-on: "ubuntu-24.04" | ||
| target: "x86_64-unknown-linux-gnu" | ||
| platform: "x86_64-linux" | ||
| build-type: "modern" | ||
|
|
||
| # Linux x86_64 - Compatible build (Ubuntu 20.04, GLIBC 2.31) | ||
| - name: "linux-x86_64-compat" | ||
| runs-on: "ubuntu-20.04" | ||
| target: "x86_64-unknown-linux-gnu" | ||
| platform: "x86_64-linux-compat" | ||
| build-type: "compat" | ||
|
|
||
| # Linux ARM64 - Modern build | ||
| - name: "linux-arm64" | ||
| runs-on: "ubuntu-22.04-arm" | ||
| target: "aarch64-unknown-linux-gnu" | ||
| platform: "arm64-linux" | ||
| build-type: "modern" | ||
|
|
||
| # Linux ARM64 - Compatible build | ||
| - name: "linux-arm64-compat" | ||
| runs-on: "ubuntu-20.04-arm" | ||
lklimek marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| target: "aarch64-unknown-linux-gnu" | ||
| platform: "arm64-linux-compat" | ||
| build-type: "compat" | ||
|
|
||
| # AppImage x86_64 build | ||
| - name: "linux-x86_64-appimage" | ||
| runs-on: "ubuntu-20.04" | ||
|
||
| target: "x86_64-unknown-linux-gnu" | ||
| platform: "x86_64-linux-appimage" | ||
| build-type: "appimage" | ||
|
|
||
| # macOS builds | ||
| - name: "macos-x86_64" | ||
| runs-on: "macos-13" | ||
| target: "x86_64-apple-darwin" | ||
|
|
@@ -41,6 +74,8 @@ jobs: | |
| runs-on: "macos-latest" | ||
| target: "aarch64-apple-darwin" | ||
| platform: "arm64-mac" | ||
|
|
||
| # Windows build | ||
| - name: "Windows" | ||
| runs-on: "ubuntu-24.04" | ||
| target: "x86_64-pc-windows-gnu" | ||
|
|
@@ -64,7 +99,6 @@ jobs: | |
| restore-keys: | | ||
| ${{ runner.os }}-cargo- | ||
|
|
||
|
|
||
| - name: Setup prerequisites | ||
| run: | | ||
| mkdir -p dash-evo-tool/ | ||
|
|
@@ -80,16 +114,35 @@ jobs: | |
|
|
||
| - name: Install essentials | ||
| if: ${{ runner.os == 'Linux' }} | ||
| run: sudo apt-get update && sudo apt-get install -y build-essential pkg-config clang cmake unzip libsqlite3-dev gcc-mingw-w64 mingw-w64 libsqlite3-dev mingw-w64-x86-64-dev gcc-aarch64-linux-gnu zip && uname -a && cargo clean | ||
| run: | | ||
| sudo apt-get update | ||
| sudo apt-get install -y build-essential pkg-config clang cmake unzip libsqlite3-dev zip | ||
| if [ "${{ matrix.target }}" = "x86_64-pc-windows-gnu" ]; then | ||
| sudo apt-get install -y gcc-mingw-w64 mingw-w64 mingw-w64-x86-64-dev | ||
| fi | ||
| if [ "${{ matrix.target }}" = "aarch64-unknown-linux-gnu" ] && [ "${{ runner.arch }}" != "ARM64" ]; then | ||
| sudo apt-get install -y gcc-aarch64-linux-gnu | ||
| fi | ||
| uname -a && cargo clean | ||
|
|
||
| # Install AppImage tools for AppImage builds | ||
| - name: Install AppImage tools | ||
| if: ${{ matrix.build-type == 'appimage' }} | ||
| run: | | ||
| wget -q https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage | ||
| chmod +x linuxdeploy-x86_64.AppImage | ||
| sudo mv linuxdeploy-x86_64.AppImage /usr/local/bin/linuxdeploy | ||
| # Install additional dependencies that might be needed at runtime | ||
| sudo apt-get install -y libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-xkb-dev libxkbcommon-x11-dev | ||
|
|
||
| - name: Install protoc (ARM) | ||
| if: ${{ matrix.platform == 'arm64-linux' }} | ||
| if: ${{ matrix.platform == 'arm64-linux' || matrix.platform == 'arm64-linux-compat' }} | ||
| run: curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v25.2/protoc-25.2-linux-aarch_64.zip && sudo unzip -o protoc-25.2-linux-aarch_64.zip -d /usr/local bin/protoc && sudo unzip -o protoc-25.2-linux-aarch_64.zip -d /usr/local 'include/*' && rm -f protoc-25.2-linux-aarch_64.zip | ||
| env: | ||
| PROTOC: /usr/local/bin/protoc | ||
|
|
||
| - name: Install protoc (AMD) | ||
| if: ${{ matrix.target == 'x86_64-unknown-linux-gnu' }} | ||
| - name: Install protoc (AMD/AppImage) | ||
| if: ${{ matrix.target == 'x86_64-unknown-linux-gnu' || matrix.build-type == 'appimage' }} | ||
| run: curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v25.2/protoc-25.2-linux-x86_64.zip && sudo unzip -o protoc-25.2-linux-x86_64.zip -d /usr/local bin/protoc && sudo unzip -o protoc-25.2-linux-x86_64.zip -d /usr/local 'include/*' && rm -f protoc-25.2-linux-x86_64.zip | ||
| env: | ||
| PROTOC: /usr/local/bin/protoc | ||
|
|
@@ -125,14 +178,67 @@ jobs: | |
| AR_x86_64_pc_windows_gnu: x86_64-w64-mingw32-ar | ||
| CFLAGS_x86_64_pc_windows_gnu: "-O2" | ||
|
|
||
| # Create AppImage | ||
| - name: Create AppImage | ||
| if: ${{ matrix.build-type == 'appimage' }} | ||
| run: | | ||
| # Create AppDir structure | ||
| mkdir -p AppDir/usr/bin | ||
| mkdir -p AppDir/usr/share/applications | ||
| mkdir -p AppDir/usr/share/icons/hicolor/256x256/apps | ||
|
|
||
| # Copy binary and resources | ||
| cp dash-evo-tool/dash-evo-tool AppDir/usr/bin/ | ||
| cp -r dash-evo-tool/dash_core_configs AppDir/usr/bin/ | ||
| cp dash-evo-tool/.env AppDir/usr/bin/ | ||
|
|
||
| # Create desktop file | ||
| cat > AppDir/usr/share/applications/dash-evo-tool.desktop << EOF | ||
| [Desktop Entry] | ||
| Name=Dash Evo Tool | ||
| Exec=dash-evo-tool | ||
| Icon=dash-evo-tool | ||
| Type=Application | ||
| Categories=Utility; | ||
| X-AppImage-Version=${{ github.ref_name }} | ||
| EOF | ||
|
|
||
| # Copy the app icon | ||
| cp mac_os/AppIcons/Assets.xcassets/AppIcon.appiconset/256.png AppDir/usr/share/icons/hicolor/256x256/apps/dash-evo-tool.png | ||
|
|
||
| # Create AppRun script | ||
| cat > AppDir/AppRun << 'EOF' | ||
| #!/bin/bash | ||
| SELF=$(readlink -f "$0") | ||
| HERE=${SELF%/*} | ||
| export PATH="${HERE}/usr/bin:${PATH}" | ||
| export LD_LIBRARY_PATH="${HERE}/usr/lib:${LD_LIBRARY_PATH}" | ||
| cd "${HERE}/usr/bin" | ||
| exec "${HERE}/usr/bin/dash-evo-tool" "$@" | ||
| EOF | ||
| chmod +x AppDir/AppRun | ||
|
|
||
| # Use linuxdeploy to create AppImage | ||
| linuxdeploy --appdir AppDir --output appimage | ||
|
|
||
| # Move the generated AppImage | ||
| mv Dash_Evo_Tool*.AppImage dash-evo-tool.AppImage | ||
|
|
||
| - name: Package release | ||
| if: ${{ matrix.build-type != 'appimage' }} | ||
| run: | | ||
| zip -r dash-evo-tool-${{ matrix.platform }}.zip dash-evo-tool/ | ||
|
|
||
| - name: Package AppImage | ||
| if: ${{ matrix.build-type == 'appimage' }} | ||
| run: | | ||
| # AppImage is already a single file, just create a zip for consistency | ||
| zip dash-evo-tool-${{ matrix.platform }}.zip dash-evo-tool.AppImage | ||
|
|
||
| - name: Attest | ||
| uses: actions/attest-build-provenance@v1 | ||
| with: | ||
| subject-path: 'dash-evo-tool-${{ matrix.platform }}.zip' | ||
| subject-path: "dash-evo-tool-${{ matrix.platform }}.zip" | ||
|
|
||
| - name: Upload build artifact | ||
| uses: actions/upload-artifact@v4 | ||
|
|
@@ -144,15 +250,33 @@ jobs: | |
| name: Create GitHub Release | ||
| needs: build-and-release | ||
| runs-on: ubuntu-latest | ||
| if: | | ||
| github.event_name != 'workflow_dispatch' || | ||
| (github.event_name == 'workflow_dispatch' && github.event.inputs.create_release == 'true') | ||
| steps: | ||
| - name: Download Linux AMD64 Artifact | ||
| # Download all Linux variants | ||
| - name: Download Linux AMD64 Modern | ||
| uses: actions/download-artifact@v4 | ||
| with: | ||
| name: dash-evo-tool-x86_64-linux.zip | ||
| - name: Download Linux Arm64 Artifact | ||
| - name: Download Linux AMD64 Compatible | ||
| uses: actions/download-artifact@v4 | ||
| with: | ||
| name: dash-evo-tool-x86_64-linux-compat.zip | ||
| - name: Download Linux AMD64 AppImage | ||
| uses: actions/download-artifact@v4 | ||
| with: | ||
| name: dash-evo-tool-x86_64-linux-appimage.zip | ||
| - name: Download Linux ARM64 Modern | ||
| uses: actions/download-artifact@v4 | ||
| with: | ||
| name: dash-evo-tool-arm64-linux.zip | ||
| - name: Download Linux ARM64 Compatible | ||
| uses: actions/download-artifact@v4 | ||
| with: | ||
| name: dash-evo-tool-arm64-linux-compat.zip | ||
|
|
||
| # Download macOS and Windows | ||
| - name: Download MacOS AMD64 Artifact | ||
| uses: actions/download-artifact@v4 | ||
| with: | ||
|
|
@@ -174,9 +298,32 @@ jobs: | |
| tag_name: ${{ github.event.inputs.tag }} | ||
| files: | | ||
| ./dash-evo-tool-x86_64-linux.zip | ||
| ./dash-evo-tool-x86_64-linux-compat.zip | ||
| ./dash-evo-tool-x86_64-linux-appimage.zip | ||
| ./dash-evo-tool-arm64-linux.zip | ||
| ./dash-evo-tool-arm64-linux-compat.zip | ||
| ./dash-evo-tool-x86_64-mac.zip | ||
| ./dash-evo-tool-arm64-mac.zip | ||
| ./dash-evo-tool-windows.zip | ||
| draft: false | ||
| prerelease: true | ||
| prerelease: true | ||
| body: | | ||
| ## Linux Build Variants | ||
|
|
||
| This release includes multiple Linux build variants to ensure compatibility: | ||
|
|
||
| ### Standard Builds | ||
| - **x86_64-linux**: Built on Ubuntu 24.04 (requires GLIBC 2.39+) | ||
| - **arm64-linux**: Built on Ubuntu 22.04 ARM | ||
|
|
||
| ### Compatible Builds (Recommended for older systems) | ||
| - **x86_64-linux-compat**: Built on Ubuntu 20.04 (requires GLIBC 2.31+, compatible with most distributions from 2020+) | ||
| - **arm64-linux-compat**: Built on Ubuntu 20.04 ARM | ||
|
|
||
| ### AppImage (Most Compatible) | ||
| - **x86_64-linux-appimage**: Self-contained AppImage with all dependencies bundled. Works on most Linux distributions. | ||
|
|
||
| **Which version should I use?** | ||
| - Try the **-compat** version first if you're on an older Linux distribution | ||
| - Use the **AppImage** if you encounter any dependency issues | ||
| - The standard builds offer the best performance on modern systems | ||
| Original file line number | Diff line number | Diff line change | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -26,3 +26,6 @@ test_db | |||||||||||
| **/.DS_Store | ||||||||||||
| explorer.log | ||||||||||||
| .gitaipconfig | ||||||||||||
|
|
||||||||||||
| # Test build directories | ||||||||||||
| build-test/ | ||||||||||||
|
Comment on lines
+29
to
+31
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fix the test directory ignore pattern. The new test scripts live under -# Test build directories
-build-test/
+# Test build directories
+build-tests/📝 Committable suggestion
Suggested change
🤖 Prompt for AI Agents |
||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -75,7 +75,63 @@ system, unzip, and install: | |
|
|
||
| ## Installation | ||
|
|
||
| To install Dash Evo Tool: | ||
| ### Download Pre-built Packages (Recommended) | ||
|
|
||
| The easiest way to get started is to download a pre-built package from the [latest release](https://github.com/dashpay/dash-evo-tool/releases/latest). | ||
|
|
||
| #### Linux | ||
|
|
||
| We provide multiple Linux packages to ensure compatibility: | ||
|
|
||
| - **Standard builds** (`x86_64-linux`, `arm64-linux`): For modern systems with GLIBC 2.39+ | ||
| - **Compatible builds** (`x86_64-linux-compat`, `arm64-linux-compat`): For older systems with GLIBC 2.31+ (Ubuntu 20.04+, Debian 11+, etc.) | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I would remove this one, AppImage should be good enough |
||
| - **AppImage** (`x86_64-linux-appimage`): Self-contained package that works on most Linux distributions | ||
|
|
||
| **Installation steps:** | ||
|
|
||
| 1. Download the appropriate `.zip` file for your system | ||
| 2. Extract the archive: | ||
| ```shell | ||
| unzip dash-evo-tool-*.zip | ||
| cd dash-evo-tool | ||
| ``` | ||
| 3. Make the binary executable: | ||
| ```shell | ||
| chmod +x dash-evo-tool | ||
| ``` | ||
| 4. Run the application: | ||
| ```shell | ||
| ./dash-evo-tool | ||
| ``` | ||
|
|
||
| For the AppImage version: | ||
| ```shell | ||
| unzip dash-evo-tool-x86_64-linux-appimage.zip | ||
| chmod +x dash-evo-tool.AppImage | ||
| ./dash-evo-tool.AppImage | ||
| ``` | ||
|
|
||
| #### macOS | ||
|
|
||
| 1. Download the appropriate package: | ||
| - `x86_64-mac` for Intel Macs | ||
| - `arm64-mac` for Apple Silicon | ||
| 2. Extract and run: | ||
| ```shell | ||
| unzip dash-evo-tool-*.zip | ||
| cd dash-evo-tool | ||
| ./dash-evo-tool | ||
| ``` | ||
|
|
||
| #### Windows | ||
|
|
||
| 1. Download `dash-evo-tool-windows.zip` | ||
| 2. Extract the archive | ||
| 3. Run `dash-evo-tool.exe` | ||
|
|
||
| ### Build from Source | ||
|
|
||
| To build from source: | ||
|
|
||
| 1. **Clone the repository**: | ||
|
|
||
|
|
@@ -95,14 +151,26 @@ To install Dash Evo Tool: | |
| cargo build --release | ||
| ``` | ||
|
|
||
| 4. **Run the application**: | ||
|
|
||
| ``` shell | ||
| cargo run --release | ||
| ``` | ||
|
|
||
| ## Getting Started | ||
|
|
||
| ### Start the App | ||
|
|
||
| Run the application using: | ||
| If you downloaded a pre-built package: | ||
|
|
||
| ``` shell | ||
| ./dash-evo-tool | ||
| ``` | ||
|
|
||
| If you built from source: | ||
|
|
||
| ``` shell | ||
| cargo run | ||
| cargo run --release | ||
| ``` | ||
|
|
||
| ### Application directory | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a scheduled Ubuntu 20.04 retirement. Ubuntu 20.04 LTS runner will be removed on 2025-04-15.