Skip to content

desktop_dev_build

desktop_dev_build #11

Workflow file for this run

name: desktop_dev_build
on:
workflow_dispatch:
push:
tags:
- "*"
jobs:
publish_desktop_apps:
name: 🖥️ Publish Desktop Apps
strategy:
matrix:
include:
- os: ubuntu-20.04
extension: deb
- os: ubuntu-22.04
extension: deb
- os: macos-12
extension: dmg
- os: macos-14
extension: dmg
- os: windows-latest
extension: exe
runs-on: ${{ matrix.os }}
permissions:
contents: write
defaults:
run:
working-directory: ./
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.11
uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: ⏬️ Install Dependencies
shell: bash
run: |
if [ "$RUNNER_OS" == "Linux" ]; then
sudo apt update
sudo apt install libxcb-cursor0 openslide-tools libvips -y
fi
if [ "$RUNNER_OS" == "macOS" ]; then
if [ "$RUNNER_ARCH" == "arm64" ]; then
alias brew='arch -arm64 brew'
fi
brew install vips openslide
fi
python -m pip install --upgrade pip
pip install pyinstaller==5.12.0 --upgrade
- name: ⬇️ Install TissUUmaps
shell: bash
run: |
pip install ".[full]"
if [ "$RUNNER_OS" == "macOS" ]; then
pip install pillow==9.5.0
fi
- name: 📦 Package TissUUmaps
shell: bash
run: |
cd standalone
# Setup Environment for Reproducible Builds
export PYTHONHASHSEED=42
export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct)
pyinstaller --noconfirm --clean TissUUmaps.spec
if [ "$RUNNER_OS" == "Windows" ]; then
# copy all needed vips lib
cp dep/vips-dev-8.10/bin/* dist/TissUUmaps/
fi
- name: 💻 Create Win exe installer
if: matrix.os == 'windows-latest'
run: |
cd standalone
"%programfiles(x86)%\Inno Setup 6\iscc.exe" "build_installer.iss"
mv dist/TissUUmaps.exe dist/TissUUmaps_${{ matrix.os }}_${{runner.arch}}.exe
shell: cmd
- name: 💻 Create Mac App DMG
if: matrix.os == 'macos-12' || matrix.os == 'macos-14'
run: |
cd standalone
# Install Mac DMG Creator
brew install create-dmg
# Copy app to separate dmg folder
mkdir -p dist/dmg && cp -r dist/TissUUmaps.app dist/dmg
# Create disk image with the app
create-dmg \
--volname "TissUUmaps" \
--volicon "../tissuumaps/static/misc/design/logo.png" \
--window-pos 200 120 \
--window-size 600 300 \
--icon-size 100 \
--hide-extension "TissUUmaps.app" \
--app-drop-link 0 0 \
"dist/TissUUmaps_${{ matrix.os }}_${{runner.arch}}.dmg" \
"dist/dmg/"
- uses: ruby/setup-ruby@v1
if: matrix.os == 'ubuntu-20.04' || matrix.os == 'ubuntu-22.04'
with:
ruby-version: "3.0"
- name: 🐧 Create Debian Package
if: matrix.os == 'ubuntu-20.04' || matrix.os == 'ubuntu-22.04'
shell: bash
run: |
cd standalone
# Install Debian Packager
gem install fpm
# Copy app files into expected output directory structure
mkdir -p package/opt package/usr/share/applications package/usr/share/icons/hicolor/128x128/apps package/usr/bin
cp -r dist/TissUUmaps package/opt/TissUUmaps
cp ../tissuumaps/static/misc/design/logo.png package/usr/share/icons/hicolor/128x128/apps/TissUUmaps.png
cp TissUUmaps.desktop package/usr/share/applications
echo '#/bin/bash' | tee package/usr/bin/tissuumaps > /dev/null
echo '/opt/TissUUmaps/TissUUmaps' | tee -a package/usr/bin/tissuumaps > /dev/null
# Fix permissions to be usable by non-root users
find package/usr/share -type f -exec chmod 644 -- {} +
chmod 755 package/opt/TissUUmaps
chmod 755 package/usr/bin/tissuumaps
# Package the app
fpm -C package -s dir -d libvips -d libxcb-cursor0 -d openslide-tools -t deb -n TissUUmaps -p dist/TissUUmaps_${{ matrix.os }}_${{runner.arch}}.deb
- name: Upload the installer as an artifact
uses: actions/upload-artifact@v3
with:
path: standalone/dist/TissUUmaps_${{ matrix.os }}_${{runner.arch}}.${{matrix.extension}}
name: TissUUmaps_${{ matrix.os }}_${{runner.arch}}.${{matrix.extension}}
release:
runs-on: ubuntu-22.04
defaults:
run:
working-directory: ./standalone
needs: [publish_desktop_apps]
if: github.ref_type == 'tag'
permissions:
contents: write
steps:
- uses: actions/checkout@v2
- uses: actions/download-artifact@v3
with:
path: "standalone/dist"
- uses: ncipollo/release-action@v1
with:
artifacts: standalone/dist/TissUUmaps_*/TissUUmaps_*
token: ${{ secrets.GITHUB_TOKEN }}