name: Deploy to Cloudflare Workers on: push: branches: - main pull_request: branches: - main workflow_dispatch: jobs: deploy: runs-on: ubuntu-latest name: Build and Deploy steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '22' cache: 'npm' - name: Install dependencies run: npm ci - name: Install Wrangler run: npm install -g wrangler@latest - name: Build Astro run: npm run build env: # Build-time environment variables NODE_ENV: production - name: Deploy to Cloudflare Workers run: wrangler deploy env: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} deploy-staging: runs-on: ubuntu-latest name: Deploy to Staging if: github.ref == 'refs/heads/staging' steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '22' cache: 'npm' - name: Install dependencies run: npm ci - name: Install Wrangler run: npm install -g wrangler@latest - name: Build Astro run: npm run build - name: Deploy to Staging run: wrangler deploy --env staging env: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} # Optional: Run tests before deployment test: runs-on: ubuntu-latest name: Run Tests steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '22' cache: 'npm' - name: Install dependencies run: npm ci - name: Run tests run: npm test