Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 92 additions & 0 deletions .github/workflows/deploy-basic-example.yml
Original file line number Diff line number Diff line change
@@ -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

5 changes: 5 additions & 0 deletions examples/basic/.firebaserc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"projects": {
"default": "mapconductor"
}
}
45 changes: 45 additions & 0 deletions examples/basic/firebase.json
Original file line number Diff line number Diff line change
@@ -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": "/" }
]
}
]
}
}
Loading