Files
momentry_studio/build_release.sh
Momentry Studio e7bab6c4c6 release: v0.1.0 - Production Release
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
2026-10-12 09:40:44 +08:00

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