fix(release): publish split packages

This commit is contained in:
Danila Poyarkov 2026-06-30 11:05:28 +03:00
parent f787486432
commit 58dab31c41
3 changed files with 40 additions and 13 deletions

View file

@ -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

View file

@ -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'] }

View file

@ -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()