idea like solved #45
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: 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 |