name: Deploy to GitHub Pages on: push: branches: 'main' jobs: build_site: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v5 - name: Install Node.js uses: actions/setup-node@v6 with: node-version: 24 cache: npm cache-dependency-path: | gpx/package-lock.json website/package-lock.json - name: Install dependencies for gpx run: npm install --prefix gpx - name: Build gpx run: npm run build --prefix gpx - name: Install dependencies for website run: npm install --prefix website - name: Create env file run: | touch website/.env echo PUBLIC_MAPTILER_KEY=${{ secrets.PUBLIC_MAPTILER_KEY }} >> website/.env cat website/.env - name: Build website env: BASE_PATH: '' run: | npm run build --prefix website - name: Upload Artifacts uses: actions/upload-pages-artifact@v4 with: path: 'website/build/' deploy: needs: build_site runs-on: ubuntu-latest permissions: pages: write id-token: write environment: name: github-pages url: ${{ steps.deployment.outputs.page_url }} steps: - name: Deploy id: deployment uses: actions/deploy-pages@v4 # Temporary: also deploy the same build to Cloudflare Pages during the domain switch. deploy_cloudflare: needs: build_site runs-on: ubuntu-latest permissions: contents: read deployments: write steps: - name: Download build uses: actions/download-artifact@v5 with: name: github-pages - name: Extract build run: | mkdir build tar -xf artifact.tar -C build - name: Deploy to Cloudflare Pages uses: cloudflare/wrangler-action@v3 with: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} command: pages deploy build --project-name=${{ vars.CLOUDFLARE_PROJECT_NAME || 'gpxstudio' }} --branch=main --commit-hash=${{ github.sha }} gitHubToken: ${{ secrets.GITHUB_TOKEN }}