Skip to content

Cross-Compile Binaries #39

Cross-Compile Binaries

Cross-Compile Binaries #39

---
name: Cross-Compile Binaries
"on":
"workflow_dispatch":
push:
branches:
- '*'
paths:
- 'src/**'
- 'go.**'
- 'meshbook/**'
schedule:
- cron: '0 0 * * 6'
env:
py_down_url: https://www.python.org/ftp/python/3.13.12/python-3.13.12-embed-amd64.zip
get_pip_url: https://bootstrap.pypa.io/get-pip.py
jobs:
compile-linux:
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- name: Checkout and pull the code
uses: actions/checkout@v6
with:
submodules: true
- name: Set the Python programming language
uses: actions/setup-python@v6
with:
python-version: '3.13'
cache: 'pip'
- name: Install python dependencies
run: |
cd ./meshbook
pip install -r ./requirements.txt
pip install pyinstaller
- name: Compile the python binary
run: |
cd ./meshbook
pyinstaller \
--onefile \
--name meshbook \
--distpath ../dist \
meshbook.py
- name: Setup the Go programming language
uses: actions/setup-go@v6
with:
go-version: 'stable'
- name: Install build dependencies
run: |
#mv /etc/apt/sources.list.d/microsoft-prod.list \
# /etc/apt/sources.list.d/microsoft-prod.list.disabled
#until apt-get update; do
# echo -e "-----\napt-get update failed, retrying in 1s...\n-----"
# sleep 1s
#done
sudo apt-get update
sudo apt-get install -y \
build-essential libgl1-mesa-dev libx11-dev libxrandr-dev \
libxi-dev libxcursor-dev libxinerama-dev libglfw3-dev \
libxxf86vm-dev
- name: Compile the fyne application for native Linux
run: |
export CGO_ENABLED=1
export CC=gcc
export CXX=g++
export GOOS=linux
export GOARCH=amd64
go build -o ./patchworks ./src
- name: move files for upload
run: |
mv ./meshbook ./meshbook-dir
mkdir ./bin
mv ./dist/meshbook ./bin/meshbook
- name: upload the building actifacts
uses: actions/upload-artifact@v7
with:
name: package-linux64
path: |
./patchworks
./bin/meshbook
retention-days: 7
overwrite: true
compile-windows:
runs-on: ubuntu-latest
strategy:
fail-fast: false
steps:
- name: Checkout and pull the code
uses: actions/checkout@v6
with:
submodules: true
- name: Set the Wine Windows Emulation program up
# https://gitlab.winehq.org/wine/wine/-/wikis/Debian-Ubuntu
run: |
#mv /etc/apt/sources.list.d/microsoft-prod.list
# /etc/apt/sources.list.d/microsoft-prod.list.disabled
#until apt-get update; do
# echo -e "-----\napt-get update failed, retrying in 1s...\n-----"
# sleep 1
#done
sudo apt-get update
mkdir -pm755 /etc/apt/keyrings
wget -O - https://dl.winehq.org/wine-builds/winehq.key | sudo gpg --dearmor -o /etc/apt/keyrings/winehq-archive.key -
sudo dpkg --add-architecture i386
sudo wget -NP /etc/apt/sources.list.d/ https://dl.winehq.org/wine-builds/ubuntu/dists/noble/winehq-noble.sources
#until apt-get update; do
# echo -e "-----\napt-get update failed, retrying in 1s...\n-----"
# sleep 1
#done
sudo apt-get update
sudo apt-get install -y --install-recommends winehq-devel
wine --version
- name: Install python under wine
run: |
cd ./meshbook
export PYTHONHOME=/root/meshbook/python-win
export PYTHONPATH=/root/meshbook/python-win/Lib/site-packages
wget ${{ env.py_down_url }} -O ./python.zip
unzip ./python.zip -d ./python-win
sed -i 's/^#\s*import site/import site/' ./python-win/python313._pth
wget ${{ env.get_pip_url }} -O ./get-pip.py
wine ./python-win/python.exe ./get-pip.py
wine ./python-win/python.exe -m pip install --upgrade pip
wine ./python-win/python.exe -m pip install -r ./requirements.txt
wine ./python-win/python.exe -m pip install pyinstaller
- name: Compile the binary with python wine
run: |
cd ./meshbook
wine ./python-win/python.exe -m PyInstaller \
--onefile \
--name meshbook \
--distpath ../dist \
meshbook.py
- name: Setup the Go programming language
uses: actions/setup-go@v6
with:
go-version: 'stable'
- name: Install build dependencies
run: |
#mv /etc/apt/sources.list.d/microsoft-prod.list \
# /etc/apt/sources.list.d/microsoft-prod.list.disabled
#until apt-get update; do
# echo -e "-----\napt-get update failed, retrying in 1s...\n-----"
# sleep 1s
#done
sudo apt-get update
sudo apt-get install -y \
build-essential libgl1-mesa-dev libx11-dev libxrandr-dev \
libxi-dev libxcursor-dev libxinerama-dev libglfw3-dev \
libxxf86vm-dev gcc-mingw-w64 gcc-multilib
- name: Install go binary
run: |
go install github.com/tc-hib/go-winres@latest
env:
GOBIN: /usr/local/bin
- name: Compile the fyne application for Windows
run: |
export CGO_ENABLED=1
export GOOS=windows
export GOARCH=amd64
export CC=x86_64-w64-mingw32-gcc
export CXX=x86_64-w64-mingw32-g++
export CGO_LDFLAGS="-static-libgcc -static-libstdc++"
go-winres simply --icon ./src/Icon.png --manifest gui
mv *.syso ./src
go build -o ./patchworks.exe -tags "windows" -ldflags -H=windowsgui ./src
- name: Compile the fyne application DEBUG style for Windows
run: |
export CGO_ENABLED=1
export GOOS=windows
export GOARCH=amd64
export CC=x86_64-w64-mingw32-gcc
export CXX=x86_64-w64-mingw32-g++
export CGO_LDFLAGS="-static-libgcc -static-libstdc++"
go-winres simply --icon ./src/Icon.png --manifest gui
mv *.syso ./src
go build -o ./patchworks-debug.exe ./src
- name: move files for upload
run: |
mv ./meshbook ./meshbook-dir
mkdir ./bin
mv ./dist/meshbook.exe ./bin/meshbook.exe
- name: upload the building actifacts
uses: actions/upload-artifact@v7
with:
name: package-win64
path: |
./*.exe
./bin/*.exe
retention-days: 7
overwrite: true