diff --git a/.github/workflows/build_desktop.yml b/.github/workflows/build_desktop.yml new file mode 100644 index 00000000..16dde6fb --- /dev/null +++ b/.github/workflows/build_desktop.yml @@ -0,0 +1,108 @@ +name: desktop_dev_build + +on: + push: + branches: + - master + workflow_dispatch: + +jobs: + publish_desktop_apps: + name: 🖥️ Publish Desktop Apps + + strategy: + matrix: + include: + - os: ubuntu-latest + extension: deb + - os: macos-latest + extension: dmg + - os: windows-latest + extension: exe + + runs-on: ${{ matrix.os }} + permissions: + contents: write + steps: + - uses: actions/checkout@v3 + + - name: Set up Python 3.9 + uses: actions/setup-python@v4 + with: + python-version: '3.9' + + - name: ⏬️ Install Dependencies + shell: bash + run: | + if [ "$RUNNER_OS" == "Linux" ]; then + sudo apt install libegl1 libxcb-xinerama0 python3-tk -y + fi + python -m pip install --upgrade pip + pip install pyinstaller + + - name: ⬇️ Install Khoj App + run: | + pip install --upgrade . + + - name: 📦 Package Khoj App + shell: bash + run: | + # Setup Environment for Reproducible Builds + export PYTHONHASHSEED=42 + export SOURCE_DATE_EPOCH=$(git log -1 --pretty=%ct) + + pyinstaller --noconfirm Khoj.spec + if [ "$RUNNER_OS" == "Windows" ]; then + mv dist/Khoj.exe dist/khoj_dev_amd64.exe + fi + + - name: 💻 Create Mac App DMG + if: matrix.os == 'macos-latest' + run: | + # Install Mac DMG Creator + brew install create-dmg + # Copy app to separate dmg folder + mkdir -p dist/dmg && cp -r dist/Khoj.app dist/dmg + # Create disk image with the app + create-dmg \ + --volname "Khoj" \ + --volicon "src/khoj/interface/web/assets/icons/favicon.icns" \ + --window-pos 200 120 \ + --window-size 600 300 \ + --icon-size 100 \ + --icon "Khoj.app" 175 120 \ + --hide-extension "Khoj.app" \ + --app-drop-link 425 120 \ + "dist/khoj_dev_amd64.dmg" \ + "dist/dmg/" + + - uses: ruby/setup-ruby@v1 + if: matrix.os == 'ubuntu-latest' + with: + ruby-version: '3.0' + + - name: 🐧 Create Debian Package + if: matrix.os == 'ubuntu-latest' + shell: bash + run: | + # 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 + cp -r dist/Khoj package/opt/Khoj + cp src/khoj/interface/web/assets/icons/favicon-128x128.png package/usr/share/icons/hicolor/128x128/apps/Khoj.png + cp Khoj.desktop package/usr/share/applications + + # Fix permissions to be usable by non-root users + find package/usr/share -type f -exec chmod 644 -- {} + + chmod 755 package/opt/Khoj + + # Package the app + fpm -C package -s dir -t deb -n Khoj -p dist/khoj_dev_amd64.deb + + - uses: actions/upload-artifact@v3 + with: + name: khoj_dev_amd64.${{matrix.extension}} + path: dist/khoj_dev_amd64.${{matrix.extension}} + retention-days: 1