# 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. VITE_SUPABASE_URL: ${{ secrets.VITE_SUPABASE_URL }} VITE_SUPABASE_ANON_KEY: ${{ secrets.VITE_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 }} 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' # Re-enable the cache. If this fails, we will remove it again. cache-dependency-path: '**/package-lock.json' # The setup-node action with caching handles installation correctly. # If dependencies are not found in cache, it will run 'npm ci' automatically. # If they are found, it restores them. This is the standard, reliable way. - name: Install Dependencies run: npm ci # 'ci' is faster and safer for CI/CD than 'install'. # --- NEW DEBUGGING STEPS --- - name: Verify Project Structure run: | echo "--- Current Working Directory ---" pwd echo "--- Listing Root Directory ---" ls -alF echo "--- Listing SRC Directory ---" ls -alF src - name: Lint TypeScript Code run: npm run lint # Run the linter to check for code quality issues. - name: Run Unit Tests run: npm test # Run the test suite to ensure code correctness. # --- 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 }} npm exec -- supabase functions deploy process-flyer --project-ref ${{ env.SUPABASE_PROJECT_ID }} # --- Frontend Deployment --- - name: Build React Application # We set the environment variable directly in the command line for this step. # This maps the Gitea secret to the environment variable the application expects. run: VITE_API_KEY=${{ secrets.VITE_GOOGLE_GENAI_API_KEY }} npm run build - 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."