# FILE: .gitea/workflows/deploy.yml # # note to AI - the order in this file matters - also, minor changes to this file can have big impacts and is easy to break name: Deploy to Web Server flyer-crawler.projectium.com on: push: branches: - main # This pipeline runs only on a push to the 'main' branch. jobs: deploy: runs-on: projectium.com # This job runs on your self-hosted Gitea runner. # Environment variables are used to pass secrets and configuration to the steps below. # These must be configured as secrets in your Gitea repository settings. env: # Public keys needed for the React build process. REACT_APP_SUPABASE_URL: ${{ secrets.REACT_APP_SUPABASE_URL }} REACT_APP_SUPABASE_ANON_KEY: ${{ secrets.REACT_APP_SUPABASE_ANON_KEY }} # Supabase token for non-interactive CLI authentication. SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }} # The project ID for linking the Supabase CLI. SUPABASE_PROJECT_ID: ${{ secrets.SUPABASE_PROJECT_ID }} # The Google GenAI API key, prefixed for Vite. # By defining it here, it's available to all steps in the job. VITE_API_KEY: ${{ secrets.VITE_API_KEY }} steps: - name: Checkout Code uses: actions/checkout@v3 # Add this NEW STEP FOR DEBUGGING - name: Show Git REF run: | echo "Gitea ref: ${{ gitea.ref }}" echo "Gitea ref_name: ${{ gitea.ref_name }}" # often more useful (e.g., 'main' or 'my-feature-branch') echo "Gitea ref_type: ${{ gitea.ref_type }}" # 'branch' or 'tag' echo "Gitea SHA: ${{ gitea.sha }}" echo "Triggering actor: ${{ gitea.actor }}" echo "Repository: ${{ gitea.repository }}" - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: '20' cache: 'npm' # Cache npm dependencies to speed up subsequent builds. # Use a glob pattern to find the lock file, making the path more resilient. cache-dependency-path: '**/package-lock.json' - name: Install Dependencies run: npm ci # 'ci' is faster and safer for CI/CD than 'install'. # --- Backend Deployment --- - name: Deploy Supabase Edge Functions # Pass the access token as an environment variable directly to this step # This ensures the Supabase CLI can authenticate. env: SUPABASE_ACCESS_TOKEN: ${{ secrets.SUPABASE_ACCESS_TOKEN }} run: | echo "Deploying Edge Functions to Supabase project: ${{ env.SUPABASE_PROJECT_ID }}" # The SUPABASE_ACCESS_TOKEN env var handles login automatically. # The --project-ref flag links the CLI to your project. npm exec -- supabase functions deploy system-check --project-ref ${{ env.SUPABASE_PROJECT_ID }} npm exec -- supabase functions deploy delete-user --project-ref ${{ env.SUPABASE_PROJECT_ID }} npm exec -- supabase functions deploy seed-database --project-ref ${{ env.SUPABASE_PROJECT_ID }} # Debug step: Verify environment variables are present before build - name: Debug Environment Variables # This will now correctly check the job-level environment variable. run: | echo "VITE_API_KEY is set: ${{ env.VITE_API_KEY != '' }}" # --- Frontend Deployment --- - name: Build React Application run: npm run build # This creates the 'dist' directory. Vite will automatically pick up VITE_API_KEY from the job environment. - name: Deploy Frontend via Local Copy run: | echo "Deploying frontend files to local web server path..." # Ensure the destination directory exists before copying. mkdir -p "/var/www/flyer-crawler.projectium.com" # Use rsync to efficiently copy files from the 'dist' output to the web server directory. # The '--delete' flag removes old files from the destination, ensuring a clean deployment. # We exclude '.env.local' to prevent deleting the server-specific environment file. rsync -avz --delete --exclude '.env.local' dist/ "/var/www/flyer-crawler.projectium.com" echo "Local deployment complete."