desktop_dev_build #11
This file contains 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: 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 }} |