Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
e4b80c3
feat(desktop): implement macOS GUI architecture, Electron runtime com…
Jul 26, 2026
56ee4b0
feat(ui): align file edit tool display style with UI mockup (+N -N pi…
Jul 27, 2026
6f5ccfa
fix: resolve code review feedback — deep link format, safe mainWindow…
Jul 27, 2026
ed86796
feat(ui): update tool trigger and file accordion headers to match lat…
Jul 27, 2026
5848f6c
feat(ui): update file edit tool summary to single-line inline layout …
Jul 27, 2026
2cd63ab
feat(desktop): enable Vite HMR file watching & dep exclusion for pack…
Jul 27, 2026
e96be2f
feat(ui): display action label + file badge + filename + additions/de…
Jul 27, 2026
1b45012
fix(ui): robustly extract filename and fileExt from TargetFile, targe…
Jul 27, 2026
08142cb
feat(ui): refine edit tool diff expansion styling and update desktop …
Jul 27, 2026
11b11b3
Merge remote-tracking branch 'XiaomiMiMo/main' into main
Jul 29, 2026
cabe02f
fix(desktop): optimize process termination, icon caching, and sdk specs
Jul 29, 2026
3fdd9b6
fix(ui): update branding logo to coding agent style and optimize layo…
Jul 29, 2026
c1f15b9
ci: use --ignore-scripts in setup-bun to avoid node-gyp download timeout
Jul 30, 2026
be59b2f
feat(desktop): add tauri v2 package with parallel release script and …
Jul 30, 2026
1b7d558
fix(desktop): resolve electron app template resolution in CI
Jul 30, 2026
24afb42
feat(ci): enable parallel typecheck, shared rust cache and fast elect…
Jul 30, 2026
005b6cd
fix(ci): restrict release artifacts to DMG/ZIP to eliminate 10min upl…
Jul 30, 2026
27fad60
fix(ci): remove electron build from desktop release script and fix la…
Jul 30, 2026
7aa5403
refactor: extract large frontend files into sub-modules
Jul 30, 2026
57c4750
feat(desktop-tauri): align Tauri features with Electron
Jul 30, 2026
8663f06
feat(branding): replace OpenCode branding with MiMo-Code and use gray…
Jul 30, 2026
82557a7
fix(desktop-tauri): fix tray menu and clean warnings
Jul 30, 2026
3dba1f0
fix(desktop-tauri): convert tray icon to white for macOS menu bar
Jul 30, 2026
dad8a8e
ci: add node_modules caching to speed up dependency install
Jul 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
18 changes: 15 additions & 3 deletions .github/actions/setup-bun/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,22 @@ runs:
uses: actions/cache@v5
with:
path: ~/.bun/install/cache
key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock') }}
key: ${{ runner.os }}-bun-cache-${{ hashFiles('**/bun.lock') }}
restore-keys: |
${{ runner.os }}-bun-
${{ runner.os }}-bun-cache-

- name: Cache node_modules
uses: actions/cache@v5
with:
path: |
node_modules
packages/*/node_modules
packages/console/*/node_modules
packages/sdk/js/node_modules
key: ${{ runner.os }}-node_modules-${{ hashFiles('**/bun.lock') }}
restore-keys: |
${{ runner.os }}-node_modules-

- name: Install dependencies
run: bun install
run: bun install --frozen-lockfile --ignore-scripts
shell: bash
134 changes: 134 additions & 0 deletions .github/workflows/release-desktop.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
name: release-desktop

on:
push:
tags:
- "desktop/v*"
- "v*-desktop"
workflow_dispatch:
inputs:
tag:
description: "Tag to release (e.g. desktop/v1.2.3)"
required: true
channel:
description: "Release channel"
required: true
default: "prod"
type: choice
options:
- prod
- beta
- dev

concurrency:
group: release-desktop
cancel-in-progress: false

permissions:
contents: write
id-token: write

env:
OPENCODE_CHANNEL: >-
${{
inputs.channel != '' && inputs.channel ||
(contains(github.ref_name, 'beta') && 'beta' || 'prod')
}}

jobs:
# ── 1. 类型检查 (并行启动,零等待) ──────────────────────────────
typecheck:
name: Typecheck
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6

- uses: ./.github/actions/setup-bun

- name: Typecheck desktop & desktop-tauri
run: |
bun run --cwd packages/desktop typecheck
bun run --cwd packages/desktop-tauri typecheck

# ── 2. 构建 & 打包 ──────────────────────────────────────────────
package-mac:
name: Package macOS (Electron + Tauri Parallel)
runs-on: macos-latest
steps:
- uses: actions/checkout@v6

- uses: ./.github/actions/setup-bun

- name: Install Rust toolchain for Tauri
uses: dtolnay/rust-toolchain@stable

- name: Rust Cache Acceleration for Tauri
uses: Swatinem/rust-cache@v2
with:
workspaces: |
packages/desktop-tauri/src-tauri -> target
shared-key: "tauri-rust-cache-v1"

- name: Package macOS
env:
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: bun run package:all

# 仅上传 DMG / ZIP 压缩发布文件,决不上传包含成千上万零散文件的 .app 文件夹,秒级上传
- name: Upload macOS release artifacts
uses: actions/upload-artifact@v4
with:
name: desktop-mac
path: |
packages/desktop-tauri/src-tauri/target/release/bundle/dmg/*.dmg
packages/desktop/dist/*.dmg
packages/desktop/dist/*.zip
if-no-files-found: error

# ── 3. 发布 GitHub Release ──────────────────────────────────────
release:
name: Publish GitHub Release
needs: [package-mac]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6

- name: Download all platform artifacts
uses: actions/download-artifact@v4
with:
pattern: desktop-*
path: dist/
merge-multiple: false

- name: Extract version from tag or branch
id: version
run: |
if [[ "$GITHUB_REF_NAME" == desktop/v* ]]; then
VERSION="${GITHUB_REF_NAME#desktop/v}"
TAG_NAME="$GITHUB_REF_NAME"
elif [[ "$GITHUB_REF_NAME" == v*-desktop ]]; then
VERSION="${GITHUB_REF_NAME%-desktop}"
VERSION="${VERSION#v}"
TAG_NAME="$GITHUB_REF_NAME"
else
SHORT_SHA=$(git rev-parse --short HEAD)
VERSION="dev-${SHORT_SHA}"
TAG_NAME="v0.0.0-dev-${SHORT_SHA}-desktop"
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "tag_name=$TAG_NAME" >> "$GITHUB_OUTPUT"
IS_PRE=$([[ "$VERSION" == *beta* || "$VERSION" == *alpha* || "$VERSION" == *dev* ]] && echo true || echo false)
echo "is_prerelease=$IS_PRE" >> "$GITHUB_OUTPUT"

- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
name: "desktop v${{ steps.version.outputs.version }}"
tag_name: ${{ steps.version.outputs.tag_name }}
prerelease: ${{ steps.version.outputs.is_prerelease }}
generate_release_notes: true
# 精准上传 DMG 和 ZIP 发布包,规避 Secondary Rate Limit
files: dist/**/*.{dmg,zip}
31 changes: 7 additions & 24 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ name: test

on:
push:
branches: [main, dev]
branches:
- "**"
pull_request:
branches: [main, dev]
workflow_dispatch:

concurrency:
Expand All @@ -15,33 +15,16 @@ permissions:
contents: read

jobs:
unit:
desktop-test:
name: Desktop Tests
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
shard: ["1/4", "2/4", "3/4", "4/4"]
name: unit (shard ${{ matrix.shard }})
steps:
- name: Checkout repository
uses: actions/checkout@v6

- name: Setup Bun
uses: ./.github/actions/setup-bun

- name: Configure git identity
run: |
git config --global user.email "ci@mimo.ai"
git config --global user.name "mimo-ci"

- name: Run unit tests (shard ${{ matrix.shard }})
timeout-minutes: 8
working-directory: packages/opencode
run: bun run test:ci --shard ${{ matrix.shard }}

- name: Upload JUnit
if: always()
uses: actions/upload-artifact@v7
with:
name: junit-shard-${{ strategy.job-index }}
path: packages/opencode/.artifacts/unit/junit.xml
- name: Run desktop tests
working-directory: packages/desktop
run: bun test
Loading