492 lines
18 KiB
YAML
492 lines
18 KiB
YAML
name: Build All Platforms
|
|
|
|
on:
|
|
push:
|
|
branches: [master]
|
|
tags: ['v*']
|
|
pull_request:
|
|
branches: [master]
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
test-linux-unit:
|
|
runs-on: ubuntu-22.04
|
|
continue-on-error: true
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y build-essential libboost-all-dev \
|
|
libssl-dev libdb++-dev libleveldb-dev libevent-dev libminiupnpc-dev
|
|
|
|
- name: Build LevelDB
|
|
run: |
|
|
cd src/leveldb
|
|
chmod +x build_detect_platform
|
|
make clean || true
|
|
make OPT="-O2" libleveldb.a libmemenv.a
|
|
|
|
- name: Build and run unit tests
|
|
run: |
|
|
cd src
|
|
make -f makefile.unix test -j$(nproc)
|
|
./test_triangles --log_level=test_suite 2>&1 || true
|
|
|
|
build-windows-qt:
|
|
runs-on: windows-latest
|
|
defaults:
|
|
run:
|
|
shell: msys2 {0}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: msys2/setup-msys2@v2
|
|
with:
|
|
msystem: MINGW64
|
|
update: true
|
|
install: >-
|
|
mingw-w64-x86_64-gcc
|
|
mingw-w64-x86_64-qt5-base
|
|
mingw-w64-x86_64-qt5-tools
|
|
mingw-w64-x86_64-boost
|
|
mingw-w64-x86_64-openssl
|
|
mingw-w64-x86_64-db
|
|
mingw-w64-x86_64-libevent
|
|
mingw-w64-x86_64-miniupnpc
|
|
make
|
|
|
|
- name: Create Qt5 tool symlinks
|
|
run: |
|
|
ln -sf /mingw64/bin/qmake-qt5.exe /mingw64/bin/qmake.exe 2>/dev/null || true
|
|
ln -sf /mingw64/bin/lrelease-qt5.exe /mingw64/bin/lrelease.exe 2>/dev/null || true
|
|
ln -sf /mingw64/bin/windeployqt-qt5.exe /mingw64/bin/windeployqt.exe 2>/dev/null || true
|
|
|
|
- name: Set VERSION from source
|
|
run: |
|
|
MAJOR=$(grep 'CLIENT_VERSION_MAJOR' src/clientversion.h | awk '{print $3}')
|
|
MINOR=$(grep 'CLIENT_VERSION_MINOR' src/clientversion.h | awk '{print $3}')
|
|
REV=$(grep 'CLIENT_VERSION_REVISION' src/clientversion.h | awk '{print $3}')
|
|
echo "VERSION=${MAJOR}.${MINOR}.${REV}" >> $GITHUB_ENV
|
|
|
|
- name: Clean stale build artifacts
|
|
run: rm -rf build/*.o build/*.h
|
|
|
|
- name: Build LevelDB
|
|
run: |
|
|
cd src/leveldb
|
|
make clean || true
|
|
CC=gcc CXX=g++ TARGET_OS=OS_WINDOWS_CROSSCOMPILE make OPT="-fno-keep-inline-dllexport -march=nocona -msahf -mtune=generic -Wa,-mbig-obj -O2" libleveldb.a libmemenv.a
|
|
|
|
- name: Run qmake
|
|
run: qmake triangles-qt.pro "RELEASE=1"
|
|
|
|
- name: Build
|
|
run: make -j$(nproc)
|
|
|
|
- name: Package
|
|
run: |
|
|
mkdir -p dist
|
|
cp release/triangles-qt.exe dist/
|
|
windeployqt dist/triangles-qt.exe || true
|
|
for dll in libgcc_s_seh-1.dll libstdc++-6.dll libwinpthread-1.dll; do
|
|
cp /mingw64/bin/$dll dist/ 2>/dev/null || true
|
|
done
|
|
strip --strip-all dist/triangles-qt.exe
|
|
|
|
- name: Download Tor
|
|
shell: powershell
|
|
run: |
|
|
$TOR_VERSION = "15.0.8"
|
|
$TOR_URL = "https://dist.torproject.org/torbrowser/${TOR_VERSION}/tor-expert-bundle-windows-x86_64-${TOR_VERSION}.tar.gz"
|
|
Invoke-WebRequest -Uri $TOR_URL -OutFile tor-bundle.tar.gz
|
|
New-Item -ItemType Directory -Path tor-extract -Force
|
|
tar -xzf tor-bundle.tar.gz -C tor-extract
|
|
New-Item -ItemType Directory -Path tor-files -Force
|
|
Copy-Item tor-extract/tor/tor.exe tor-files/
|
|
Copy-Item tor-extract/tor/tor-gencert.exe tor-files/ -ErrorAction SilentlyContinue
|
|
if (Test-Path tor-extract/tor/pluggable_transports) {
|
|
Copy-Item -Recurse tor-extract/tor/pluggable_transports tor-files/
|
|
}
|
|
if (Test-Path tor-extract/data) {
|
|
Copy-Item -Recurse tor-extract/data tor-files/data
|
|
}
|
|
|
|
- name: Build NSIS installer
|
|
shell: powershell
|
|
run: |
|
|
choco install nsis -y
|
|
$env:PATH = "C:\Program Files (x86)\NSIS;$env:PATH"
|
|
makensis /DVERSION=$env:VERSION contrib\nsis\setup.nsi
|
|
|
|
- name: Upload installer
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: windows-qt-setup
|
|
path: contrib/nsis/Cryptographic-Triangles-*-setup.exe
|
|
|
|
build-windows-daemon:
|
|
runs-on: windows-latest
|
|
defaults:
|
|
run:
|
|
shell: msys2 {0}
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- uses: msys2/setup-msys2@v2
|
|
with:
|
|
msystem: MINGW64
|
|
update: true
|
|
install: >-
|
|
mingw-w64-x86_64-gcc
|
|
mingw-w64-x86_64-boost
|
|
mingw-w64-x86_64-openssl
|
|
mingw-w64-x86_64-db
|
|
mingw-w64-x86_64-libevent
|
|
mingw-w64-x86_64-miniupnpc
|
|
make
|
|
|
|
- name: Build LevelDB
|
|
run: |
|
|
cd src/leveldb
|
|
make clean || true
|
|
CC=gcc CXX=g++ TARGET_OS=OS_WINDOWS_CROSSCOMPILE make OPT="-fno-keep-inline-dllexport -march=nocona -msahf -mtune=generic -Wa,-mbig-obj -O2" libleveldb.a libmemenv.a
|
|
|
|
- name: Build daemon
|
|
run: |
|
|
set -eo pipefail
|
|
cd src
|
|
mkdir -p obj
|
|
make -f makefile.mingw DEPSDIR=/mingw64 all -j$(nproc) 2>&1
|
|
strip --strip-all trianglesd.exe
|
|
cp trianglesd.exe ../trianglesd.exe
|
|
|
|
- name: Upload artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: windows-daemon
|
|
path: trianglesd.exe
|
|
|
|
build-linux-qt:
|
|
runs-on: ubuntu-22.04
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Set VERSION from source
|
|
run: |
|
|
MAJOR=$(grep 'CLIENT_VERSION_MAJOR' src/clientversion.h | awk '{print $3}')
|
|
MINOR=$(grep 'CLIENT_VERSION_MINOR' src/clientversion.h | awk '{print $3}')
|
|
REV=$(grep 'CLIENT_VERSION_REVISION' src/clientversion.h | awk '{print $3}')
|
|
echo "VERSION=${MAJOR}.${MINOR}.${REV}" >> $GITHUB_ENV
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y build-essential qt5-qmake qtbase5-dev \
|
|
qttools5-dev-tools libboost-all-dev libssl-dev libdb++-dev \
|
|
libleveldb-dev libevent-dev libminiupnpc-dev
|
|
|
|
- name: Build LevelDB
|
|
run: |
|
|
cd src/leveldb
|
|
chmod +x build_detect_platform
|
|
make clean || true
|
|
make OPT="-O2" libleveldb.a libmemenv.a
|
|
|
|
- name: Clean stale build artifacts
|
|
run: rm -rf build/*.o
|
|
|
|
- name: Run qmake
|
|
run: qmake triangles-qt.pro "RELEASE=1"
|
|
|
|
- name: Build
|
|
run: make -j$(nproc)
|
|
|
|
- name: Strip binary
|
|
run: strip --strip-all triangles-qt
|
|
|
|
- name: Build .deb package
|
|
run: |
|
|
TOR_VERSION="15.0.8"
|
|
curl -sL "https://dist.torproject.org/torbrowser/${TOR_VERSION}/tor-expert-bundle-linux-x86_64-${TOR_VERSION}.tar.gz" -o tor-bundle.tar.gz
|
|
mkdir -p tor-extract && tar -xzf tor-bundle.tar.gz -C tor-extract
|
|
|
|
PKG="cryptographic-triangles_${VERSION}_amd64"
|
|
mkdir -p ${PKG}/DEBIAN
|
|
mkdir -p ${PKG}/usr/lib/cryptographic-triangles/tor
|
|
mkdir -p ${PKG}/usr/bin
|
|
mkdir -p ${PKG}/usr/share/applications
|
|
mkdir -p ${PKG}/usr/share/pixmaps
|
|
|
|
cp triangles-qt ${PKG}/usr/lib/cryptographic-triangles/
|
|
cp tor-extract/tor/tor ${PKG}/usr/lib/cryptographic-triangles/tor/
|
|
chmod +x ${PKG}/usr/lib/cryptographic-triangles/tor/tor
|
|
[ -d tor-extract/data ] && cp -r tor-extract/data ${PKG}/usr/lib/cryptographic-triangles/tor/data
|
|
|
|
cat > ${PKG}/usr/bin/cryptographic-triangles << 'LAUNCHER'
|
|
#!/bin/bash
|
|
exec /usr/lib/cryptographic-triangles/triangles-qt "$@"
|
|
LAUNCHER
|
|
sed -i 's/^ //' ${PKG}/usr/bin/cryptographic-triangles
|
|
chmod +x ${PKG}/usr/bin/cryptographic-triangles
|
|
|
|
cat > ${PKG}/usr/share/applications/cryptographic-triangles.desktop << 'DESKTOP'
|
|
[Desktop Entry]
|
|
Name=Cryptographic Triangles
|
|
Comment=Triangles Cryptocurrency Wallet
|
|
Exec=cryptographic-triangles
|
|
Terminal=false
|
|
Type=Application
|
|
Icon=cryptographic-triangles
|
|
Categories=Finance;Network;
|
|
DESKTOP
|
|
sed -i 's/^ //' ${PKG}/usr/share/applications/cryptographic-triangles.desktop
|
|
|
|
cp src/qt/res/icons/triangles.ico ${PKG}/usr/share/pixmaps/cryptographic-triangles.ico 2>/dev/null || true
|
|
|
|
cat > ${PKG}/DEBIAN/control << CTRL
|
|
Package: cryptographic-triangles
|
|
Version: ${VERSION}
|
|
Architecture: amd64
|
|
Maintainer: Cryptographic Triangles <dev@cryptographic-triangles.org>
|
|
Description: Cryptographic Triangles wallet with integrated Tor
|
|
Privacy-focused cryptocurrency wallet with built-in Tor support.
|
|
Tor is bundled — no additional configuration needed.
|
|
Depends: libqt5widgets5, libqt5gui5, libqt5network5, libqt5core5a, libboost-system1.74.0 | libboost-system1.83.0, libboost-filesystem1.74.0 | libboost-filesystem1.83.0, libboost-thread1.74.0 | libboost-thread1.83.0, libboost-program-options1.74.0 | libboost-program-options1.83.0, libssl3, libdb5.3++, libevent-2.1-7, libminiupnpc17
|
|
Section: finance
|
|
Priority: optional
|
|
CTRL
|
|
sed -i 's/^ //' ${PKG}/DEBIAN/control
|
|
|
|
dpkg-deb --build ${PKG}
|
|
|
|
- name: Upload .deb
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: linux-qt-deb
|
|
path: cryptographic-triangles_*_amd64.deb
|
|
|
|
build-linux-daemon:
|
|
runs-on: ubuntu-22.04
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Set VERSION from source
|
|
run: |
|
|
MAJOR=$(grep 'CLIENT_VERSION_MAJOR' src/clientversion.h | awk '{print $3}')
|
|
MINOR=$(grep 'CLIENT_VERSION_MINOR' src/clientversion.h | awk '{print $3}')
|
|
REV=$(grep 'CLIENT_VERSION_REVISION' src/clientversion.h | awk '{print $3}')
|
|
echo "VERSION=${MAJOR}.${MINOR}.${REV}" >> $GITHUB_ENV
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y build-essential libboost-all-dev \
|
|
libssl-dev libdb++-dev libleveldb-dev libevent-dev libminiupnpc-dev
|
|
|
|
- name: Build LevelDB
|
|
run: |
|
|
cd src/leveldb
|
|
chmod +x build_detect_platform
|
|
make clean || true
|
|
make OPT="-O2" libleveldb.a libmemenv.a
|
|
|
|
- name: Build daemon
|
|
run: |
|
|
cd src
|
|
mkdir -p obj
|
|
make -f makefile.unix trianglesd -j$(nproc)
|
|
|
|
- name: Strip binary
|
|
run: strip --strip-all src/trianglesd
|
|
|
|
- name: Build .deb package
|
|
run: |
|
|
TOR_VERSION="15.0.8"
|
|
curl -sL "https://dist.torproject.org/torbrowser/${TOR_VERSION}/tor-expert-bundle-linux-x86_64-${TOR_VERSION}.tar.gz" -o tor-bundle.tar.gz
|
|
mkdir -p tor-extract && tar -xzf tor-bundle.tar.gz -C tor-extract
|
|
|
|
PKG="cryptographic-triangles-daemon_${VERSION}_amd64"
|
|
mkdir -p ${PKG}/DEBIAN
|
|
mkdir -p ${PKG}/usr/lib/cryptographic-triangles/tor
|
|
mkdir -p ${PKG}/usr/bin
|
|
mkdir -p ${PKG}/etc/systemd/system
|
|
|
|
cp src/trianglesd ${PKG}/usr/lib/cryptographic-triangles/
|
|
cp tor-extract/tor/tor ${PKG}/usr/lib/cryptographic-triangles/tor/
|
|
chmod +x ${PKG}/usr/lib/cryptographic-triangles/tor/tor
|
|
[ -d tor-extract/data ] && cp -r tor-extract/data ${PKG}/usr/lib/cryptographic-triangles/tor/data
|
|
|
|
cat > ${PKG}/usr/bin/trianglesd << 'LAUNCHER'
|
|
#!/bin/bash
|
|
exec /usr/lib/cryptographic-triangles/trianglesd "$@"
|
|
LAUNCHER
|
|
sed -i 's/^ //' ${PKG}/usr/bin/trianglesd
|
|
chmod +x ${PKG}/usr/bin/trianglesd
|
|
|
|
cat > ${PKG}/etc/systemd/system/trianglesd.service << 'SVC'
|
|
[Unit]
|
|
Description=Cryptographic Triangles Daemon
|
|
After=network-online.target
|
|
Wants=network-online.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
ExecStart=/usr/bin/trianglesd
|
|
Restart=on-failure
|
|
RestartSec=10
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
SVC
|
|
sed -i 's/^ //' ${PKG}/etc/systemd/system/trianglesd.service
|
|
|
|
cat > ${PKG}/DEBIAN/control << CTRL
|
|
Package: cryptographic-triangles-daemon
|
|
Version: ${VERSION}
|
|
Architecture: amd64
|
|
Maintainer: Cryptographic Triangles <dev@cryptographic-triangles.org>
|
|
Description: Cryptographic Triangles daemon with integrated Tor
|
|
Headless node daemon with built-in Tor support and systemd service.
|
|
Tor is bundled — no additional configuration needed.
|
|
Depends: libboost-system1.74.0 | libboost-system1.83.0, libboost-filesystem1.74.0 | libboost-filesystem1.83.0, libboost-thread1.74.0 | libboost-thread1.83.0, libboost-program-options1.74.0 | libboost-program-options1.83.0, libssl3, libdb5.3++, libevent-2.1-7, libminiupnpc17
|
|
Section: finance
|
|
Priority: optional
|
|
CTRL
|
|
sed -i 's/^ //' ${PKG}/DEBIAN/control
|
|
|
|
cat > ${PKG}/DEBIAN/postinst << 'POST'
|
|
#!/bin/bash
|
|
systemctl daemon-reload
|
|
echo ""
|
|
echo "Cryptographic Triangles daemon installed."
|
|
echo " Start: sudo systemctl start trianglesd"
|
|
echo " On boot: sudo systemctl enable trianglesd"
|
|
echo ""
|
|
POST
|
|
chmod +x ${PKG}/DEBIAN/postinst
|
|
|
|
dpkg-deb --build ${PKG}
|
|
|
|
- name: Upload .deb
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: linux-daemon-deb
|
|
path: cryptographic-triangles-daemon_*_amd64.deb
|
|
|
|
build-macos:
|
|
runs-on: macos-15
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- name: Set VERSION from source
|
|
run: |
|
|
MAJOR=$(grep 'CLIENT_VERSION_MAJOR' src/clientversion.h | awk '{print $3}')
|
|
MINOR=$(grep 'CLIENT_VERSION_MINOR' src/clientversion.h | awk '{print $3}')
|
|
REV=$(grep 'CLIENT_VERSION_REVISION' src/clientversion.h | awk '{print $3}')
|
|
echo "VERSION=${MAJOR}.${MINOR}.${REV}" >> $GITHUB_ENV
|
|
|
|
- name: Install dependencies
|
|
run: |
|
|
brew install qt@5 openssl@3 boost berkeley-db@5 leveldb libevent miniupnpc
|
|
|
|
- name: Clean stale build artifacts
|
|
run: rm -rf build/*.o build/*.h
|
|
|
|
- name: Build LevelDB
|
|
run: |
|
|
cd src/leveldb
|
|
chmod +x build_detect_platform
|
|
make clean || true
|
|
CC=clang CXX=clang++ make OPT="-O2" libleveldb.a libmemenv.a
|
|
|
|
- name: Run qmake
|
|
run: |
|
|
export PATH="/opt/homebrew/opt/qt@5/bin:$PATH"
|
|
qmake triangles-qt.pro -spec macx-clang \
|
|
"BOOST_INCLUDE_PATH=/opt/homebrew/opt/boost/include" \
|
|
"BOOST_LIB_PATH=/opt/homebrew/opt/boost/lib" \
|
|
"BDB_INCLUDE_PATH=/opt/homebrew/opt/berkeley-db@5/include" \
|
|
"BDB_LIB_PATH=/opt/homebrew/opt/berkeley-db@5/lib" \
|
|
"BDB_LIB_SUFFIX=" \
|
|
"OPENSSL_INCLUDE_PATH=/opt/homebrew/opt/openssl@3/include" \
|
|
"OPENSSL_LIB_PATH=/opt/homebrew/opt/openssl@3/lib" \
|
|
"MINIUPNPC_INCLUDE_PATH=/opt/homebrew/opt/miniupnpc/include" \
|
|
"MINIUPNPC_LIB_PATH=/opt/homebrew/opt/miniupnpc/lib" \
|
|
"EVENT_INCLUDE_PATH=/opt/homebrew/opt/libevent/include" \
|
|
"EVENT_LIB_PATH=/opt/homebrew/opt/libevent/lib" \
|
|
"RELEASE=1"
|
|
|
|
- name: Build
|
|
run: |
|
|
export PATH="/opt/homebrew/opt/qt@5/bin:$PATH"
|
|
make -j$(sysctl -n hw.ncpu)
|
|
|
|
- name: Create .app bundle
|
|
run: |
|
|
export PATH="/opt/homebrew/opt/qt@5/bin:$PATH"
|
|
macdeployqt Triangles-Qt.app -verbose=1
|
|
|
|
- name: Bundle Tor into app
|
|
run: |
|
|
TOR_VERSION="15.0.8"
|
|
curl -sL "https://dist.torproject.org/torbrowser/${TOR_VERSION}/tor-expert-bundle-macos-aarch64-${TOR_VERSION}.tar.gz" -o tor-bundle.tar.gz
|
|
mkdir -p tor-extract && tar -xzf tor-bundle.tar.gz -C tor-extract
|
|
mkdir -p Triangles-Qt.app/Contents/MacOS/tor
|
|
cp tor-extract/tor/tor Triangles-Qt.app/Contents/MacOS/tor/
|
|
chmod +x Triangles-Qt.app/Contents/MacOS/tor/tor
|
|
[ -d tor-extract/data ] && cp -r tor-extract/data Triangles-Qt.app/Contents/MacOS/tor/data
|
|
|
|
- name: Create DMG
|
|
run: |
|
|
mkdir -p dmg_contents
|
|
cp -R Triangles-Qt.app dmg_contents/
|
|
ln -s /Applications dmg_contents/Applications
|
|
hdiutil create -volname "Cryptographic Triangles" \
|
|
-srcfolder dmg_contents \
|
|
-ov -format UDZO \
|
|
"Cryptographic-Triangles-v${VERSION}-macos-arm64.dmg"
|
|
|
|
- name: Upload DMG
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: macos-arm64-dmg
|
|
path: "*.dmg"
|
|
|
|
release:
|
|
if: startsWith(github.ref, 'refs/tags/v')
|
|
needs: [build-windows-qt, build-windows-daemon, build-linux-qt, build-linux-daemon, build-macos]
|
|
runs-on: ubuntu-latest
|
|
permissions:
|
|
contents: write
|
|
steps:
|
|
- name: Set VERSION from tag
|
|
run: echo "VERSION=${GITHUB_REF_NAME#v}" >> $GITHUB_ENV
|
|
|
|
- name: Download all artifacts
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: artifacts
|
|
|
|
- name: Prepare release assets
|
|
run: |
|
|
mkdir -p release
|
|
# Windows Qt installer (setup.exe — includes Tor, Start Menu shortcuts, uninstaller)
|
|
cp artifacts/windows-qt-setup/*.exe release/
|
|
# Windows daemon (standalone exe for server use)
|
|
cp artifacts/windows-daemon/trianglesd.exe "release/Cryptographic-Triangles-${VERSION}-win-x64-daemon.exe"
|
|
# Linux Qt .deb (dpkg -i to install — includes Tor, desktop entry, icon)
|
|
cp artifacts/linux-qt-deb/*.deb release/
|
|
# Linux daemon .deb (dpkg -i to install — includes Tor, systemd service)
|
|
cp artifacts/linux-daemon-deb/*.deb release/
|
|
# macOS DMG (drag to Applications — Tor inside .app bundle)
|
|
cp artifacts/macos-arm64-dmg/*.dmg release/
|
|
ls -la release/
|
|
|
|
- name: Create Release
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
files: release/*
|
|
generate_release_notes: true
|