Add npm package for bd with native binaries (bd-febc)
Implements @beads/bd npm package for easy installation in Node.js environments, especially Claude Code for Web. Features: - Automatic platform-specific binary download during postinstall - CLI wrapper that invokes native bd binary - Full feature parity with standalone bd - Works with SessionStart hooks for auto-installation Package structure: - bin/bd.js: Node.js CLI wrapper - scripts/postinstall.js: Downloads correct binary from GitHub releases - scripts/test.js: Verification tests - Comprehensive documentation (6 guides) Published to npm: https://www.npmjs.com/package/@beads/bd Benefits vs WASM: - Full SQLite support (no custom VFS) - Better performance (native vs WASM) - Simpler implementation and maintenance - All commands work identically Closes bd-febc, bd-be7a, bd-e2e6, bd-f282, bd-87a0, bd-b54c 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
171
npm-package/PUBLISHING.md
Normal file
171
npm-package/PUBLISHING.md
Normal file
@@ -0,0 +1,171 @@
|
||||
# Publishing @beads/bd to npm
|
||||
|
||||
This guide covers how to publish the @beads/bd package to npm.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
1. **npm account**: You need an npm account. Create one at https://www.npmjs.com/signup
|
||||
2. **@beads organization**: The package is scoped to `@beads`, so you need to either:
|
||||
- Create the @beads organization on npm (if it doesn't exist)
|
||||
- Be a member of the @beads organization with publish rights
|
||||
|
||||
## Setup
|
||||
|
||||
### 1. Login to npm
|
||||
|
||||
```bash
|
||||
npm login
|
||||
```
|
||||
|
||||
This will prompt for:
|
||||
- Username
|
||||
- Password
|
||||
- Email
|
||||
- OTP (if 2FA is enabled)
|
||||
|
||||
### 2. Verify authentication
|
||||
|
||||
```bash
|
||||
npm whoami
|
||||
```
|
||||
|
||||
Should output your npm username.
|
||||
|
||||
### 3. Create organization (if needed)
|
||||
|
||||
If the `@beads` organization doesn't exist:
|
||||
|
||||
```bash
|
||||
npm org create beads
|
||||
```
|
||||
|
||||
Or manually at: https://www.npmjs.com/org/create
|
||||
|
||||
## Publishing
|
||||
|
||||
### 1. Update version (if needed)
|
||||
|
||||
The version in `package.json` should match the beads release version.
|
||||
|
||||
```bash
|
||||
# Edit package.json manually or use npm version
|
||||
npm version patch # or minor, major
|
||||
```
|
||||
|
||||
### 2. Test the package
|
||||
|
||||
```bash
|
||||
# From the npm-package directory
|
||||
npm test
|
||||
|
||||
# Test installation locally
|
||||
npm link
|
||||
|
||||
# Verify the global install works
|
||||
bd version
|
||||
```
|
||||
|
||||
### 3. Publish to npm
|
||||
|
||||
For the first publish:
|
||||
|
||||
```bash
|
||||
# Publish as public (scoped packages are private by default)
|
||||
npm publish --access public
|
||||
```
|
||||
|
||||
For subsequent publishes:
|
||||
|
||||
```bash
|
||||
npm publish
|
||||
```
|
||||
|
||||
### 4. Verify publication
|
||||
|
||||
```bash
|
||||
# Check the package page
|
||||
open https://www.npmjs.com/package/@beads/bd
|
||||
|
||||
# Try installing it
|
||||
npm install -g @beads/bd
|
||||
bd version
|
||||
```
|
||||
|
||||
## Publishing Workflow
|
||||
|
||||
The typical workflow when a new beads version is released:
|
||||
|
||||
1. **Wait for GitHub release**: Ensure the new version is released on GitHub with binaries
|
||||
2. **Update package.json**: Update version to match the GitHub release
|
||||
3. **Test locally**: Run `npm install` and `npm test` to ensure binaries download correctly
|
||||
4. **Publish**: Run `npm publish --access public` (or just `npm publish` after first release)
|
||||
5. **Verify**: Install globally and test
|
||||
|
||||
## Automation (Future)
|
||||
|
||||
In the future, this could be automated with GitHub Actions:
|
||||
|
||||
```yaml
|
||||
# .github/workflows/publish-npm.yml
|
||||
name: Publish to npm
|
||||
on:
|
||||
release:
|
||||
types: [published]
|
||||
jobs:
|
||||
publish:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: '18'
|
||||
registry-url: 'https://registry.npmjs.org'
|
||||
- run: cd npm-package && npm publish --access public
|
||||
env:
|
||||
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### "EEXIST: package already published"
|
||||
|
||||
You're trying to publish a version that already exists. Bump the version:
|
||||
|
||||
```bash
|
||||
npm version patch
|
||||
npm publish
|
||||
```
|
||||
|
||||
### "ENEEDAUTH: need auth"
|
||||
|
||||
You're not logged in:
|
||||
|
||||
```bash
|
||||
npm login
|
||||
npm whoami # verify
|
||||
```
|
||||
|
||||
### "E403: forbidden"
|
||||
|
||||
You don't have permission to publish to @beads. Either:
|
||||
- Create the organization
|
||||
- Ask the organization owner to add you
|
||||
- Change the package name to something you own
|
||||
|
||||
### Binary download fails during postinstall
|
||||
|
||||
The version in package.json doesn't match a GitHub release, or the release doesn't have the required binary assets.
|
||||
|
||||
Check: https://github.com/steveyegge/beads/releases/v{VERSION}
|
||||
|
||||
## Version Sync
|
||||
|
||||
Keep these in sync:
|
||||
- `npm-package/package.json` version
|
||||
- GitHub release tag (e.g., `v0.21.5`)
|
||||
- Beads binary version
|
||||
|
||||
The postinstall script downloads binaries from:
|
||||
```
|
||||
https://github.com/steveyegge/beads/releases/download/v{VERSION}/beads_{VERSION}_{platform}_{arch}.{ext}
|
||||
```
|
||||
Reference in New Issue
Block a user