Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
169 changes: 158 additions & 11 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ name: Release Dash Evo Tool
on:
push:
tags:
- 'v*'
- 'v*-dev.*'
- "v*"
- "v*-dev.*"
release:
types:
- published
Expand All @@ -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
Expand All @@ -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"
Copy link
Contributor

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.

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"
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"
Copy link
Contributor

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.

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"
Expand All @@ -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"
Expand All @@ -64,7 +99,6 @@ jobs:
restore-keys: |
${{ runner.os }}-cargo-


- name: Setup prerequisites
run: |
mkdir -p dash-evo-tool/
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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:
Expand All @@ -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
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,6 @@ test_db
**/.DS_Store
explorer.log
.gitaipconfig

# Test build directories
build-test/
Comment on lines +29 to +31
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Fix the test directory ignore pattern.

The new test scripts live under build-tests/, but .gitignore currently ignores build-test/. This mismatch will still track files in build-tests/. Please update to:

-# Test build directories
-build-test/
+# Test build directories
+build-tests/
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# Test build directories
build-test/
# Test build directories
build-tests/
🤖 Prompt for AI Agents
In the .gitignore file around lines 29 to 31, the ignore pattern is set to
"build-test/" but the actual test build directories are named "build-tests/".
Update the ignore pattern to "build-tests/" to correctly ignore the test build
directories and prevent tracking those files.

74 changes: 71 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.)
Copy link
Contributor

Choose a reason for hiding this comment

The 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**:

Expand All @@ -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
Expand Down
Loading
Loading