Skip to content

idea like solved

idea like solved #45

Workflow file for this run

name: Build and Deploy to EC2
on:
push:
branches: [prod]
permissions:
contents: read
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Bun
uses: oven-sh/setup-bun@v1
- name: Create environment files
run: |
# Create .env file with all secrets
touch .env
echo "${{ secrets.ENV_FILE }}" > .env
# Explicitly create .env.production for Next.js
touch .env.production
echo "NEXT_PUBLIC_GOOGLE_CLIENT_ID=${{ secrets.NEXT_PUBLIC_GOOGLE_CLIENT_ID }}" >> .env.production
echo "NEXT_PUBLIC_API_BASE_URL=${{ secrets.NEXT_PUBLIC_API_BASE_URL }}" >> .env.production
# Debug - check if env vars are set (will be masked in logs)
echo "Checking if NEXT_PUBLIC_GOOGLE_CLIENT_ID is set: ${{ secrets.NEXT_PUBLIC_GOOGLE_CLIENT_ID != '' }}"
- name: Install dependencies
run: bun install
- name: Build Next.js app
env:
NEXT_PUBLIC_GOOGLE_CLIENT_ID: ${{ secrets.NEXT_PUBLIC_GOOGLE_CLIENT_ID }}
NEXT_PUBLIC_API_BASE_URL: ${{ secrets.NEXT_PUBLIC_API_BASE_URL }}
run: |
# First run the environment checker
bun check-env.js
# Then build the app with environment variables
bun run build
- name: Copy files to EC2
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_SSH_KEY }}
source: ".next,public,package.json,ecosystem.config.js,node_modules,.env,.env.production"
target: /home/ec2-user/odrlab-frontend
- name: Restart PM2 on EC2
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USER }}
key: ${{ secrets.EC2_SSH_KEY }}
script: |
cd /home/ec2-user/odrlab-frontend
# Verify environment files
echo "Checking environment files..."
if [ -f .env.production ]; then
echo ".env.production exists"
grep -q "NEXT_PUBLIC_GOOGLE_CLIENT_ID" .env.production && echo "NEXT_PUBLIC_GOOGLE_CLIENT_ID is set" || echo "ERROR: NEXT_PUBLIC_GOOGLE_CLIENT_ID is missing"
else
echo "WARNING: .env.production file is missing"
fi
# Restart application
pm2 restart odrlab-frontend || pm2 start "bun start" --name odrlab-frontend