From 3149c419f64f7b08e234c170dfee5cf515d4f2bd Mon Sep 17 00:00:00 2001 From: Masashi Katsumata Date: Thu, 29 Oct 2026 00:11:10 -0700 Subject: [PATCH] Bring back the Firebase deploy of examples/basic demo-react.mapconductor.com is still served from Firebase Hosting (site mapconductor-react), so f50012b should not have removed its deploy. The workflow, firebase.json and .firebaserc return as they were. --- .github/workflows/deploy-basic-example.yml | 92 ++++++++++++++++++++++ examples/basic/.firebaserc | 5 ++ examples/basic/firebase.json | 45 +++++++++++ 3 files changed, 142 insertions(+) create mode 100644 .github/workflows/deploy-basic-example.yml create mode 100644 examples/basic/.firebaserc create mode 100644 examples/basic/firebase.json diff --git a/.github/workflows/deploy-basic-example.yml b/.github/workflows/deploy-basic-example.yml new file mode 100644 index 0000000..933f5f2 --- /dev/null +++ b/.github/workflows/deploy-basic-example.yml @@ -0,0 +1,92 @@ +name: Deploy basic example + +# Deploys examples/basic to Firebase Hosting. +# +# Required repository secrets: +# FIREBASE_SERVICE_ACCOUNT - JSON key of a service account for the +# `mapconductor` Firebase project with the +# "Firebase Hosting Admin" role +# VITE_GOOGLE_MAPS_API_KEY - Google Maps JavaScript API key +# VITE_ARCGIS_API_KEY - ArcGIS Location Platform API key +# VITE_MAPBOX_ACCESS_TOKEN - Mapbox access token +# VITE_HERE_API_KEY - HERE platform API key +# VITE_MAPKIT_TOKEN - Apple MapKit JS JWT +# VITE_AZURE_MAPS_SUBSCRIOTION_KEY - Azure Maps subscription key (typo is the +# committed spelling; examples/basic reads +# this exact name) +# VITE_TOMTOM_API_KEY - TomTom Maps SDK key +# VITE_MAPTILER - MapTiler Cloud key +# VITE_LONGDO - Longdo Map key +# VITE_MAPPLS_API_KEY - Mappls (MapmyIndia) REST/Map SDK key +# +# The list must stay in sync with examples/basic/.env; a missing entry does not +# fail the build, it just ships a bundle where that one provider is blank. +# The VITE_* values are embedded into the static bundle at build time. + +on: + push: + branches: + - main + workflow_dispatch: + +permissions: + contents: read + +concurrency: + group: deploy-basic-example + cancel-in-progress: false + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v7 + with: + submodules: recursive + + - name: Setup Node + uses: actions/setup-node@v6 + with: + node-version: 22 + cache: npm + + # The @mapconductor/* packages are not published to npm yet. They live in + # this repo as git submodules (checked out above) and are wired up as npm + # workspaces. Their package.json files pin each other to exact versions, + # so once any package is version-bumped npm can no longer satisfy those + # specs from the local workspaces and falls back to the registry, which + # 404s. Normalize every internal spec to "*" so npm always links the + # local submodule instead of downloading it. + - name: Link local workspace packages + run: node scripts/link-local-workspaces.mjs + + # `npm install` (not `npm ci`): the link step above rewrites package.json + # files at build time, so the committed lockfile is intentionally not kept + # in exact sync and `npm ci` would fail the integrity check. + - name: Install dependencies + run: npm install --no-audit --no-fund + + - name: Build basic example + run: npm run build + env: + VITE_BASE_PATH: / + VITE_GOOGLE_MAPS_API_KEY: ${{ secrets.VITE_GOOGLE_MAPS_API_KEY }} + VITE_ARCGIS_API_KEY: ${{ secrets.VITE_ARCGIS_API_KEY }} + VITE_MAPBOX_ACCESS_TOKEN: ${{ secrets.VITE_MAPBOX_ACCESS_TOKEN }} + VITE_HERE_API_KEY: ${{ secrets.VITE_HERE_API_KEY }} + VITE_MAPKIT_TOKEN: ${{ secrets.VITE_MAPKIT_TOKEN }} + VITE_AZURE_MAPS_SUBSCRIOTION_KEY: ${{ secrets.VITE_AZURE_MAPS_SUBSCRIOTION_KEY }} + VITE_TOMTOM_API_KEY: ${{ secrets.VITE_TOMTOM_API_KEY }} + VITE_MAPTILER: ${{ secrets.VITE_MAPTILER }} + VITE_LONGDO: ${{ secrets.VITE_LONGDO }} + VITE_MAPPLS_API_KEY: ${{ secrets.VITE_MAPPLS_API_KEY }} + + - name: Deploy to Firebase Hosting + uses: FirebaseExtended/action-hosting-deploy@v0 + with: + firebaseServiceAccount: ${{ secrets.FIREBASE_SERVICE_ACCOUNT }} + projectId: mapconductor + channelId: live + entryPoint: examples/basic + diff --git a/examples/basic/.firebaserc b/examples/basic/.firebaserc new file mode 100644 index 0000000..1422fb5 --- /dev/null +++ b/examples/basic/.firebaserc @@ -0,0 +1,5 @@ +{ + "projects": { + "default": "mapconductor" + } +} diff --git a/examples/basic/firebase.json b/examples/basic/firebase.json new file mode 100644 index 0000000..be1a81f --- /dev/null +++ b/examples/basic/firebase.json @@ -0,0 +1,45 @@ +{ + "hosting": { + "site": "mapconductor-react", + "public": "dist", + "ignore": ["firebase.json", "**/.*", "**/node_modules/**"], + "cleanUrls": true, + "rewrites": [ + { + "regex": "^/(?:camera-sync|hello-map)(?:/(?:en|ja|es-419|de|th|hi))?/?$", + "destination": "/index.html" + }, + { + "regex": "^/[a-z0-9-]+/[a-z0-9-]+(?:/(?:en|ja|es-419|de|th|hi))?/?$", + "destination": "/index.html" + } + ], + "headers": [ + { + "source": "/assets/**", + "headers": [ + { "key": "Cache-Control", "value": "public, max-age=31536000, immutable" } + ] + }, + { + "source": "/cesiumStatic/**", + "headers": [ + { "key": "Cache-Control", "value": "public, max-age=86400" } + ] + }, + { + "source": "**/index.html", + "headers": [ + { "key": "Cache-Control", "value": "no-cache" } + ] + }, + { + "source": "/tile-sw.js", + "headers": [ + { "key": "Cache-Control", "value": "no-cache" }, + { "key": "Service-Worker-Allowed", "value": "/" } + ] + } + ] + } +}