Publish ÆtherLight releases to npm and GitHub. Use when the user wants to publish, release, or deploy a new version. Automatically handles version bumping, compilation, verification, and publishing.
Automates the complete release process for ÆtherLight:
Use this skill when the user:
Verify proper Git workflow:
master branch after PR merge1. Create PR from feature branch
2. Get review and merge to master
3. Checkout master and pull latest
4. Then run publish script
Ask for version type (if not specified):
Which version type?
- patch: Bug fixes (0.13.20 → 0.13.21)
- minor: New features (0.13.20 → 0.14.0)
- major: Breaking changes (0.13.20 → 1.0.0)
Run the automated publishing script:
node scripts/publish-release.js [patch|minor|major]
Monitor output - The script will (IN THIS ORDER):
aelor)Report completion:
✅ Version X.X.X published successfully!
- npm: https://www.npmjs.com/package/aetherlight
- GitHub: https://github.com/AEtherlight-ai/lumina/releases/tag/vX.X.X
If the script fails, help the user:
Not logged in to npm:
npm login
# Username: aelor
GitHub CLI not installed:
# Windows (winget)
winget install --id GitHub.cli
# Mac (homebrew)
brew install gh
Not logged in to GitHub CLI:
gh auth login
# Follow prompts to authenticate
Uncommitted git changes:
git status
# User needs to commit or stash changes
Compilation errors: Show the TypeScript errors from the output
VSIX not created: Check the package.json scripts
Desktop app build fails:
cd products/lumina-desktop
npm run tauri build
# Check for Rust compilation errors or missing dependencies
Installers not found after build:
# Desktop installers should be at:
find ./products/lumina-desktop/src-tauri/target/release/bundle -name "*.exe" -o -name "*.msi"
# Copy to vscode-lumina directory:
cp ./products/lumina-desktop/src-tauri/target/release/bundle/msi/*.msi ./vscode-lumina/
cp ./products/lumina-desktop/src-tauri/target/release/bundle/nsis/*.exe ./vscode-lumina/
GitHub release creation fails: This is CRITICAL - users install from GitHub releases. The script will:
CRITICAL: Desktop app installers (.exe and .msi for Windows) MUST be included in EVERY GitHub release.
Why:
npm install -g aetherlightDesktop installers are:
vscode-lumina/ directoryCurrent files:
vscode-lumina/Lumina_0.1.0_x64-setup.exe # 4.0MB - Windows installer (NSIS)
vscode-lumina/Lumina_0.1.0_x64_en-US.msi # 5.8MB - Windows installer (MSI)
gitignore rules (added in v0.16.7):
# Desktop installers (binary files should not be in git)
*.exe
*.msi
*.dmg
*.deb
*.AppImage
Automated process (scripts/publish-release.js lines 355-428):
Find installers (lines 355-375):
const exeFile = path.join(vscodeLuminaPath, 'Lumina_0.1.0_x64-setup.exe');
const msiFile = path.join(vscodeLuminaPath, 'Lumina_0.1.0_x64_en-US.msi');
if (fs.existsSync(exeFile)) { desktopFiles.push(exeFile); }
if (fs.existsSync(msiFile)) { desktopFiles.push(msiFile); }
Warn if missing (lines 370-375):
⚠️ Warning: No desktop installers found
Desktop app will not be available for this release
Attach to GitHub release (lines 377-393):
// Create release with .vsix and desktop installers
const allFiles = [`"vscode-lumina/aetherlight-${newVersion}.vsix"`, ...desktopFiles].join(' ');
exec(`gh release create v${newVersion} --notes-file .release-notes.tmp ${allFiles}`);
Verify upload (lines 395-428):
// Check for .vsix file (CRITICAL)
const vsixCheck = execSilent(`gh release view v${newVersion} --json assets -q '.assets[] | select(.name | endswith(".vsix"))'`);
// Check for desktop installers (WARNING if missing)
const hasExe = allAssets.includes('Lumina_0.1.0_x64-setup.exe');
const hasMsi = allAssets.includes('Lumina_0.1.0_x64_en-US.msi');
BEFORE running publish script, verify installers exist:
# Check if installers are present on disk
ls -lh vscode-lumina/Lumina*.exe vscode-lumina/Lumina*.msi
# Expected output:
# -rwxr-xr-x 1 user 4.0M Oct 30 vscode-lumina/Lumina_0.1.0_x64-setup.exe
# -rw-r--r-- 1 user 5.8M Oct 30 vscode-lumina/Lumina_0.1.0_x64_en-US.msi
If files are missing:
If installers are missing and need to be rebuilt:
# Navigate to desktop app directory
cd products/lumina-desktop
# Install dependencies (if needed)
npm install
# Build desktop app for Windows
npm run tauri build
# Installers will be generated at:
# - src-tauri/target/release/bundle/nsis/*.exe
# - src-tauri/target/release/bundle/msi/*.msi
# Copy to vscode-lumina directory for publish script
cp src-tauri/target/release/bundle/nsis/*.exe ../../vscode-lumina/
cp src-tauri/target/release/bundle/msi/*.msi ../../vscode-lumina/
# Verify files are in place
ls -lh ../../vscode-lumina/Lumina*.exe ../../vscode-lumina/Lumina*.msi
Important: Desktop app version (0.1.0) is INDEPENDENT of VS Code extension version (0.16.7).
Why:
Current versions:
Publish script behavior:
vscode-lumina/ directoryThis means:
v0.16.7 git hygiene fix:
Pattern: Binary artifacts belong in releases, NOT in git.
ALWAYS use the automated script (scripts/publish-release.js)
NEVER manually run individual publish steps - this caused the v0.13.20 bug where users saw wrong versions after updating.
Why the script is critical:
scripts/publish-release.js - The automation scriptscripts/bump-version.js - Version synchronization.claude/commands/publish.md - User-invoked commandPUBLISHING.md - Publishing documentationUPDATE_FIX_SUMMARY.md - Why we use this approachvscode-lumina/.npmignore - Excludes binaries from npm packageproducts/lumina-desktop/ - Desktop app source (Tauri + Rust)Issue: npm showed 0.13.26, GitHub release had v0.13.28, auto-update didn't work Cause: Automated script was bypassed - manual version bump, manual git tag, manual GitHub release Result: TypeScript compilation skipped, npm publish skipped, all verification skipped Fix: v0.13.29 published using complete automated process with desktop installers
Issue: npm publish failed with "413 Payload Too Large" (246MB) Cause: All old .vsix files (0.13.11-0.13.28) included in npm package Fix: Created .npmignore to exclude *.vsix, *.exe, *.msi files Result: Package size reduced to 251KB (1000x smaller)
Issue: Users couldn't install or update - "No matching version found for aetherlight-analyzer@^0.13.29" Cause: Publish script only published main package, not sub-packages (analyzer, SDK, node bindings) Impact:
scripts/publish-release.js:270-322Issue: Automated script failed, requiring manual bypass to publish Cause: Three automation gaps exposed by package architecture changes (scoped → unscoped) Impact: Manual bypass required (2 hours), violates Pattern-PUBLISH-002
Three Automation Failures:
@aetherlight/* after package renameManual Bypass Process (Pattern-PUBLISH-002 compliant):
Fix In Progress: Sprint Task POST-005
Files Created:
scripts/pre-publish-check.js - 7 validation checks (Pattern-PUBLISH-004)internal/sprints/ACTIVE_SPRINT.toml - POST-005.claude/CLAUDE.md - Lines 1649-1752Status: TASK CREATED - Fix scheduled in current sprint
Estimated completion: 3-4 hours implementation
See: .claude/CLAUDE.md Known Issues section for full details
Key lesson: ALWAYS use the automated script. Manual steps WILL cause bugs.