Skip to content

remove cache pip

remove cache pip #45

Workflow file for this run

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.