remove cache pip #45
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 Linux webview system packages | |
| if: matrix.os_label == 'linux' | |
| shell: bash | |
| run: | | |
| # PyGObject builds against these headers. WebKitGTK 4.1 + the | |
| # webkit2-4.1 GObject introspection bindings are what pywebview's | |
| # GTK backend talks to at runtime — the WebKit2 namespace is | |
| # identical across 4.0 and 4.1, so pywebview needs no change. | |
| # Ubuntu 24.04 (noble) on ubuntu-latest dropped the 4.0 packages; | |
| # earlier 22.04 runners had only 4.0. Pin to 4.1 to match noble. | |
| # End users need the runtime halves of these (libwebkit2gtk-4.1-0, | |
| # gir1.2-webkit2-4.1) installed via their distro's package manager. | |
| sudo apt-get update | |
| sudo apt-get install -y \ | |
| libwebkit2gtk-4.1-0 \ | |
| gir1.2-webkit2-4.1 \ | |
| libgirepository1.0-dev \ | |
| libgirepository-2.0-dev \ | |
| libcairo2-dev \ | |
| python3-gi \ | |
| python3-gi-cairo | |
| - name: Install dependencies | |
| shell: bash | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install -r requirements.txt | |
| # Installer-only deps (pywebview + per-OS backend bindings). Kept | |
| # in a separate file so the agent's requirements.txt stays lean. | |
| pip install -r packaging/requirements-installer.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: Write VERSION file from git tag | |
| shell: bash | |
| run: | | |
| # github.ref_name is "v1.3.0" for tag pushes; strip the leading 'v'. | |
| # The installer's _read_bundled_version() reads this to pin the | |
| # download URL to the matching agent release. | |
| REF="${{ github.ref_name }}" | |
| VERSION="${REF#v}" | |
| echo "$VERSION" > VERSION | |
| echo "VERSION file content: $(cat VERSION)" | |
| - name: Build agent (CraftBotAgent) with PyInstaller | |
| shell: bash | |
| run: pyinstaller --noconfirm --clean packaging/CraftBotAgent.spec | |
| - name: Zip agent payload | |
| shell: bash | |
| run: | | |
| # CraftBotAgent.spec produces dist/CraftBotAgent/ (folder). | |
| # Zip it into the asset name the installer downloads at runtime. | |
| cd dist | |
| if [ "${{ matrix.os_label }}" = "windows" ]; then | |
| 7z a -tzip "CraftBot-agent-${{ matrix.os_label }}.zip" CraftBotAgent | |
| else | |
| zip -r "CraftBot-agent-${{ matrix.os_label }}.zip" CraftBotAgent | |
| fi | |
| ls -lh "CraftBot-agent-${{ matrix.os_label }}.zip" | |
| - name: Build installer (CraftBotInstaller) with PyInstaller | |
| shell: bash | |
| run: pyinstaller --noconfirm --clean packaging/CraftBotInstaller.spec | |
| - name: Rename installer artifact | |
| shell: bash | |
| run: | | |
| mv "dist/CraftBotInstaller${{ matrix.ext }}" \ | |
| "dist/CraftBotInstaller-${{ matrix.os_label }}${{ matrix.ext }}" | |
| - name: Upload installer artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: release-installer-${{ matrix.os_label }} | |
| path: dist/CraftBotInstaller-${{ matrix.os_label }}${{ matrix.ext }} | |
| - name: Upload agent zip artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: release-agent-${{ matrix.os_label }} | |
| path: dist/CraftBot-agent-${{ matrix.os_label }}.zip | |
| # ────────────────────────────────────────────── | |
| # 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: | | |
| ### Installer (Recommended) | |
| Download `CraftBotInstaller-<platform>` from the assets below and | |
| run it. The installer wizard will let you choose an install | |
| location and will download the matching agent payload | |
| (`CraftBot-agent-<platform>.zip`) from this same release. | |
| ### Manual install | |
| If you'd rather skip the wizard, download both | |
| `CraftBotInstaller-<platform>` and `CraftBot-agent-<platform>.zip`, | |
| place them in the same folder, and run the installer — it'll find | |
| the local zip instead of fetching from GitHub. |