Files
cim_summary/deploy.sh
Jon 6057d1d7fd 🔧 Fix authentication and document upload issues
## What was done:
 Fixed Firebase Admin initialization to use default credentials for Firebase Functions
 Updated frontend to use correct Firebase Functions URL (was using Cloud Run URL)
 Added comprehensive debugging to authentication middleware
 Added debugging to file upload middleware and CORS handling
 Added debug buttons to frontend for troubleshooting authentication
 Enhanced error handling and logging throughout the stack

## Current issues:
 Document upload still returns 400 Bad Request despite authentication working
 GET requests work fine (200 OK) but POST upload requests fail
 Frontend authentication is working correctly (valid JWT tokens)
 Backend authentication middleware is working (rejects invalid tokens)
 CORS is configured correctly and allowing requests

## Root cause analysis:
- Authentication is NOT the issue (tokens are valid, GET requests work)
- The problem appears to be in the file upload handling or multer configuration
- Request reaches the server but fails during upload processing
- Need to identify exactly where in the upload pipeline the failure occurs

## TODO next steps:
1. 🔍 Check Firebase Functions logs after next upload attempt to see debugging output
2. 🔍 Verify if request reaches upload middleware (look for '�� Upload middleware called' logs)
3. 🔍 Check if file validation is triggered (look for '🔍 File filter called' logs)
4. 🔍 Identify specific error in upload pipeline (multer, file processing, etc.)
5. 🔍 Test with smaller file or different file type to isolate issue
6. 🔍 Check if issue is with Firebase Functions file size limits or timeout
7. 🔍 Verify multer configuration and file handling in Firebase Functions environment

## Technical details:
- Frontend: https://cim-summarizer.web.app
- Backend: https://us-central1-cim-summarizer.cloudfunctions.net/api
- Authentication: Firebase Auth with JWT tokens (working correctly)
- File upload: Multer with memory storage for immediate GCS upload
- Debug buttons available in production frontend for troubleshooting
2025-07-31 16:18:53 -04:00

266 lines
6.9 KiB
Bash
Executable File

#!/bin/bash
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Configuration
PROJECT_ID="cim-summarizer"
REGION="us-central1"
BACKEND_SERVICE_NAME="cim-processor-backend"
FRONTEND_SERVICE_NAME="cim-processor-frontend"
# Function to print colored output
print_status() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Function to check if command exists
command_exists() {
command -v "$1" >/dev/null 2>&1
}
# Function to check prerequisites
check_prerequisites() {
print_status "Checking prerequisites..."
if ! command_exists gcloud; then
print_error "gcloud CLI is not installed. Please install it first."
exit 1
fi
if ! command_exists firebase; then
print_error "Firebase CLI is not installed. Please install it first."
exit 1
fi
if ! command_exists docker; then
print_warning "Docker is not installed. Cloud Run deployment will not be available."
fi
print_success "Prerequisites check completed"
}
# Function to authenticate with Google Cloud
authenticate_gcloud() {
print_status "Authenticating with Google Cloud..."
# Check if already authenticated
if gcloud auth list --filter=status:ACTIVE --format="value(account)" | grep -q .; then
print_success "Already authenticated with Google Cloud"
else
gcloud auth login
gcloud config set project $PROJECT_ID
print_success "Google Cloud authentication completed"
fi
}
# Function to deploy backend
deploy_backend() {
local deployment_type=$1
print_status "Deploying backend using $deployment_type..."
cd backend
case $deployment_type in
"firebase")
print_status "Building backend for Firebase Functions..."
npm run build
print_status "Deploying to Firebase Functions..."
firebase deploy --only functions
;;
"cloud-run")
if ! command_exists docker; then
print_error "Docker is required for Cloud Run deployment"
exit 1
fi
print_status "Building Docker image..."
docker build -t gcr.io/$PROJECT_ID/$BACKEND_SERVICE_NAME:latest .
print_status "Pushing Docker image to Container Registry..."
docker push gcr.io/$PROJECT_ID/$BACKEND_SERVICE_NAME:latest
print_status "Deploying to Cloud Run..."
gcloud run deploy $BACKEND_SERVICE_NAME \
--image gcr.io/$PROJECT_ID/$BACKEND_SERVICE_NAME:latest \
--region $REGION \
--platform managed \
--allow-unauthenticated \
--memory 4Gi \
--cpu 2 \
--timeout 300 \
--concurrency 80
;;
*)
print_error "Unknown deployment type: $deployment_type"
exit 1
;;
esac
cd ..
print_success "Backend deployment completed"
}
# Function to deploy frontend
deploy_frontend() {
print_status "Deploying frontend..."
cd frontend
print_status "Building frontend..."
npm run build
print_status "Deploying to Firebase Hosting..."
firebase deploy --only hosting
cd ..
print_success "Frontend deployment completed"
}
# Function to run tests
run_tests() {
print_status "Running tests..."
# Backend tests
cd backend
print_status "Running backend tests..."
npm test
cd ..
# Frontend tests
cd frontend
print_status "Running frontend tests..."
npm test
cd ..
print_success "All tests completed"
}
# Function to show usage
show_usage() {
echo "Usage: $0 [OPTIONS]"
echo ""
echo "Options:"
echo " -b, --backend TYPE Deploy backend (firebase|cloud-run|both)"
echo " -f, --frontend Deploy frontend"
echo " -t, --test Run tests before deployment"
echo " -a, --all Deploy everything (backend to Cloud Run + frontend)"
echo " -h, --help Show this help message"
echo ""
echo "Examples:"
echo " $0 -b firebase Deploy backend to Firebase Functions"
echo " $0 -b cloud-run Deploy backend to Cloud Run"
echo " $0 -f Deploy frontend to Firebase Hosting"
echo " $0 -a Deploy everything"
echo " $0 -t -b firebase Run tests and deploy backend to Firebase"
}
# Main script
main() {
local deploy_backend_type=""
local deploy_frontend=false
local run_tests_flag=false
# Parse command line arguments
while [[ $# -gt 0 ]]; do
case $1 in
-b|--backend)
deploy_backend_type="$2"
shift 2
;;
-f|--frontend)
deploy_frontend=true
shift
;;
-t|--test)
run_tests_flag=true
shift
;;
-a|--all)
deploy_backend_type="cloud-run"
deploy_frontend=true
shift
;;
-h|--help)
show_usage
exit 0
;;
*)
print_error "Unknown option: $1"
show_usage
exit 1
;;
esac
done
# If no options specified, show usage
if [[ -z "$deploy_backend_type" && "$deploy_frontend" == false ]]; then
show_usage
exit 1
fi
print_status "Starting deployment process..."
# Check prerequisites
check_prerequisites
# Authenticate with Google Cloud
authenticate_gcloud
# Run tests if requested
if [[ "$run_tests_flag" == true ]]; then
run_tests
fi
# Deploy backend
if [[ -n "$deploy_backend_type" ]]; then
deploy_backend "$deploy_backend_type"
fi
# Deploy frontend
if [[ "$deploy_frontend" == true ]]; then
deploy_frontend
fi
print_success "Deployment process completed successfully!"
# Show deployment URLs
if [[ -n "$deploy_backend_type" ]]; then
case $deploy_backend_type in
"firebase")
print_status "Backend deployed to Firebase Functions"
;;
"cloud-run")
print_status "Backend deployed to Cloud Run"
gcloud run services describe $BACKEND_SERVICE_NAME --region=$REGION --format="value(status.url)"
;;
esac
fi
if [[ "$deploy_frontend" == true ]]; then
print_status "Frontend deployed to Firebase Hosting"
firebase hosting:sites:list
fi
}
# Run main function with all arguments
main "$@"