diff options
| author | rejbasket <39080670+rejbasket@users.noreply.github.com> | 2025-04-13 11:59:54 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-04-13 11:59:54 +0200 |
| commit | 9557b3f7654210b9bc1e04574bbd3cd9c34c1247 (patch) | |
| tree | 5b78ddd5af69bf8e8cb8931e064d62c5700a77a4 | |
| parent | 391950f2db5fceaa4d6627e4958aeb4f81c9fde6 (diff) | |
Update update build process (#3652)
* removed linux new build, linux old is now linux64
* removed win32 build
* use geos source build only for linux32
* set python version to 3.11 for all builds
* sign only releases for windows
| -rwxr-xr-x | .github/workflows/build.yml | 268 | ||||
| -rwxr-xr-x | bin/build-linux | 14 | ||||
| -rw-r--r-- | bin/build-linux32-venv | 5 | ||||
| -rwxr-xr-x | bin/build-python | 23 | ||||
| -rwxr-xr-x | bin/build-windows-installer | 18 |
5 files changed, 57 insertions, 271 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a28ce665..f86b85cf 100755 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -7,95 +7,15 @@ on: tags: - "v*" jobs: - linux64-old: - runs-on: ubuntu-20.04 + linux64: + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 with: submodules: recursive - uses: actions/setup-python@v5 with: - python-version: '3.9.x' - cache: 'pip' - - uses: actions/cache@v4 - id: geos-build-cache - with: - path: geos/build - key: ${{ runner.os }}-20.04-geos-build-${{ hashFiles('**/bin/build-linux') }} - restore-keys: | - ${{ runner.os }}-20.04-geos-build- - - - name: install dependencies - shell: bash - run: | - sudo apt-get update - sudo gem install fpm - python -m pip install --upgrade pip - python -m pip install wheel - - sudo apt-get install gettext - - # for wxPython - sudo apt install libnotify4 - sudo apt install glib-networking libsdl2-dev libsdl2-2.0-0 - - # for PyGObject - sudo apt install libgirepository1.0-dev libcairo2-dev - - # for shapely - sudo apt install build-essential libgtk-3-dev - - uname -a - python --version - python -m pip --version - python -m pip debug - - python -m pip install pycairo - python -m pip install PyGObject==3.50.0 - - python -m pip install https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-20.04/wxPython-4.2.2-cp39-cp39-linux_x86_64.whl - - python -m pip install -r requirements.txt - # for networkx - python -m pip install pandas - python -m pip install pyarrow - - python -m pip install pyinstaller - - echo "${{ env.pythonLocation }}\bin" >> $GITHUB_PATH - - shell: bash - run: | - bin/build-linux - - name: Tests - shell: bash - run: | - pytest - - name: Mypy Type Checking - shell: bash - run: | - python -m pip install mypy - python -m mypy --output json | python .github/mypy-github-formatter - continue-on-error: true - - shell: bash - run: | - make dist - env: - BUILD: linux-old - INKSTITCH_GPG_KEY: ${{ secrets.INKSTITCH_GPG_KEY }} - - uses: actions/upload-artifact@v4 - with: - name: inkstitch-linux64-old - path: artifacts - - linux64-new: - runs-on: ubuntu-24.04 - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - uses: actions/setup-python@v5 - with: - python-version: '3.12.x' + python-version: '3.11.x' cache: 'pip' - name: install dependencies shell: bash @@ -115,10 +35,10 @@ jobs: sudo apt install libgirepository1.0-dev libcairo2-dev # for shapely - sudo apt install build-essential libgtk-3-dev libgeos-dev cmake + sudo apt install build-essential libgtk-3-dev cmake - # for sigining - sudo apt install rpm + # for numpy + sudo apt install gfortran libopenblas-dev liblapack-dev pkg-config uname -a python --version @@ -127,8 +47,9 @@ jobs: python -m pip install pycairo python -m pip install PyGObject==3.50.0 + python -m pip install numpy --no-binary numpy - python -m pip install https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-24.04/wxPython-4.2.2-cp312-cp312-linux_x86_64.whl + python -m pip install https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-22.04/wxPython-4.2.2-cp311-cp311-linux_x86_64.whl python -m pip install -r requirements.txt # for networkx @@ -152,11 +73,11 @@ jobs: run: | make dist env: - BUILD: linux-new + BUILD: linux INKSTITCH_GPG_KEY: ${{ secrets.INKSTITCH_GPG_KEY }} - uses: actions/upload-artifact@v4 with: - name: inkstitch-linux64-new + name: inkstitch-linux64 path: artifacts linux32: @@ -214,13 +135,17 @@ jobs: apt-get install -y libgirepository1.0-dev libcairo2-dev # for shapely - apt-get install -y build-essential libgtk-3-dev libgeos-dev cmake + apt-get install -y build-essential libgtk-3-dev cmake # for numpy apt-get install -y libopenblas-dev liblapack-dev # for signing rpm apt-get install -y rpm + - name: build shapely + shell: bash + run: | + bin/build-linux - name: install/build python dependencies if: steps.build-venv-cache.outputs.cache-hit != 'true' shell: bash @@ -253,127 +178,6 @@ jobs: with: name: inkstitch-linux32 path: artifacts - windows32: - runs-on: windows-2019 - steps: - - uses: actions/checkout@v4 - with: - submodules: recursive - - uses: actions/setup-python@v5 - with: - python-version: '3.8.x' - architecture: 'x86' - cache: 'pip' - - uses: actions/cache@v4 - id: geos-build-cache - with: - path: geos - key: win32-geos-build-${{ hashFiles('**/bin/build-geos-win.cmd') }} - restore-keys: | - win32-geos-build- - - uses: microsoft/setup-msbuild@v2 - - name: Setup Git for Windows SDK - uses: git-for-windows/setup-git-for-windows-sdk@v1.10.0 - with: - flavor: build-installers - - name: install dependencies - shell: bash - run: | - git config --system core.longpaths true - python -m pip install --upgrade pip - python -m pip install wheel - # inkex has pillow as a requirement and defaults to the latest release. - # for windows we need to pin to the latest possible version for 32 bit - python -m pip install pillow==9.5.0 - # Numpy version for older cpu compatibility - python -m pip install numpy==1.23.1 - pip install wxPython - python -m pip install -r requirements.txt - # for networkx - python -m pip install pandas - - python -m pip install pyinstaller - - echo "${{ env.pythonLocation }}\bin" >> $GITHUB_PATH - - name: install geos 32 - shell: cmd - run: | - SET BUILD32="1" - bin\build-geos-win.cmd - - name: Tests - shell: bash - run: | - pytest - - name: Mypy Type Checking - shell: bash - run: | - python -m pip install mypy - python -m mypy --output json | python .github/mypy-github-formatter - continue-on-error: true - - shell: bash - run: | - make dist - env: - BUILD: windows - - name: upload-unsigned-exe - id: upload-unsigned-exe - uses: actions/upload-artifact@v4 - with: - name: inkstitch-windows32-exe - path: | - dist/inkstitch/bin/inkstitch.exe - - name: Set siging policy to release - if: ${{ startsWith(github.ref, 'refs/tags/v*') }} - shell: bash - run: | - echo release_policy="release-signing" >> $GITHUB_ENV - - name: Set siging policy to test - if: ${{ ! startsWith(github.ref, 'refs/tags/v*') }} - shell: bash - run: | - echo release_policy="test-signing" >> $GITHUB_ENV - - name: Sign-exe - id: Sign-exe - uses: signpath/github-action-submit-signing-request@v1.1 - with: - api-token: '${{ secrets.SIGNPATH_API_TOKEN }}' - organization-id: '6b880880-2af8-4cf3-a8e7-1b4977c593df' - project-slug: 'inkstitch' - signing-policy-slug: '${{ env.release_policy }}' - github-artifact-id: '${{ steps.upload-unsigned-exe.outputs.artifact-id }}' - wait-for-completion: true - output-artifact-directory: 'signed-artifacts' - - name: Copy signed exe to dist - shell: bash - run: | - mv -f signed-artifacts/inkstitch.exe dist/inkstitch/bin/inkstitch.exe - - shell: bash - run: | - bash bin/build-windows-installer - env: - BUILD: windows - - name: upload-unsigned-installer - id: upload-unsigned-installer - uses: actions/upload-artifact@v4 - with: - name: inkstitch-windows32-installer - path: artifacts - - name: Sign-installer - id: Sign-installer - uses: signpath/github-action-submit-signing-request@v1.1 - with: - api-token: '${{ secrets.SIGNPATH_API_TOKEN }}' - organization-id: '6b880880-2af8-4cf3-a8e7-1b4977c593df' - project-slug: 'inkstitch' - signing-policy-slug: '${{ env.release_policy }}' - artifact-configuration-slug: 'windows-installer-config' - github-artifact-id: '${{ steps.upload-unsigned-installer.outputs.artifact-id }}' - wait-for-completion: true - output-artifact-directory: 'signed-artifacts' - - uses: actions/upload-artifact@v4 - with: - name: inkstitch-windows32 - path: signed-artifacts windows64: runs-on: windows-2019 steps: @@ -382,16 +186,9 @@ jobs: submodules: recursive - uses: actions/setup-python@v5 with: - python-version: '3.8.x' + python-version: '3.11.x' architecture: 'x64' cache: 'pip' - - uses: actions/cache@v4 - id: geos-build-cache - with: - path: geos - key: win64-geos-build-${{ hashFiles('**/bin/build-geos-win.cmd') }} - restore-keys: | - win64-geos-build- - uses: microsoft/setup-msbuild@v2 - name: Setup Git for Windows SDK uses: git-for-windows/setup-git-for-windows-sdk@v1.10.0 @@ -412,10 +209,6 @@ jobs: python -m pip install pyinstaller echo "${{ env.pythonLocation }}\bin" >> $GITHUB_PATH - - name: install geos 64 - shell: cmd - run: | - bin\build-geos-win.cmd - name: Tests shell: bash run: | @@ -436,12 +229,8 @@ jobs: shell: bash run: | echo release_policy="release-signing" >> $GITHUB_ENV - - name: Set siging policy to test - if: ${{ ! startsWith(github.ref, 'refs/tags/v*') }} - shell: bash - run: | - echo release_policy="test-signing" >> $GITHUB_ENV - name: upload-unsigned-exe + if: ${{ startsWith(github.ref, 'refs/tags/v*') }} id: upload-unsigned-exe uses: actions/upload-artifact@v4 with: @@ -449,6 +238,7 @@ jobs: path: | dist/inkstitch/bin/inkstitch.exe - name: Sign-exe + if: ${{ startsWith(github.ref, 'refs/tags/v*') }} id: Sign-exe uses: signpath/github-action-submit-signing-request@v1.1 with: @@ -460,6 +250,7 @@ jobs: wait-for-completion: true output-artifact-directory: 'signed-artifacts' - name: Copy signed exe to dist + if: ${{ startsWith(github.ref, 'refs/tags/v*') }} shell: bash run: | mv -f signed-artifacts/inkstitch.exe dist/inkstitch/bin/inkstitch.exe @@ -469,12 +260,14 @@ jobs: env: BUILD: windows - name: upload-unsigned-installer + if: ${{ startsWith(github.ref, 'refs/tags/v*') }} id: upload-unsigned-installer uses: actions/upload-artifact@v4 with: name: inkstitch-windows64-installer path: artifacts - name: Sign-installer + if: ${{ startsWith(github.ref, 'refs/tags/v*') }} id: Sign-installer uses: signpath/github-action-submit-signing-request@v1.1 with: @@ -498,7 +291,7 @@ jobs: submodules: recursive - uses: actions/setup-python@v5 with: - python-version: '3.9.x' + python-version: '3.11.x' cache: 'pip' - name: install dependencies shell: bash @@ -631,7 +424,7 @@ jobs: release: runs-on: ubuntu-latest - needs: [linux32, linux64-old, linux64-new, windows32, windows64, macx86, macarm64] + needs: [linux32, linux64, windows64, macx86, macarm64] if: always() steps: - name: determine release info @@ -649,27 +442,16 @@ jobs: echo "prerelease=true" >> $GITHUB_ENV echo "title=development build of $branch" >> $GITHUB_ENV fi - - name: download linux64-old - uses: actions/download-artifact@v4 - with: - name: 'inkstitch-linux64-old' - path: 'artifacts/' - - name: download linux64-new + - name: download linux64 uses: actions/download-artifact@v4 with: - name: 'inkstitch-linux64-new' + name: 'inkstitch-linux64' path: 'artifacts/' - name: download linux32 uses: actions/download-artifact@v4 with: name: 'inkstitch-linux32' path: 'artifacts/' - - name: download windows32 - uses: actions/download-artifact@v4 - with: - name: 'inkstitch-windows32' - path: 'signed-artifacts/' - if: always() - name: download windows64 uses: actions/download-artifact@v4 with: diff --git a/bin/build-linux b/bin/build-linux index c7014658..194d0db4 100755 --- a/bin/build-linux +++ b/bin/build-linux @@ -4,11 +4,11 @@ set -e mkdir $HOME/geos-build GEOS_PATH=$HOME/geos-build # Downloading geos -curl -L -O https://github.com/libgeos/geos/releases/download/3.12.2/geos-3.12.2.tar.bz2 +curl -L -O https://github.com/libgeos/geos/releases/download/3.13.1/geos-3.13.1.tar.bz2 # uzipping geos into the geos directory mkdir -p geos && cd geos -tar -xf ../geos-3.12.2.tar.bz2 --strip-components=1 +tar -xf ../geos-3.13.1.tar.bz2 --strip-components=1 # Building geos mkdir -p build && cd build && cmake -DCMAKE_INSTALL_PREFIX:PATH=$GEOS_PATH -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF .. make && make install @@ -27,6 +27,10 @@ if [ ! -z "$CI" ]; then fi cd ../.. -python -m pip uninstall -y shapely -python -m pip cache remove shapely -python -m pip install -v shapely --no-binary shapely +# disabled for linux32 build to run virtualenv properly +#python -m pip uninstall -y shapely +#python -m pip cache remove shapely +#python -m pip install -v shapely --no-binary shapely +#virtualenv/bin/pip uninstall -y shapely +#virtualenv/bin/pip cache remove shapely +#virtualenv/bin/pip install -v shapely diff --git a/bin/build-linux32-venv b/bin/build-linux32-venv index 02d5c976..861f9152 100644 --- a/bin/build-linux32-venv +++ b/bin/build-linux32-venv @@ -13,8 +13,11 @@ virtualenv/bin/pip install pycairo virtualenv/bin/pip install PyGObject==3.50.0 virtualenv/bin/pip install wxPython - +# install geos for shapely +virtualenv/bin/pip install -v shapely + virtualenv/bin/pip install -r requirements.txt + # for networkx virtualenv/bin/pip install pandas diff --git a/bin/build-python b/bin/build-python index 13d2d893..c6213f7e 100755 --- a/bin/build-python +++ b/bin/build-python @@ -5,15 +5,10 @@ info_year=$( date "+%Y" ) # PyInstaller v6.x rearranges folder configuration causing broken builds, This re-enables old onedir layout. pyinstaller_args+="--contents-directory . " -# We need to use the precompiled bootloader linked with graphical Mac OS X -# libraries if we develop a GUI application for Mac: -if [ "$BUILD" = "osx" -o "$BUILD" = "windows" ]; then - pyinstaller_args+="--windowed " -fi - # output useful debugging info that helps us trace library dependency issues pyinstaller_args+="--log-level DEBUG " +# Setting up pyinstaller arguments for each OS. # This adds bundle identifier in reverse DSN format for macos if [ "$BUILD" = "osx" ]; then pyinstaller_args+="--osx-bundle-identifier org.inkstitch.app " @@ -22,18 +17,15 @@ if [ "$BUILD" = "osx" ]; then echo "Dev or Local Build" else bash bin/import-macos-keys - python -m PyInstaller $pyinstaller_args inkstitch.py; fi -elif [ "$BUILD" = "linux" ] || [ "$BUILD" = "linux-new" ] || [ "$BUILD" = "linux-old" ]; then +elif [ "$BUILD" = "linux" ]; then pyinstaller_args+="--hidden-import gi.repository.Gtk " pyinstaller_args+="--add-binary /lib/x86_64-linux-gnu/libcrypt.so.1:. " pyinstaller_args+="--add-binary /lib/x86_64-linux-gnu/libnsl.so.1:. " - python -m PyInstaller $pyinstaller_args --strip inkstitch.py; elif [ "$BUILD" = "linux32" ]; then pyinstaller_args+="--hidden-import gi.repository.Gtk " pyinstaller_args+="--add-binary /lib/i386-linux-gnu/libcrypt.so.1:. " pyinstaller_args+="--add-binary /lib/i386-linux-gnu/libnsl.so.1:. " - python -m PyInstaller $pyinstaller_args --strip inkstitch.py; elif [ "$BUILD" = "windows" ]; then if [[ "$VERSION" =~ ^v[0-9][.0-9]+$ ]]; then # setting the file and product version for release @@ -51,9 +43,16 @@ elif [ "$BUILD" = "windows" ]; then sed -i'' 's/1.1.1/'"${VERSION#v}"'/' installer_scripts/file_version_info.txt sed -i'' 's/1234/'"${info_year}"'/' installer_scripts/file_version_info.txt # sets icon to inkstitch.exe - pyinstaller_args+="-i images/inkstitch/win/inkstitch.ico " + pyinstaller_args+="-i images/inkstitch/win/inkstitch.ico " pyinstaller_args+="--version-file installer_scripts/file_version_info.txt " - python -m PyInstaller $pyinstaller_args inkstitch.py +fi + +# Finally we build for each os with the finalized settings +if [ "$BUILD" = "osx" -o "$BUILD" = "windows" ]; then + pyinstaller_args+="--windowed " + python -m PyInstaller $pyinstaller_args inkstitch.py; +else + python -m PyInstaller $pyinstaller_args --strip inkstitch.py; fi # pyinstaller put a whole mess of libraries under dist/inkstitch. We'd like diff --git a/bin/build-windows-installer b/bin/build-windows-installer index 1f05d91b..85780079 100755 --- a/bin/build-windows-installer +++ b/bin/build-windows-installer @@ -11,14 +11,7 @@ copyright_year="#define COPYRIGHT \""${info_year}"\"" version_block="#define VERSION \""${VERSION}"\"" sed -i'' -e '/;inkstitch-year/ a\'$'\n'"${copyright_year}"'' win/win_build.iss sed -i'' -e '/;inkstitch-version/ a\'$'\n'"${version_block}"'' win/win_build.iss -# set installer to stop 64bit version to be installed in 32bit Windows -if [[ ${ARCH} == "64bit" ]]; then - echo "64" - sed -i'' -e '/;arch-allowed/ a\'$'\n'"ArchitecturesAllowed=x64 arm64"'' win/win_build.iss -else - echo "32" - sed -i'' -e '/;arch-allowed/ a\'$'\n'"ArchitecturesAllowed=x86 x64 arm64"'' win/win_build.iss -fi +sed -i'' -e '/;arch-allowed/ a\'$'\n'"ArchitecturesAllowed=x64 arm64"'' win/win_build.iss iscc win/win_build.iss mv win/inkstitch.exe artifacts/inkstitch-${VERSION}-${OS}-${ARCH}.exe @@ -28,8 +21,13 @@ if [[ -d "../signed-artifacts" ]]; then DIRECTORY="signed-artifacts" echo "Found signed artifacts" else - DIRECTORY="artifacts" - echo "No signed artifacts found, local build" + if [[ ! -d "../signed-artifacts" ]]; then + DIRECTORY="signed-artifacts" + echo "Created signed artifacts" + else + DIRECTORY="artifacts" + echo "No signed artifacts found, local build" + fi fi # The python zipfile command line utility can't handle directories |
