agent runs in a background thread #28
Workflow file for this run
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: Release | |
| on: | |
| push: | |
| tags: | |
| - "v*" | |
| permissions: | |
| contents: write | |
| packages: write | |
| env: | |
| REGISTRY: ghcr.io | |
| IMAGE_NAME: ${{ github.repository }} | |
| jobs: | |
| # ────────────────────────────────────────────── | |
| # Build and push Docker images to GHCR | |
| # ────────────────────────────────────────────── | |
| docker: | |
| name: Docker (${{ matrix.image_suffix }}) | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - image_suffix: agent | |
| dockerfile: Dockerfile | |
| context: . | |
| - image_suffix: omniparser | |
| dockerfile: docker/omniparser/Dockerfile | |
| context: . | |
| - image_suffix: desktop | |
| dockerfile: app/gui/Dockerfile | |
| context: app/gui | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Login to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ${{ env.REGISTRY }} | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Extract metadata | |
| id: meta | |
| uses: docker/metadata-action@v5 | |
| with: | |
| images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-${{ matrix.image_suffix }} | |
| tags: | | |
| type=semver,pattern={{version}} | |
| type=semver,pattern={{major}}.{{minor}} | |
| type=raw,value=latest | |
| - name: Build and push | |
| uses: docker/build-push-action@v5 | |
| with: | |
| context: ${{ matrix.context }} | |
| file: ${{ matrix.dockerfile }} | |
| push: true | |
| tags: ${{ steps.meta.outputs.tags }} | |
| labels: ${{ steps.meta.outputs.labels }} | |
| cache-from: type=gha | |
| cache-to: type=gha,mode=max | |
| # ────────────────────────────────────────────── | |
| # Build platform binaries with PyInstaller | |
| # ────────────────────────────────────────────── | |
| pyinstaller: | |
| name: Binary (${{ matrix.os_label }}) | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| os_label: linux | |
| data_sep: ":" | |
| ext: "" | |
| - os: windows-latest | |
| os_label: windows | |
| data_sep: ";" | |
| ext: ".exe" | |
| - os: macos-latest | |
| os_label: macos | |
| data_sep: ":" | |
| ext: "" | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: "3.10" | |
| - name: Install dependencies | |
| shell: bash | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -r requirements.txt | |
| pip install pyinstaller | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: "20" | |
| - name: Build frontend | |
| shell: bash | |
| env: | |
| VITE_BACKEND_PORT: "7926" | |
| run: | | |
| cd app/ui_layer/browser/frontend | |
| npm install | |
| npx vite build | |
| - name: Create default config.json | |
| shell: bash | |
| run: | | |
| echo "{\"use_conda\": false, \"gui_mode_enabled\": false}" > config.json | |
| - name: Build with PyInstaller | |
| shell: bash | |
| run: | | |
| pyinstaller \ | |
| --noconfirm \ | |
| --clean \ | |
| --onefile \ | |
| --name CraftBot \ | |
| --collect-submodules app \ | |
| --collect-submodules agent_core \ | |
| --collect-submodules agents \ | |
| --collect-submodules decorators \ | |
| --collect-submodules chromadb \ | |
| --hidden-import onnxruntime \ | |
| --hidden-import tokenizers \ | |
| --collect-data tiktoken_ext \ | |
| --collect-submodules tiktoken \ | |
| --exclude-module torch \ | |
| --exclude-module torchvision \ | |
| --exclude-module torchaudio \ | |
| --exclude-module triton \ | |
| --exclude-module nvidia \ | |
| --exclude-module transformers \ | |
| --exclude-module cv2 \ | |
| --exclude-module matplotlib \ | |
| --exclude-module tensorflow \ | |
| --additional-hooks-dir hooks \ | |
| --runtime-hook rthooks/rthook-rich-unicode.py \ | |
| --add-data "assets${{ matrix.data_sep }}assets" \ | |
| --add-data "main.py${{ matrix.data_sep }}." \ | |
| --add-data "config.json${{ matrix.data_sep }}." \ | |
| --add-data ".env.example${{ matrix.data_sep }}." \ | |
| --add-data "requirements.txt${{ matrix.data_sep }}." \ | |
| --add-data "environment.yml${{ matrix.data_sep }}." \ | |
| --add-data "app/data${{ matrix.data_sep }}app/data" \ | |
| --add-data "app/ui_layer/browser/frontend/dist${{ matrix.data_sep }}app/ui_layer/browser/frontend/dist" \ | |
| --add-data "app/gui/docker-compose.yaml${{ matrix.data_sep }}app/gui" \ | |
| --add-data "app/gui/Dockerfile${{ matrix.data_sep }}app/gui" \ | |
| --add-data "app/gui/custom-cont-init.d${{ matrix.data_sep }}app/gui/custom-cont-init.d" \ | |
| --add-data "agents${{ matrix.data_sep }}agents" \ | |
| run.py | |
| - name: Rename artifact | |
| shell: bash | |
| run: | | |
| mv "dist/CraftBot${{ matrix.ext }}" \ | |
| "dist/CraftBot-${{ matrix.os_label }}${{ matrix.ext }}" | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: release-${{ matrix.os_label }} | |
| path: dist/CraftBot-${{ matrix.os_label }}${{ matrix.ext }} | |
| # ────────────────────────────────────────────── | |
| # Create GitHub Release with all artifacts | |
| # ────────────────────────────────────────────── | |
| release: | |
| name: Publish GitHub Release | |
| needs: [docker, pyinstaller] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: release | |
| merge-multiple: true | |
| - name: Create GitHub Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| files: release/** | |
| generate_release_notes: true | |
| body: | | |
| ## Installation | |
| ### Docker Compose (Recommended) | |
| Includes the agent, OmniParser, and GUI desktop VM — all in one. | |
| ```bash | |
| git clone https://github.com/zfoong/CraftBot.git | |
| cd CraftBot | |
| cp .env.example .env # Edit with your API keys | |
| docker compose up | |
| ``` | |
| For GPU acceleration on OmniParser: | |
| ```bash | |
| docker compose -f docker-compose.yml -f docker-compose.gpu.yml up | |
| ``` | |
| ### Standalone Binary | |
| Download the binary for your platform from the assets below. | |
| Requires Docker for GUI mode and Omniparser. Run with `--no-omniparser` to skip OmniParser setup. Run with `--no-conda` to skip conda setup and use system Python instead. |