Cross-Compile Binaries #39
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- | |
| 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 |