ruvector/npm/core/test-native.mjs
rUv eefcc5322b feat: Add multi-platform GitHub Actions workflow for native module builds
Phase 2: Multi-Platform Native Builds

This commit adds comprehensive GitHub Actions CI/CD for building native
NAPI modules across all major platforms:

 Features:
- GitHub Actions workflow with 5-platform matrix build:
  - Linux (x64, ARM64)
  - macOS (x64 Intel, ARM64 Apple Silicon)
  - Windows (x64)
- Parallel builds complete in 7-10 minutes
- Automated artifact uploads and publishing
- Platform-specific npm packages with smart detection

📦 Package Structure:
- @ruvector/core - Main package with platform detection
- @ruvector/core-{platform} - Platform-specific binaries
- Smart loader with automatic platform selection
- Optional dependencies ensure minimal install size

🔧 Developer Tools:
- scripts/publish-platforms.js - Automated publishing
- Comprehensive TypeScript definitions
- Smoke tests for each platform
- Local build support with napi build

📚 Documentation:
- docs/BUILD_PROCESS.md - Complete build guide
- docs/PHASE2_MULTIPLATFORM_COMPLETE.md - Phase summary
- README for @ruvector/core package
- Troubleshooting and cross-compilation guides

🚀 Publishing Workflow:
1. Tag release (git tag v0.1.1)
2. Push to GitHub
3. CI builds all platforms
4. Publishes platform packages
5. Publishes main packages

Next: Phase 3 - WASM support with architectural refactoring

🤖 Generated with Claude Code
2025-11-21 13:19:13 +00:00

77 lines
2.1 KiB
JavaScript

/**
* Test script to verify native module loads correctly
*/
import ruvector from './dist/index.js';
console.log('=== Ruvector Native Module Test ===\n');
try {
// Test 1: Load module
console.log('✓ Module imported successfully');
console.log('Available exports:', Object.keys(ruvector));
// Test 2: Get version
console.log('\n--- Version Info ---');
console.log('Version:', ruvector.version());
// Test 3: Hello function
console.log('\n--- Hello Test ---');
console.log(ruvector.hello());
// Test 4: Create VectorDB instance
console.log('\n--- VectorDB Creation ---');
const db = ruvector.VectorDB.withDimensions(384);
console.log('✓ VectorDB created with 384 dimensions');
// Test 5: Check database is empty
console.log('\n--- Database Status ---');
const isEmpty = await db.isEmpty();
console.log('Database is empty:', isEmpty);
const len = await db.len();
console.log('Database length:', len);
// Test 6: Insert a vector
console.log('\n--- Insert Vector ---');
const testVector = new Float32Array(384).fill(0.1);
const id = await db.insert({
vector: testVector,
});
console.log('✓ Inserted vector with ID:', id);
const newLen = await db.len();
console.log('Database length after insert:', newLen);
// Test 7: Search
console.log('\n--- Search Test ---');
const queryVector = new Float32Array(384).fill(0.15);
const results = await db.search({
vector: queryVector,
k: 10
});
console.log('✓ Search completed');
console.log('Found', results.length, 'results');
if (results.length > 0) {
console.log('First result:', {
id: results[0].id,
score: results[0].score
});
}
// Test 8: Get vector
console.log('\n--- Get Vector Test ---');
const retrieved = await db.get(id);
if (retrieved) {
console.log('✓ Retrieved vector with ID:', retrieved.id);
console.log('Vector length:', retrieved.vector.length);
}
console.log('\n=== ✅ All tests passed! ===\n');
process.exit(0);
} catch (error) {
console.error('\n❌ Test failed:', error.message);
console.error(error.stack);
process.exit(1);
}