5af44ade9e
The 'all: trianglesd.exe' target was defined after 'leveldb/libleveldb.a:' making LevelDB the default target. Make would only build LevelDB and exit. Move 'all' to before LevelDB so it becomes the default target (like makefile.unix). Also pass explicit 'all' target in CI as belt-and-suspenders. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
291 lines
8.6 KiB
YAML
291 lines
8.6 KiB
YAML
name: Build All Platforms
|
|
|
|
on:
|
|
push:
|
|
branches: [master]
|
|
tags: ['v*']
|
|
pull_request:
|
|
branches: [master]
|
|
workflow_dispatch:
|
|
|
|
env:
|
|
VERSION: "5.1.4"
|
|
|
|
jobs:
|
|
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: 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
|
|
# Copy runtime DLLs
|
|
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
|
|
|
|
- name: Strip binary
|
|
run: strip --strip-all dist/triangles-qt.exe
|
|
|
|
- name: Upload artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: windows-qt
|
|
path: dist/
|
|
|
|
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: 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: Rename
|
|
run: mv triangles-qt Cryptographic-Triangles-v${VERSION}-linux-x64-qt
|
|
|
|
- name: Upload artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: linux-qt
|
|
path: Cryptographic-Triangles-v*-linux-x64-qt
|
|
|
|
build-linux-daemon:
|
|
runs-on: ubuntu-22.04
|
|
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 daemon
|
|
run: |
|
|
cd src
|
|
mkdir -p obj
|
|
make -f makefile.unix -j$(nproc)
|
|
|
|
- name: Strip binary
|
|
run: strip --strip-all src/trianglesd
|
|
|
|
- name: Rename
|
|
run: mv src/trianglesd Cryptographic-Triangles-v${VERSION}-linux-x64-daemon
|
|
|
|
- name: Upload artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: linux-daemon
|
|
path: Cryptographic-Triangles-v*-linux-x64-daemon
|
|
|
|
build-macos:
|
|
runs-on: macos-15
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
- 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: 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: Download all artifacts
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
path: artifacts
|
|
|
|
- name: Prepare release assets
|
|
run: |
|
|
mkdir -p release
|
|
# Windows
|
|
cd artifacts/windows-qt && zip -r ../../release/Cryptographic-Triangles-${VERSION}-win-x64.zip . && cd ../..
|
|
cp artifacts/windows-qt/triangles-qt.exe release/Cryptographic-Triangles-${VERSION}-win-x64-qt.exe
|
|
cp artifacts/windows-daemon/trianglesd.exe release/Cryptographic-Triangles-${VERSION}-win-x64-daemon.exe
|
|
# Linux
|
|
cp artifacts/linux-qt/Cryptographic-Triangles-* release/
|
|
cp artifacts/linux-daemon/Cryptographic-Triangles-* release/
|
|
# macOS
|
|
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
|