mirror of
https://github.com/ZSeven-W/openpencil.git
synced 2026-05-31 19:04:29 +07:00
* fix(docker): support multi-platform builds and fix monorepo paths Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * perf(renderer): cache pre-rasterized paragraph images to avoid per-frame glyph rasterization (#76) * fix(canvas): stabilize frame label size during zoom Draw frame labels in screen-space after the viewport transform restore, converting scene coords manually. Previously fontSize=12/zoom fed into Math.ceil caused integer-boundary jumps that made labels flicker during zoom. Also skip shadow rendering while actively zooming for smoother performance. * perf(renderer): cache pre-rasterized paragraph images to avoid per-frame glyph rasterization - Add paraImageCache (SkImage, 128 MB LRU limit) keyed on the same key as paraCache - Use drawImageRect instead of drawParagraph on cache hit, skipping per-frame glyph shaping and rasterization - Fall back to direct drawParagraph only when off-screen surface creation (MakeSurface) fails - Extract _dpr getter to deduplicate device-pixel-ratio resolution logic across draw paths - Evict oldest entries when cache exceeds byte limit; delete SkImage on eviction and dispose() * feat(cli): introduce OpenPencil CLI for terminal control of the design tool - Added a new CLI application under `apps/cli` to manage OpenPencil from the terminal. - Implemented commands for app control (`start`, `stop`, `status`), document operations (`open`, `save`, `get`, `selection`), and design manipulation (`design`, `import`). - Enhanced documentation with usage instructions and platform support details. - Updated build scripts to include CLI compilation and publishing processes. - Introduced a new GitHub Actions workflow for publishing the CLI to npm. - Updated existing workflows to integrate CLI build steps and ensure proper versioning across packages. * docs: update README files to include CLI tool details and multi-platform code export - Added CLI section to README files in multiple languages, detailing commands for terminal control of the design tool. - Included instructions for global installation and usage examples for the CLI. - Expanded documentation on multi-platform code export capabilities from a single `.op` file to various frameworks. - Updated CLAUDE.md to reference the new CLI documentation and its integration with the design tool. * chore(bun.lock): update package dependencies to specific versions - Removed workspace references for several packages in the bun.lock file. - Updated dependencies for `@zseven-w/pen-core`, `@zseven-w/pen-types`, `@zseven-w/pen-codegen`, `@zseven-w/pen-figma`, and `@zseven-w/pen-renderer` to version `0.5.1-beta.1`. - Ensured consistency in dependency management across the project. --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: leinaldo <60176594+leinaldo@users.noreply.github.com>
117 lines
3.2 KiB
Bash
Executable file
117 lines
3.2 KiB
Bash
Executable file
#!/bin/bash
|
|
# Publish all @zseven-w packages to npm with auto-incrementing beta version.
|
|
#
|
|
# Usage:
|
|
# bun run publish:beta # auto-increment beta number
|
|
# bun run publish:beta 5 # force beta.5
|
|
#
|
|
# Publishes: pen-types → pen-core → pen-codegen, pen-figma → pen-renderer → pen-sdk → openpencil CLI
|
|
# All under the "beta" dist-tag, so `npm install` won't pick them up by default.
|
|
# Install with: npm install @zseven-w/openpencil@beta
|
|
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
BASE_VERSION=$(jq -r .version "$ROOT/package.json")
|
|
FORCE_NUM="${1:-}"
|
|
|
|
# Packages in topological order
|
|
PACKAGES=(
|
|
packages/pen-types
|
|
packages/pen-core
|
|
packages/pen-codegen
|
|
packages/pen-figma
|
|
packages/pen-renderer
|
|
packages/pen-sdk
|
|
apps/cli
|
|
)
|
|
|
|
# --- Determine beta number ---
|
|
if [ -n "$FORCE_NUM" ]; then
|
|
BETA_NUM="$FORCE_NUM"
|
|
else
|
|
# Query npm for the latest beta of this base version.
|
|
# npm view returns a string (1 version) or array (multiple), or errors (404) if not found.
|
|
RAW=$(npm view "@zseven-w/pen-types" versions --json 2>/dev/null || true)
|
|
LATEST=$(echo "$RAW" | jq -r --arg base "$BASE_VERSION" '
|
|
if type == "object" and .error then empty # npm 404 error object
|
|
elif type == "array" then
|
|
map(select(type == "string" and startswith($base + "-beta."))) | last // empty
|
|
elif type == "string" and startswith($base + "-beta.") then .
|
|
else empty
|
|
end
|
|
' 2>/dev/null || true)
|
|
|
|
if [ -n "$LATEST" ]; then
|
|
PREV_NUM=$(echo "$LATEST" | sed "s/${BASE_VERSION}-beta\.//")
|
|
BETA_NUM=$((PREV_NUM + 1))
|
|
else
|
|
BETA_NUM=0
|
|
fi
|
|
fi
|
|
|
|
BETA_VERSION="${BASE_VERSION}-beta.${BETA_NUM}"
|
|
echo "Publishing version: $BETA_VERSION"
|
|
echo ""
|
|
|
|
# --- Set beta version in all package.json files ---
|
|
MODIFIED_FILES=()
|
|
for pkg in "${PACKAGES[@]}"; do
|
|
f="$ROOT/$pkg/package.json"
|
|
if [ -f "$f" ]; then
|
|
# Backup original
|
|
cp "$f" "$f.bak"
|
|
MODIFIED_FILES+=("$f")
|
|
|
|
# Set version and replace workspace:* refs
|
|
jq --arg v "$BETA_VERSION" '
|
|
.version = $v |
|
|
if .dependencies then
|
|
.dependencies |= with_entries(
|
|
if .value == "workspace:*" then .value = $v else . end
|
|
)
|
|
else . end |
|
|
if .devDependencies then
|
|
.devDependencies |= with_entries(
|
|
if .value == "workspace:*" then .value = $v else . end
|
|
)
|
|
else . end
|
|
' "$f" > "$f.tmp" && mv "$f.tmp" "$f"
|
|
fi
|
|
done
|
|
|
|
# --- Restore on exit ---
|
|
cleanup() {
|
|
echo ""
|
|
echo "Restoring original package.json files..."
|
|
for f in "${MODIFIED_FILES[@]}"; do
|
|
if [ -f "$f.bak" ]; then
|
|
mv "$f.bak" "$f"
|
|
fi
|
|
done
|
|
echo "Done."
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
# --- Compile CLI ---
|
|
echo "Compiling CLI..."
|
|
(cd "$ROOT" && bun run cli:compile)
|
|
echo ""
|
|
|
|
# --- Verify CLI ---
|
|
node "$ROOT/apps/cli/dist/openpencil-cli.cjs" --version
|
|
echo ""
|
|
|
|
# --- Publish ---
|
|
for pkg in "${PACKAGES[@]}"; do
|
|
dir="$ROOT/$pkg"
|
|
name=$(jq -r .name "$dir/package.json")
|
|
echo "Publishing $name@$BETA_VERSION ..."
|
|
(cd "$dir" && npm publish --access public --tag beta) || echo " ⚠ Failed (may already exist)"
|
|
echo ""
|
|
done
|
|
|
|
echo "================================"
|
|
echo "Published: $BETA_VERSION"
|
|
echo "Install: npm install @zseven-w/openpencil@beta"
|
|
echo "================================"
|