Build Multi-Platform #4
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: Build Multi-Platform | |
| on: | |
| push: | |
| tags: | |
| - 'v*' | |
| workflow_dispatch: | |
| jobs: | |
| build-linux-x64: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libcairo2-dev libpango1.0-dev ffmpeg | |
| - name: Install Python dependencies | |
| run: | | |
| pip install --upgrade pip | |
| pip install pyinstaller | |
| pip install -r requirements.txt | |
| - name: Build executable | |
| run: | | |
| pyinstaller --name=Askit \ | |
| --onedir \ | |
| --add-data="assets:assets" \ | |
| --hidden-import=PyQt5 \ | |
| --hidden-import=qasync \ | |
| --hidden-import=loguru \ | |
| --hidden-import=pydantic \ | |
| --hidden-import=numpy \ | |
| --hidden-import=scipy \ | |
| --hidden-import=OpenGL \ | |
| --hidden-import=manimlib \ | |
| --hidden-import=manimpango \ | |
| --collect-all=manimpango \ | |
| --collect-data=manimlib \ | |
| --collect-all=PyQt5 \ | |
| run.py | |
| - name: Package as tar.gz | |
| run: | | |
| cd dist | |
| tar -czvf Askit-Linux-x64.tar.gz Askit/ | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: Askit-Linux-x64 | |
| path: dist/Askit-Linux-x64.tar.gz | |
| build-linux-arm64: | |
| runs-on: ubuntu-24.04-arm | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install system dependencies | |
| run: | | |
| sudo apt-get update | |
| sudo apt-get install -y libcairo2-dev libpango1.0-dev ffmpeg | |
| - name: Install Python dependencies | |
| run: | | |
| pip install --upgrade pip | |
| pip install pyinstaller | |
| pip install -r requirements.txt | |
| - name: Build executable | |
| run: | | |
| pyinstaller --name=Askit \ | |
| --onedir \ | |
| --add-data="assets:assets" \ | |
| --hidden-import=PyQt5 \ | |
| --hidden-import=qasync \ | |
| --hidden-import=loguru \ | |
| --hidden-import=pydantic \ | |
| --hidden-import=numpy \ | |
| --hidden-import=scipy \ | |
| --hidden-import=OpenGL \ | |
| --hidden-import=manimlib \ | |
| --hidden-import=manimpango \ | |
| --collect-all=manimpango \ | |
| --collect-data=manimlib \ | |
| --collect-all=PyQt5 \ | |
| run.py | |
| - name: Package as tar.gz | |
| run: | | |
| cd dist | |
| tar -czvf Askit-Linux-arm64.tar.gz Askit/ | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: Askit-Linux-arm64 | |
| path: dist/Askit-Linux-arm64.tar.gz | |
| build-macos-arm64: | |
| runs-on: macos-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install system dependencies | |
| run: | | |
| brew install cairo pango ffmpeg | |
| - name: Install Python dependencies | |
| run: | | |
| pip install --upgrade pip | |
| pip install pyinstaller | |
| pip install -r requirements.txt | |
| - name: Fix PyQt5 framework symlinks | |
| run: | | |
| PYQT_PATH=$(python -c "import PyQt5; print(PyQt5.__path__[0])") | |
| find "$PYQT_PATH" -name "*.framework" -type d | while read fw; do | |
| if [ -d "$fw/Versions" ]; then | |
| rm -rf "$fw/Resources" 2>/dev/null || true | |
| rm -rf "$fw/Headers" 2>/dev/null || true | |
| fi | |
| done | |
| - name: Build macOS app | |
| run: | | |
| pyinstaller --name=Askit \ | |
| --onedir \ | |
| --windowed \ | |
| --add-data="assets:assets" \ | |
| --hidden-import=PyQt5 \ | |
| --hidden-import=qasync \ | |
| --hidden-import=loguru \ | |
| --hidden-import=pydantic \ | |
| --hidden-import=numpy \ | |
| --hidden-import=scipy \ | |
| --hidden-import=OpenGL \ | |
| --hidden-import=manimlib \ | |
| --hidden-import=manimpango \ | |
| --collect-all=manimpango \ | |
| --collect-data=manimlib \ | |
| run.py | |
| - name: Create DMG | |
| run: | | |
| cd dist | |
| hdiutil create -volname "Askit" -srcfolder Askit.app -ov -format UDZO Askit-macOS-arm64.dmg | |
| - name: Upload DMG | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: Askit-macOS-arm64 | |
| path: dist/Askit-macOS-arm64.dmg | |
| build-macos-x64: | |
| runs-on: macos-13 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.11' | |
| - name: Install system dependencies | |
| run: | | |
| brew install cairo pango ffmpeg | |
| - name: Install Python dependencies | |
| run: | | |
| pip install --upgrade pip | |
| pip install pyinstaller | |
| pip install -r requirements.txt | |
| - name: Fix PyQt5 framework symlinks | |
| run: | | |
| PYQT_PATH=$(python -c "import PyQt5; print(PyQt5.__path__[0])") | |
| find "$PYQT_PATH" -name "*.framework" -type d | while read fw; do | |
| if [ -d "$fw/Versions" ]; then | |
| rm -rf "$fw/Resources" 2>/dev/null || true | |
| rm -rf "$fw/Headers" 2>/dev/null || true | |
| fi | |
| done | |
| - name: Build macOS app | |
| run: | | |
| pyinstaller --name=Askit \ | |
| --onedir \ | |
| --windowed \ | |
| --add-data="assets:assets" \ | |
| --hidden-import=PyQt5 \ | |
| --hidden-import=qasync \ | |
| --hidden-import=loguru \ | |
| --hidden-import=pydantic \ | |
| --hidden-import=numpy \ | |
| --hidden-import=scipy \ | |
| --hidden-import=OpenGL \ | |
| --hidden-import=manimlib \ | |
| --hidden-import=manimpango \ | |
| --collect-all=manimpango \ | |
| --collect-data=manimlib \ | |
| run.py | |
| - name: Create DMG | |
| run: | | |
| cd dist | |
| hdiutil create -volname "Askit" -srcfolder Askit.app -ov -format UDZO Askit-macOS-x64.dmg | |
| - name: Upload DMG | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: Askit-macOS-x64 | |
| path: dist/Askit-macOS-x64.dmg | |
| release: | |
| needs: [build-linux-x64, build-linux-arm64, build-macos-arm64, build-macos-x64] | |
| runs-on: ubuntu-latest | |
| if: startsWith(github.ref, 'refs/tags/') | |
| steps: | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| - name: Create Release | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| files: | | |
| Askit-Linux-x64/Askit-Linux-x64.tar.gz | |
| Askit-Linux-arm64/Askit-Linux-arm64.tar.gz | |
| Askit-macOS-arm64/Askit-macOS-arm64.dmg | |
| Askit-macOS-x64/Askit-macOS-x64.dmg | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |