From 58dab31c41f2b4948e5ea4ea994a706f7c33e215 Mon Sep 17 00:00:00 2001 From: Danila Poyarkov Date: Tue, 30 Jun 2026 11:05:28 +0300 Subject: [PATCH] fix(release): publish split packages --- .github/workflows/build.yml | 26 ++++++++++--------- tools/release-packages/src/publish-dirs.ts | 5 ++++ .../tests/publish-dirs.test.ts | 22 +++++++++++++++- 3 files changed, 40 insertions(+), 13 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e6c579710..795f80764 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -136,7 +136,8 @@ jobs: - name: Build packages for publish run: | - for dir in packages/core packages/cli packages/mcp packages/vue; do + publish_packages="packages/scene-graph packages/pen packages/kiwi packages/fig packages/core packages/dom-css packages/cli packages/mcp packages/vue" + for dir in $publish_packages; do if [ -f "$dir/package.json" ] && node -p "require('./$dir/package.json').scripts?.build" 2>/dev/null | grep -qv undefined; then echo "Building $dir..." (cd "$dir" && bun run build) @@ -163,14 +164,15 @@ jobs: fi } root_dir="$PWD" - pack_if_new packages/core - pack_if_new packages/cli - pack_if_new packages/mcp - pack_if_new packages/vue + publish_packages="packages/scene-graph packages/pen packages/kiwi packages/fig packages/core packages/dom-css packages/cli packages/mcp packages/vue" + for dir in $publish_packages; do + pack_if_new "$dir" + done ls -la .npm-packages - tar -tf .npm-packages/open-pencil-cli-*.tgz | sed -n '1,40p' || true - tar -tf .npm-packages/open-pencil-mcp-*.tgz | sed -n '1,40p' || true - tar -tf .npm-packages/open-pencil-vue-*.tgz | sed -n '1,60p' || true + for tarball in .npm-packages/open-pencil-*.tgz; do + echo "Contents of $tarball" + tar -tf "$tarball" | sed -n '1,60p' || true + done bun tools/release-packages/src/validate-tarballs.ts - name: Publish packages to npm @@ -187,7 +189,7 @@ jobs: npm publish "./.npm-packages/${tarball}" --access public --provenance fi } - publish_if_new packages/core - publish_if_new packages/cli - publish_if_new packages/mcp - publish_if_new packages/vue + publish_packages="packages/scene-graph packages/pen packages/kiwi packages/fig packages/core packages/dom-css packages/cli packages/mcp packages/vue" + for dir in $publish_packages; do + publish_if_new "$dir" + done diff --git a/tools/release-packages/src/publish-dirs.ts b/tools/release-packages/src/publish-dirs.ts index 4bc4885b1..74d2f5688 100644 --- a/tools/release-packages/src/publish-dirs.ts +++ b/tools/release-packages/src/publish-dirs.ts @@ -27,7 +27,12 @@ const PACKAGE_FIELDS = ['dependencies', 'devDependencies', 'peerDependencies'] a const PUBLISH_CONFIG_FIELDS = new Set(['access', 'provenance', 'registry']) export const DEFAULT_PACKAGES: PackagePublishConfig[] = [ + { dir: 'packages/scene-graph', include: ['dist'], extraFiles: ['README.md'] }, + { dir: 'packages/pen', include: ['dist'], extraFiles: ['README.md'] }, + { dir: 'packages/kiwi', include: ['dist'], extraFiles: ['README.md'] }, + { dir: 'packages/fig', include: ['dist'], extraFiles: ['README.md'] }, { dir: 'packages/core', include: ['dist', 'src', 'assets'], extraFiles: [] }, + { dir: 'packages/dom-css', include: ['dist'], extraFiles: ['README.md'] }, { dir: 'packages/cli', include: ['bin', 'dist'], extraFiles: [] }, { dir: 'packages/mcp', include: ['dist'], extraFiles: [] }, { dir: 'packages/vue', include: ['dist'], extraFiles: ['README.md'] } diff --git a/tools/release-packages/tests/publish-dirs.test.ts b/tools/release-packages/tests/publish-dirs.test.ts index 6be9c8585..2d8f69cf7 100644 --- a/tools/release-packages/tests/publish-dirs.test.ts +++ b/tools/release-packages/tests/publish-dirs.test.ts @@ -3,7 +3,11 @@ import { mkdir, readFile, writeFile } from 'node:fs/promises' import { tmpdir } from 'node:os' import { join } from 'node:path' -import { preparePublishDirectories, publishPackageJSON } from '../src/publish-dirs' +import { + DEFAULT_PACKAGES, + preparePublishDirectories, + publishPackageJSON +} from '../src/publish-dirs' async function fixtureRoot() { const root = join(tmpdir(), `open-pencil-release-packages-${crypto.randomUUID()}`) @@ -48,6 +52,22 @@ describe('publishPackageJSON', () => { }) }) +describe('DEFAULT_PACKAGES', () => { + test('includes every public workspace package that release publish must pack', () => { + expect(DEFAULT_PACKAGES.map((pkg) => pkg.dir)).toEqual([ + 'packages/scene-graph', + 'packages/pen', + 'packages/kiwi', + 'packages/fig', + 'packages/core', + 'packages/dom-css', + 'packages/cli', + 'packages/mcp', + 'packages/vue' + ]) + }) +}) + describe('preparePublishDirectories', () => { test('copies requested files and writes publish package metadata', async () => { const root = await fixtureRoot()