name: build-deploy-junohub-ec2 env: REMOTE_DIR: /home/JUNO on: workflow_dispatch: push: branches: - main paths-ignore: - "*.md" - ".gitignore" - "docs/**" jobs: deploy: runs-on: ubuntu-22.04 steps: - name: Checkout code uses: actions/checkout@v4 - name: Create deployment zip run: | zip -r deploy.zip . \ -x ".git/*" \ ".github/*" \ "node_modules/*" \ ".next/*" \ ".turbo/*" \ "coverage/*" \ "docker/*" - name: Setup SSH key run: | echo "${{ secrets.EC2_SSH_KEY }}" | tr -d '\r' > ssh_key.pem chmod 400 ssh_key.pem - name: Copy deployment zip to EC2 run: | ssh -i ssh_key.pem -o StrictHostKeyChecking=no ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} "mkdir -p '${{ env.REMOTE_DIR }}'" scp -i ssh_key.pem -o StrictHostKeyChecking=no deploy.zip ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }}:${{ env.REMOTE_DIR }}/deploy.zip - name: Deploy on EC2 with docker compose run: | ssh -i ssh_key.pem -o StrictHostKeyChecking=no ${{ secrets.EC2_USER }}@${{ secrets.EC2_HOST }} << 'ENDSSH' set -e cd ${{ env.REMOTE_DIR }} # Repair bad state from previous deploys where this path became a directory. if [ -d "./prisma/init-pgvector.sql" ]; then rm -rf "./prisma/init-pgvector.sql" fi # Unpack latest code snapshot over deploy directory unzip -oq deploy.zip -d . rm -f deploy.zip # Recreate .env from secret for runtime values cat > .env << 'ENVFILE' ${{ secrets.EC2_ENV }} ENVFILE # Build and run services from current source docker compose -f docker-compose.yml --env-file .env up -d --build --force-recreate --remove-orphans # Ensure pgvector extension exists for Prisma vector type docker compose -f docker-compose.yml --env-file .env exec -T db sh -lc "psql -U \"\${POSTGRES_USER:-postgres}\" -d \"\${POSTGRES_DB:-dropshipping}\" -c \"CREATE EXTENSION IF NOT EXISTS vector;\"" docker compose -f docker-compose.yml --env-file .env ps ENDSSH - name: Cleanup local artifacts if: always() run: | rm -f ssh_key.pem rm -f deploy.zip