Fixing workflow. #7
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: '🚀 Deploy Next.js Docker App' | |
on: | |
push: | |
branches: [main] | |
jobs: | |
build-and-deploy: | |
runs-on: self-hosted | |
name: '🐳 Build & Deploy' | |
steps: | |
- name: '🔍 Checkout Code' | |
uses: actions/checkout@v4 | |
# (Secrets and .env setup steps remain the same) | |
- name: '🔒 Verify Secrets Exist' | |
run: | | |
if [ -z "${{ secrets.GOOGLE_SERVICES_JSON_BASE64 }}" ]; then | |
echo "❌ Critical error: GOOGLE_SERVICES_JSON_BASE64 secret missing!" | |
exit 1 | |
fi | |
echo "✅ All secrets present" | |
- name: '📁 Create google-services.json' | |
run: | | |
echo "$GOOGLE_SERVICES_JSON_BASE64" | base64 --decode > google-services.json | |
echo "🔄 Validating JSON..." | |
if ! jq empty google-services.json; then | |
echo "❌ JSON validation failed!" | |
exit 1 | |
fi | |
env: | |
GOOGLE_SERVICES_JSON_BASE64: ${{ secrets.GOOGLE_SERVICES_JSON_BASE64 }} | |
- name: '⚙️ Create .env File' | |
run: | | |
echo "${{ secrets.ENV_FILE_CONTENT }}" > .env | |
echo "" >> .env | |
# ======================================================= | |
# 🐳 Docker Operations (This section is updated) | |
# ======================================================= | |
- name: '🚀 Build, Launch, and Update Services' | |
run: | | |
# Step 1: Ensure the Docker network exists. | |
if ! docker network ls | grep -q "codebuilder-net"; then | |
echo "Network 'codebuilder-net' not found. Creating it..." | |
docker network create codebuilder-net | |
else | |
echo "Network 'codebuilder-net' already exists. Skipping creation." | |
fi | |
# Step 2: Explicitly check and manage the database container. | |
# This avoids the 'docker compose up' conflict entirely. | |
DB_CONTAINER_NAME="codebuilder-postgres-db" | |
if [ $(docker ps -a -q -f name=^/${DB_CONTAINER_NAME}$) ]; then | |
# The container exists, check if it is running. | |
if [ $(docker ps -q -f name=^/${DB_CONTAINER_NAME}$) ]; then | |
echo "Database container '${DB_CONTAINER_NAME}' is already running." | |
else | |
# The container exists but is stopped, so start it. | |
echo "Database container '${DB_CONTAINER_NAME}' exists but is stopped. Starting it..." | |
docker start ${DB_CONTAINER_NAME} | |
fi | |
else | |
# The container does not exist, so create it for the first time. | |
echo "Database container '${DB_CONTAINER_NAME}' not found. Creating it..." | |
docker compose up -d db | |
fi | |
# Step 3: Wait for the database to be fully ready. | |
echo "Waiting for database to become available on localhost:5434..." | |
while ! nc -z localhost 5434; do | |
sleep 1 | |
done | |
echo "✅ Database is healthy and listening." | |
# Step 4: Build and deploy the webapp. | |
# This part remains the same as it correctly targets only the webapp. | |
echo "Building and deploying the webapp..." | |
docker compose up -d --build --force-recreate --no-deps webapp | |
- name: '🗑 Prune Old Docker Images' | |
if: always() | |
run: docker image prune -af |