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
This commit is contained in:
366
build_release.sh
Executable file
366
build_release.sh
Executable file
@@ -0,0 +1,366 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user