openpencil/.github/workflows/rust-release.yml
Fini af9292d8f5 fix(ai): classify Type 0 components as non-mobile to skip phone chrome
Why: "Design a profile card" through MiniMax-M2.7 produced a 375×803 mobile
screen with auto-injected status bar, because the planner skill listed
"profiles" as a Type 2 single-task screen and the orchestrator's
isMobileScreen heuristic ran on width≤480 alone.

What: design-type.md + decomposition.md add Type 0 (single component:
card / badge / chip / modal) with width=400 height=0 1 subtask no chrome.
isMobileFullScreen helper extracted to orchestrator-plan-classify.ts and
required by both orchestrator.ts and orchestrator-sub-agent.ts so the
two paths can't drift on what "mobile" means (Codex review caught this
when only orchestrator.ts had the new check).

Verified with same MiniMax + same prompt: 400×320 component, 8 nodes,
firstChildRole=card, no status-bar.
2026-05-09 21:00:00 +08:00

151 lines
5.3 KiB
YAML

name: Rust release artifacts
# Triggered on tag push (v*) — builds release binaries across desktop targets,
# the WASM bundle, and uploads them to a GitHub Release draft. Step 1a kill-spike
# only ships `openpencil-app` (a placeholder binary entry); real desktop apps
# (DMG / AppImage / EXE installer) come in Step 1f and replace this scaffolding.
on:
push:
tags: ['v*']
workflow_dispatch:
jobs:
build:
name: ${{ matrix.label }}
runs-on: ${{ matrix.runner }}
strategy:
fail-fast: false
matrix:
include:
- label: macos-aarch64
runner: macos-latest
target: aarch64-apple-darwin
archive: tar.gz
# macos-13 (Intel) deprecated; cross-compile x86_64-apple-darwin
# from Apple Silicon (cargo supports cross-compile to host's other
# arch out of the box, no `cross` needed).
- label: macos-x86_64
runner: macos-latest
target: x86_64-apple-darwin
archive: tar.gz
- label: linux-x86_64
runner: ubuntu-latest
target: x86_64-unknown-linux-gnu
archive: tar.gz
- label: linux-aarch64
runner: ubuntu-latest
target: aarch64-unknown-linux-gnu
archive: tar.gz
cross: true
- label: windows-x86_64
runner: windows-latest
target: x86_64-pc-windows-msvc
archive: zip
# Windows ARM64 — cargo cross-compile from x86_64 windows runner.
- label: windows-aarch64
runner: windows-latest
target: aarch64-pc-windows-msvc
archive: zip
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: '1.85'
targets: ${{ matrix.target }}
- uses: Swatinem/rust-cache@v2
with:
key: release-${{ matrix.target }}
- name: Install Linux GL/EGL prereqs
if: runner.os == 'Linux' && matrix.cross != true
run: |
sudo apt-get update
sudo apt-get install -y \
libxkbcommon-dev libxkbcommon-x11-dev \
libwayland-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev \
libegl1-mesa-dev libgles2-mesa-dev libgbm-dev \
libfreetype-dev libfontconfig1-dev
- name: Install cross
if: matrix.cross == true
run: cargo install cross --locked --version 0.2.5
- name: Build (host)
if: matrix.cross != true
run: cargo build -p openpencil-app --target ${{ matrix.target }} --release
- name: Build (cross)
if: matrix.cross == true
run: cross build -p openpencil-app --target ${{ matrix.target }} --release
- name: Package archive (unix)
if: matrix.archive == 'tar.gz'
shell: bash
run: |
cd target/${{ matrix.target }}/release
tar czf ../../../openpencil-app-${{ matrix.label }}.tar.gz openpencil-app 2>/dev/null || \
tar czf ../../../openpencil-app-${{ matrix.label }}.tar.gz openpencil-app.placeholder
- name: Package archive (windows)
if: matrix.archive == 'zip'
shell: pwsh
run: |
Compress-Archive `
-Path target\${{ matrix.target }}\release\openpencil-app.exe `
-DestinationPath openpencil-app-${{ matrix.label }}.zip `
-ErrorAction SilentlyContinue
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: openpencil-app-${{ matrix.label }}
path: |
openpencil-app-${{ matrix.label }}.tar.gz
openpencil-app-${{ matrix.label }}.zip
if-no-files-found: ignore
wasm:
name: wasm32 web bundle
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: dtolnay/rust-toolchain@stable
with:
toolchain: '1.85'
targets: wasm32-unknown-unknown
- uses: Swatinem/rust-cache@v2
with:
key: release-wasm32
- run: cargo build -p openpencil-shell-web --target wasm32-unknown-unknown --release
- name: Package wasm artifact
run: |
cd target/wasm32-unknown-unknown/release
tar czf ../../../openpencil-shell-web-wasm.tar.gz \
openpencil_shell_web.wasm 2>/dev/null || true
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: openpencil-shell-web-wasm
path: openpencil-shell-web-wasm.tar.gz
if-no-files-found: warn
release-draft:
name: Create / update GitHub Release draft
needs: [build, wasm]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
steps:
- uses: actions/checkout@v4
- uses: actions/download-artifact@v4
with:
path: dist
- name: Flatten artifacts
run: |
mkdir -p release-files
find dist -type f \( -name "*.tar.gz" -o -name "*.zip" \) -exec cp {} release-files/ \;
ls -la release-files
- name: Create / update GitHub Release
uses: softprops/action-gh-release@v2
with:
draft: true
files: release-files/*
generate_release_notes: true