Release Date: 2026-10-11 New Documents: - CHANGELOG.md - Complete version history - RELEASE_v0.1.0_INSTALLATION_GUIDE.md - Installation guide for admin team - README.md - Project overview and quick start - build_release.sh - Automated build script Features: - ✅ Search pagination with "Load More" button - ✅ Library displays 118 files correctly - ✅ Scene VLM status visualization - ✅ Advanced Mode toggle - ✅ Complete architecture documentation Release Package: - tar.gz archive with all necessary files - Startup/stop scripts - Installation guide - Checksum verification For Admin Team: - See RELEASE_v0.1.0_INSTALLATION_GUIDE.md - Run ./build_release.sh to create package - Package includes: frontend, proxy, docs, scripts
366 lines
8.7 KiB
Bash
Executable File
366 lines
8.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Momentry Studio v0.1.0 - Release Build Script
|
|
# Purpose: Build production release package
|
|
# Usage: ./build_release.sh
|
|
|
|
set -e # Exit on error
|
|
|
|
echo "================================================================================"
|
|
echo " Momentry Studio v0.1.0 - Release Build"
|
|
echo "================================================================================"
|
|
echo ""
|
|
|
|
# Configuration
|
|
VERSION="0.1.0"
|
|
PROJECT_NAME="momentry-studio"
|
|
BUILD_DIR="release-build"
|
|
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Functions
|
|
log_info() {
|
|
echo -e "${GREEN}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_warn() {
|
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# Check prerequisites
|
|
check_prerequisites() {
|
|
log_info "Checking prerequisites..."
|
|
|
|
# Check Node.js
|
|
if ! command -v node &> /dev/null; then
|
|
log_error "Node.js not installed. Please install Node.js 18+"
|
|
exit 1
|
|
fi
|
|
log_info "Node.js: $(node --version)"
|
|
|
|
# Check npm
|
|
if ! command -v npm &> /dev/null; then
|
|
log_error "npm not installed"
|
|
exit 1
|
|
fi
|
|
log_info "npm: $(npm --version)"
|
|
|
|
# Check Rust
|
|
if ! command -v rustc &> /dev/null; then
|
|
log_error "Rust not installed. Please install Rust 1.70+"
|
|
exit 1
|
|
fi
|
|
log_info "Rust: $(rustc --version)"
|
|
|
|
# Check Cargo
|
|
if ! command -v cargo &> /dev/null; then
|
|
log_error "Cargo not installed"
|
|
exit 1
|
|
fi
|
|
log_info "Cargo: $(cargo --version)"
|
|
|
|
log_info "Prerequisites OK ✓"
|
|
echo ""
|
|
}
|
|
|
|
# Clean previous builds
|
|
clean_build() {
|
|
log_info "Cleaning previous builds..."
|
|
|
|
rm -rf dist
|
|
rm -rf src-tauri/target/release
|
|
rm -rf $BUILD_DIR
|
|
|
|
log_info "Clean completed ✓"
|
|
echo ""
|
|
}
|
|
|
|
# Install dependencies
|
|
install_deps() {
|
|
log_info "Installing dependencies..."
|
|
|
|
npm install
|
|
|
|
log_info "Dependencies installed ✓"
|
|
echo ""
|
|
}
|
|
|
|
# Build frontend
|
|
build_frontend() {
|
|
log_info "Building frontend..."
|
|
|
|
npm run build
|
|
|
|
if [ ! -d "dist" ]; then
|
|
log_error "Frontend build failed - dist/ not found"
|
|
exit 1
|
|
fi
|
|
|
|
log_info "Frontend built ✓"
|
|
log_info "Output: dist/"
|
|
ls -lh dist/
|
|
echo ""
|
|
}
|
|
|
|
# Build Rust proxy
|
|
build_proxy() {
|
|
log_info "Building Rust proxy..."
|
|
|
|
cd src-tauri
|
|
cargo build --release
|
|
cd ..
|
|
|
|
if [ ! -f "src-tauri/target/release/momentry-proxy" ]; then
|
|
log_error "Proxy build failed - binary not found"
|
|
exit 1
|
|
fi
|
|
|
|
log_info "Proxy built ✓"
|
|
log_info "Binary: src-tauri/target/release/momentry-proxy"
|
|
ls -lh src-tauri/target/release/momentry-proxy
|
|
echo ""
|
|
}
|
|
|
|
# Build Tauri desktop app (optional)
|
|
build_desktop() {
|
|
log_warn "Build Tauri desktop app? (y/n)"
|
|
read -t 10 -n 1 answer
|
|
|
|
if [[ $answer == "y" || $answer == "Y" ]]; then
|
|
log_info "Building Tauri desktop app..."
|
|
|
|
cargo tauri build
|
|
|
|
if [ -d "src-tauri/target/release/bundle" ]; then
|
|
log_info "Desktop app built ✓"
|
|
log_info "Output: src-tauri/target/release/bundle/"
|
|
ls -lh src-tauri/target/release/bundle/dmg/ 2>/dev/null || true
|
|
else
|
|
log_warn "Desktop app build may have failed"
|
|
fi
|
|
else
|
|
log_info "Skipping desktop app build"
|
|
fi
|
|
echo ""
|
|
}
|
|
|
|
# Create release package
|
|
create_package() {
|
|
log_info "Creating release package..."
|
|
|
|
mkdir -p $BUILD_DIR
|
|
|
|
# Package structure
|
|
PACKAGE_NAME="${PROJECT_NAME}-v${VERSION}-${TIMESTAMP}"
|
|
PACKAGE_DIR="${BUILD_DIR}/${PACKAGE_NAME}"
|
|
mkdir -p $PACKAGE_DIR
|
|
|
|
# Copy files
|
|
log_info "Copying files..."
|
|
|
|
# Frontend
|
|
cp -r dist $PACKAGE_DIR/
|
|
|
|
# Proxy binary
|
|
mkdir -p $PACKAGE_DIR/bin
|
|
cp src-tauri/target/release/momentry-proxy $PACKAGE_DIR/bin/
|
|
|
|
# Configuration files
|
|
cp .env $PACKAGE_DIR/ 2>/dev/null || log_warn "No .env file found"
|
|
cp package.json $PACKAGE_DIR/
|
|
cp package-lock.json $PACKAGE_DIR/ 2>/dev/null || true
|
|
|
|
# Documentation
|
|
cp README.md $PACKAGE_DIR/
|
|
cp CHANGELOG.md $PACKAGE_DIR/
|
|
cp RELEASE_v0.1.0_INSTALLATION_GUIDE.md $PACKAGE_DIR/INSTALLATION_GUIDE.md
|
|
cp AGENTS.md $PACKAGE_DIR/
|
|
|
|
# Directories
|
|
mkdir -p $PACKAGE_DIR/data/users
|
|
mkdir -p $PACKAGE_DIR/logs
|
|
|
|
# Create startup script
|
|
cat > $PACKAGE_DIR/start.sh << 'EOF'
|
|
#!/bin/bash
|
|
|
|
# Momentry Studio v0.1.0 - Startup Script
|
|
|
|
export MOMENTRY_API_KEY=muser_68600856036340bcafc01930eb4bd839_1774418104_97221b69
|
|
export MOMENTRY_DATA_DIR=$(pwd)/data/users
|
|
|
|
./bin/momentry-proxy > logs/proxy.log 2>&1 &
|
|
|
|
echo "Momentry Studio started on http://localhost:8888"
|
|
echo "Health check: curl http://localhost:8888/health"
|
|
EOF
|
|
chmod +x $PACKAGE_DIR/start.sh
|
|
|
|
# Create stop script
|
|
cat > $PACKAGE_DIR/stop.sh << 'EOF'
|
|
#!/bin/bash
|
|
|
|
pkill -f momentry-proxy
|
|
echo "Momentry Studio stopped"
|
|
EOF
|
|
chmod +x $PACKAGE_DIR/stop.sh
|
|
|
|
# Create tar.gz
|
|
log_info "Creating tar.gz archive..."
|
|
cd $BUILD_DIR
|
|
tar -czf ${PACKAGE_NAME}.tar.gz ${PACKAGE_NAME}
|
|
cd ..
|
|
|
|
# Calculate checksum
|
|
log_info "Calculating checksum..."
|
|
shasum -a 256 ${BUILD_DIR}/${PACKAGE_NAME}.tar.gz > ${BUILD_DIR}/${PACKAGE_NAME}.tar.gz.sha256
|
|
|
|
log_info "Package created ✓"
|
|
log_info "Location: ${BUILD_DIR}/${PACKAGE_NAME}.tar.gz"
|
|
log_info "Size: $(du -h ${BUILD_DIR}/${PACKAGE_NAME}.tar.gz | cut -f1)"
|
|
log_info "Checksum: ${BUILD_DIR}/${PACKAGE_NAME}.tar.gz.sha256"
|
|
echo ""
|
|
}
|
|
|
|
# Verify package
|
|
verify_package() {
|
|
log_info "Verifying package..."
|
|
|
|
PACKAGE_NAME="${PROJECT_NAME}-v${VERSION}-${TIMESTAMP}"
|
|
|
|
# Check tar.gz
|
|
if [ ! -f "${BUILD_DIR}/${PACKAGE_NAME}.tar.gz" ]; then
|
|
log_error "Package not found: ${BUILD_DIR}/${PACKAGE_NAME}.tar.gz"
|
|
exit 1
|
|
fi
|
|
|
|
# Verify checksum
|
|
log_info "Verifying checksum..."
|
|
cd ${BUILD_DIR}
|
|
shasum -a 256 -c ${PACKAGE_NAME}.tar.gz.sha256
|
|
cd ..
|
|
|
|
# List package contents
|
|
log_info "Package contents:"
|
|
tar -tzf ${BUILD_DIR}/${PACKAGE_NAME}.tar.gz | head -20
|
|
|
|
log_info "Verification completed ✓"
|
|
echo ""
|
|
}
|
|
|
|
# Generate release notes
|
|
generate_notes() {
|
|
log_info "Generating release notes..."
|
|
|
|
cat > ${BUILD_DIR}/RELEASE_NOTES.md << EOF
|
|
# Momentry Studio v${VERSION} Release Notes
|
|
|
|
**Release Date**: $(date +"%Y-%m-%d")
|
|
**Build**: ${TIMESTAMP}
|
|
|
|
## Package Contents
|
|
|
|
- \`dist/\` - Compiled frontend (Vue 3)
|
|
- \`bin/momentry-proxy\` - Rust proxy binary
|
|
- \`data/users/\` - SQLite database directory
|
|
- \`logs/\` - Log files directory
|
|
- \`start.sh\` - Startup script
|
|
- \`stop.sh\` - Stop script
|
|
- \`README.md\` - Project overview
|
|
- \`CHANGELOG.md\` - Version history
|
|
- \`INSTALLATION_GUIDE.md\` - Installation instructions
|
|
- \`AGENTS.md\` - Developer guide
|
|
|
|
## Installation
|
|
|
|
1. Extract the archive
|
|
2. Configure \`.env\` file
|
|
3. Run \`./start.sh\`
|
|
4. Access: http://localhost:8888
|
|
|
|
## Prerequisites
|
|
|
|
- Node.js 18+
|
|
- Rust 1.70+
|
|
- PostgreSQL 14+
|
|
- Qdrant 1.6+
|
|
- Momentry Core API (port 3002)
|
|
- MarkBase API (port 11438)
|
|
|
|
## Verification
|
|
|
|
\`\`\`bash
|
|
# Start
|
|
./start.sh
|
|
|
|
# Check health
|
|
curl http://localhost:8888/health
|
|
|
|
# Stop
|
|
./stop.sh
|
|
\`\`\`
|
|
|
|
## Features
|
|
|
|
- ✅ Search pagination with "Load More" button
|
|
- ✅ 118 files display in Library
|
|
- ✅ Scene VLM status visualization
|
|
- ✅ Advanced Mode toggle
|
|
- ✅ All search modes supported
|
|
|
|
## Known Issues
|
|
|
|
- Visual Search API does not support \`offset\` parameter
|
|
- Agent Search fallback to Semantic Search
|
|
- WebSocket not implemented (using polling)
|
|
|
|
## Support
|
|
|
|
- Issues: https://github.com/anomalyco/momentry_studio/issues
|
|
- Internal: http://localhost:3000/admin/momentry_studio
|
|
EOF
|
|
|
|
log_info "Release notes generated: ${BUILD_DIR}/RELEASE_NOTES.md"
|
|
echo ""
|
|
}
|
|
|
|
# Main
|
|
main() {
|
|
check_prerequisites
|
|
clean_build
|
|
install_deps
|
|
build_frontend
|
|
build_proxy
|
|
build_desktop
|
|
create_package
|
|
verify_package
|
|
generate_notes
|
|
|
|
echo "================================================================================"
|
|
echo " ✅ Build Completed"
|
|
echo "================================================================================"
|
|
echo ""
|
|
echo "Package: ${BUILD_DIR}/${PROJECT_NAME}-v${VERSION}-${TIMESTAMP}.tar.gz"
|
|
echo "Size: $(du -h ${BUILD_DIR}/${PROJECT_NAME}-v${VERSION}-${TIMESTAMP}.tar.gz | cut -f1)"
|
|
echo "Checksum: ${BUILD_DIR}/${PROJECT_NAME}-v${VERSION}-${TIMESTAMP}.tar.gz.sha256"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo "1. Verify prerequisites on target server"
|
|
echo "2. Copy package to target server"
|
|
echo "3. Extract and configure"
|
|
echo "4. Run ./start.sh"
|
|
echo "5. Verify health check"
|
|
echo ""
|
|
}
|
|
|
|
# Run main
|
|
main |