feat(local-chat): add local conversation with file attachment support #644
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: Desktop CI Dist Lite | |
| on: | |
| pull_request: | |
| paths: | |
| - "apps/desktop/**" | |
| - "apps/controller/**" | |
| - "apps/web/**" | |
| - "packages/shared/**" | |
| - "packages/slimclaw/**" | |
| - "scripts/desktop-check-dist.sh" | |
| - "scripts/desktop-verify-extracted-runner.sh" | |
| - "scripts/desktop-ci-check.mjs" | |
| - "scripts/postinstall.mjs" | |
| - ".npmrc" | |
| - "package.json" | |
| - "pnpm-lock.yaml" | |
| - "pnpm-workspace.yaml" | |
| - ".github/workflows/desktop-ci-dist-lite.yml" | |
| - ".github/workflows/desktop-ci-dist-full.yml" | |
| workflow_dispatch: | |
| push: | |
| branches: | |
| - main | |
| paths: | |
| - "apps/desktop/**" | |
| - "apps/controller/**" | |
| - "apps/web/**" | |
| - "packages/shared/**" | |
| - "packages/slimclaw/**" | |
| - "scripts/desktop-check-dist.sh" | |
| - "scripts/desktop-verify-extracted-runner.sh" | |
| - "scripts/desktop-ci-check.mjs" | |
| - "scripts/postinstall.mjs" | |
| - ".npmrc" | |
| - "package.json" | |
| - "pnpm-lock.yaml" | |
| - "pnpm-workspace.yaml" | |
| - ".github/workflows/desktop-ci-dist-lite.yml" | |
| - ".github/workflows/desktop-ci-dist-full.yml" | |
| permissions: | |
| contents: read | |
| concurrency: | |
| group: desktop-ci-dist-lite-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| desktop-ci: | |
| runs-on: macos-14 | |
| timeout-minutes: 45 | |
| env: | |
| NEXU_DESKTOP_MAC_TARGETS: dir | |
| NEXU_DESKTOP_ELECTRON_BUILDER_FAST_MODE: "1" | |
| NEXU_DESKTOP_ARCHIVE_OPENCLAW_SIDECAR: "0" | |
| LANGFUSE_PUBLIC_KEY: ${{ secrets.LANGFUSE_PUBLIC_KEY }} | |
| LANGFUSE_SECRET_KEY: ${{ secrets.LANGFUSE_SECRET_KEY }} | |
| LANGFUSE_BASE_URL: ${{ secrets.LANGFUSE_BASE_URL }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| with: | |
| version: 10.26.0 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 24 | |
| cache: pnpm | |
| cache-dependency-path: pnpm-lock.yaml | |
| - name: Restore npm cache for runtime installs | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.npm | |
| key: desktop-npm-cache-${{ runner.os }}-arm64-${{ hashFiles('packages/slimclaw/runtime-seed/package-lock.json', 'apps/controller/static/runtime-plugins/openclaw-weixin/package-lock.json') }} | |
| restore-keys: | | |
| desktop-npm-cache-${{ runner.os }}-arm64- | |
| desktop-npm-cache-${{ runner.os }}- | |
| - name: Restore Electron build caches | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/Library/Caches/electron | |
| ~/Library/Caches/electron-builder | |
| apps/desktop/.cache | |
| key: desktop-electron-cache-${{ runner.os }}-arm64-${{ hashFiles('pnpm-lock.yaml', 'apps/desktop/package.json') }} | |
| restore-keys: | | |
| desktop-electron-cache-${{ runner.os }}-arm64- | |
| desktop-electron-cache-${{ runner.os }}- | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Show desktop toolchain versions | |
| shell: pwsh | |
| run: pnpm exec electron --version | |
| - name: Build unsigned desktop bundle | |
| env: | |
| NEXU_DESKTOP_TARGET_ARCH: arm64 | |
| NEXU_DESKTOP_USE_EXISTING_RUNTIME_INSTALL: "1" | |
| run: pnpm dist:mac:unsigned | |
| - name: Set packaged app paths | |
| shell: pwsh | |
| run: | | |
| $captureDir = Join-Path $env:RUNNER_TEMP "desktop-ci" | |
| $packagedHome = Join-Path $env:RUNNER_TEMP "desktop-home" | |
| $tmpDir = Join-Path $env:RUNNER_TEMP "desktop-tmp" | |
| New-Item -ItemType Directory -Force -Path $captureDir, $packagedHome, $tmpDir | Out-Null | |
| $packagedUserDataDir = Join-Path $packagedHome "Library/Application Support/@nexu/desktop" | |
| $packagedApp = "apps/desktop/release/mac-arm64/Nexu.app" | |
| $packagedExecutable = "$packagedApp/Contents/MacOS/Nexu" | |
| $packagedLogsDir = Join-Path $packagedUserDataDir "logs" | |
| $packagedRuntimeLogsDir = Join-Path $packagedLogsDir "runtime-units" | |
| @( | |
| "PACKAGED_HOME=$packagedHome", | |
| "PACKAGED_LOGS_DIR=$packagedLogsDir", | |
| "PACKAGED_USER_DATA_DIR=$packagedUserDataDir", | |
| "PACKAGED_RUNTIME_LOGS_DIR=$packagedRuntimeLogsDir", | |
| "DEFAULT_LOGS_DIR=$packagedLogsDir", | |
| "DEFAULT_USER_DATA_DIR=$packagedUserDataDir", | |
| "DEFAULT_RUNTIME_LOGS_DIR=$packagedRuntimeLogsDir", | |
| "PACKAGED_APP=$packagedApp", | |
| "PACKAGED_EXECUTABLE=$packagedExecutable" | |
| ) | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 | |
| - name: Verify packaged desktop artifacts | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| packaged_apps=(apps/desktop/release/mac*/Nexu.app) | |
| if [ "${#packaged_apps[@]}" -eq 0 ]; then | |
| echo "No packaged desktop app bundle was produced" >&2 | |
| exit 1 | |
| fi | |
| printf 'Built artifacts:\n' | |
| printf ' - %s\n' "${packaged_apps[@]}" | |
| test -d "$PACKAGED_APP" | |
| test -x "$PACKAGED_EXECUTABLE" | |
| - name: Verify packaged runtime unit health | |
| if: matrix.os == 'macos' | |
| env: | |
| NEXU_DESKTOP_CHECK_CAPTURE_DIR: ${{ runner.temp }}/desktop-ci | |
| NEXU_DESKTOP_CHECK_TMPDIR: ${{ runner.temp }}/desktop-tmp | |
| run: pnpm check:dist | |
| - name: Verify extracted runner bundle integrity | |
| env: | |
| NEXU_DESKTOP_CHECK_TMPDIR: ${{ runner.temp }}/desktop-tmp | |
| NEXU_DESKTOP_REQUIRE_SPCTL: "0" | |
| run: bash scripts/desktop-verify-extracted-runner.sh | |
| - name: Capture desktop logs | |
| if: always() | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| mkdir -p "$RUNNER_TEMP/desktop-ci" | |
| if [ -n "${PACKAGED_LOGS_DIR:-}" ] && [ -d "$PACKAGED_LOGS_DIR" ]; then | |
| cp -R "$PACKAGED_LOGS_DIR" "$RUNNER_TEMP/desktop-ci/packaged-logs" | |
| fi | |
| if [ -n "${PACKAGED_RUNTIME_LOGS_DIR:-}" ] && [ -d "$PACKAGED_RUNTIME_LOGS_DIR" ]; then | |
| cp -R "$PACKAGED_RUNTIME_LOGS_DIR" "$RUNNER_TEMP/desktop-ci/runtime-unit-logs" | |
| fi | |
| if [ -n "${DEFAULT_LOGS_DIR:-}" ] && [ -d "$DEFAULT_LOGS_DIR" ]; then | |
| cp -R "$DEFAULT_LOGS_DIR" "$RUNNER_TEMP/desktop-ci/default-logs" | |
| fi | |
| if [ -n "${DEFAULT_RUNTIME_LOGS_DIR:-}" ] && [ -d "$DEFAULT_RUNTIME_LOGS_DIR" ]; then | |
| cp -R "$DEFAULT_RUNTIME_LOGS_DIR" "$RUNNER_TEMP/desktop-ci/default-runtime-unit-logs" | |
| fi | |
| - name: Upload desktop logs | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: desktop-ci-logs-arm64 | |
| path: ${{ runner.temp }}/desktop-ci | |
| if-no-files-found: warn | |
| retention-days: 3 |