Skip to content

Fix OAuth login - Update servlets to use application.properties inste… #11

Fix OAuth login - Update servlets to use application.properties inste…

Fix OAuth login - Update servlets to use application.properties inste… #11

Workflow file for this run

name: Deploy to Oracle Cloud
on:
push:
branches: [ main ]
workflow_dispatch:
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up JDK 21
uses: actions/setup-java@v3
with:
java-version: '21'
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: mvn clean package -DskipTests
- name: Deploy to Oracle Cloud
env:
PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
HOST: ${{ secrets.HOST }}
USER: ${{ secrets.USER }}
run: |
set -euo pipefail
# Create SSH directory
mkdir -p ~/.ssh
# Add private key safely
printf '%s\n' "$PRIVATE_KEY" > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key
# Add host to known_hosts
ssh-keyscan -H $HOST >> ~/.ssh/known_hosts
# Ensure WAR exists
if [ ! -f target/clippr.war ]; then
echo "WAR not found: target/clippr.war"
exit 1
fi
echo "WAR file found, size: $(du -h target/clippr.war | cut -f1)"
# Copy WAR file to server
echo "Uploading WAR file to server..."
scp -i ~/.ssh/deploy_key target/clippr.war $USER@$HOST:/tmp/clippr.war
echo "Upload complete"
# Deploy on server
echo "Deploying application..."
ssh -i ~/.ssh/deploy_key $USER@$HOST << 'ENDSSH'
set -euo pipefail
echo "Stopping Tomcat..."
sudo systemctl stop tomcat || true
sleep 3
# Backup current deployment
if [ -f /opt/tomcat/webapps/ROOT.war ]; then
echo "Backing up previous deployment..."
sudo cp /opt/tomcat/webapps/ROOT.war /opt/tomcat/webapps/ROOT.war.backup.$(date +%Y%m%d_%H%M%S)
fi
# Remove old deployment completely
echo "Cleaning old deployment..."
sudo rm -rf /opt/tomcat/webapps/ROOT
sudo rm -f /opt/tomcat/webapps/ROOT.war
# Clean Tomcat work directory (important!)
sudo rm -rf /opt/tomcat/work/Catalina/localhost/ROOT
# Deploy new WAR as ROOT.war
echo "Deploying new WAR file as ROOT..."
sudo cp /tmp/clippr.war /opt/tomcat/webapps/ROOT.war
sudo chown tomcat:tomcat /opt/tomcat/webapps/ROOT.war
# Clean up temp
rm /tmp/clippr.war
# Start Tomcat
echo "Starting Tomcat..."
sudo systemctl start tomcat
# Wait for Tomcat to start
echo "Waiting for Tomcat to start..."
sleep 10
# Check Tomcat status
if sudo systemctl is-active --quiet tomcat; then
echo "Tomcat is running"
else
echo "Tomcat failed to start"
sudo systemctl status tomcat --no-pager
exit 1
fi
ENDSSH
echo "Deployment commands completed"
- name: Verify Deployment
env:
HOST: ${{ secrets.HOST }}
USER: ${{ secrets.USER }}
PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
run: |
set -euo pipefail
echo "Verifying deployment..."
# SSH Key Setup
mkdir -p ~/.ssh
printf '%s\n' "$PRIVATE_KEY" > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key
ssh-keyscan -H $HOST >> ~/.ssh/known_hosts
# Use a temporary file to capture the remote script's output (including the successful messages)
REMOTE_OUTPUT=$(mktemp)
# Execute SSH command:
# -qT: Quiet mode to suppress MOTD/banner; Disable pseudo-terminal.
# 2>&1 | tee ${REMOTE_OUTPUT}: Pipes ALL output (stdout and stderr) to both the console AND the temp file.
ssh -qT -i ~/.ssh/deploy_key $USER@$HOST 2>&1 | tee ${REMOTE_OUTPUT} << 'ENDSSH'
set -euo pipefail
echo "Waiting for application to deploy (this can take up to 2 minutes)..."
MAX_WAIT=120 # 2 minutes total
ELAPSED=0
while [ $ELAPSED -lt $MAX_WAIT ]; do
# Check multiple indicators of successful deployment
# 1. Check if WAR file exists
if [ ! -f /opt/tomcat/webapps/ROOT.war ]; then
echo "ROOT.war file missing from webapps!"
exit 1
fi
# 2. Check if directory was exploded OR if application is responding
# We use 2>/dev/null here to suppress the error from ls if ROOT doesn't exist yet
if sudo ls -d /opt/tomcat/webapps/ROOT 2>/dev/null; then
echo "Application directory found (ROOT)"
# 3. Check if application is actually responding
if curl -s -o /dev/null -w "%{http_code}" http://localhost:8080/ | grep -q "200\|302"; then
echo "Application is responding at root context!"
echo "Deployment verified successfully!"
exit 0
else
echo "Directory exists but app not responding yet, waiting..."
fi
else
echo "Waiting for ROOT.war to explode... ($ELAPSED/${MAX_WAIT}s)"
fi
sleep 5
ELAPSED=$((ELAPSED + 5))
done
# Timeout reached
echo "Deployment verification timed out after ${MAX_WAIT} seconds"
echo ""
echo "Diagnostic information:"
echo "--- Tomcat Status ---"
sudo systemctl status tomcat --no-pager || true
echo ""
echo "--- Webapps Directory ---"
sudo ls -lah /opt/tomcat/webapps/ || true
echo ""
echo "--- Recent Tomcat Logs ---"
sudo tail -50 /opt/tomcat/logs/catalina.out || true
exit 1
ENDSSH
# Capture the exit status of the SSH command immediately
STATUS=$?
# Clean up the temp file (the tee command above already printed the output)
# rm ${REMOTE_OUTPUT} # This line is often unnecessary if tee is used correctly, removed for simplicity
# Now, evaluate the clean exit status
if [ $STATUS -eq 0 ]; then
echo "Verification PASSED - Application deployed successfully!"
else
echo "Verification FAILED: Remote check returned exit code ${STATUS}."
exit 1 # Fail the job if verification fails
fi