Skip to content

Commit f348392

Browse files
authored
feat: Integrate dynamic API key injection (#1551)
* chore: inject GOOGLE_MAPS_API_KEY secret into deployment workflow and clean up legacy env variables * feat: Updates workflows to use hidden API key values. * feat: Updates workflows to use hidden API key values. * feat: Updates workflows to use hidden API key values. * feat: migrate all samples to dynamically injected API keys * chore: lock down API key scope in test workflow * fix: apply API key injection to JS/TS files in Vite * chore: remove redundant project-level vite configs * fix: explicitly pass root vite config path in sample package.json scripts * fixes incorrect init statement * fix: Enable e2e tests and rename prod api key * chore: Rename development API key secret to JS_MAPS_DEV_KEY * fix: replace hardcoded api key with placeholder in map-drawing-terradraw * chore: enforce GOOGLE_MAPS_API_KEY placeholder in build-single.sh * chore: require exact GOOGLE_MAPS_API_KEY placeholder * chore: add 39-character regex check for raw API keys * fix: refine 39-character regex to avoid base64 SVGs
1 parent 5aa1825 commit f348392

298 files changed

Lines changed: 629 additions & 979 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/release.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ jobs:
2828
contents: write
2929
id-token: write
3030
env:
31-
GOOGLE_MAPS_JS_SAMPLES_KEY: "${{ secrets.GOOGLE_MAPS_JS_SAMPLES_KEY }}"
31+
GOOGLE_MAPS_API_KEY: "${{ secrets.JS_MAPS_PROD_KEY }}"
3232
steps:
3333
- name: Checkout main
3434
uses: actions/checkout@v4

.github/workflows/tests.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ on:
3535

3636
env:
3737
SKIP_DIST: ${{ github.event_name == 'pull_request' || github.event_name == 'schedule' }}
38+
GOOGLE_MAPS_API_KEY: "${{ secrets.JS_MAPS_DEV_KEY }}"
3839

3940
concurrency:
4041
group: ${{ github.workflow }}-${{ github.ref }}
@@ -149,6 +150,7 @@ jobs:
149150
done
150151
env:
151152
STEPS_GET_WORKSPACES_OUTPUTS_CHANGED_WORKSPACES: ${{ steps.get_workspaces.outputs.changed_workspaces }}
153+
GOOGLE_MAPS_API_KEY: "${{ secrets.JS_MAPS_DEV_KEY }}"
152154

153155
- name: Generate Index (Run Once After Builds)
154156
run: bash samples/generate-index.sh
@@ -163,6 +165,7 @@ jobs:
163165
# Pass the correct base reference for find-changes.sh when called by samples.spec.ts
164166
GIT_BASE_REF: ${{ github.event_name == 'pull_request' && format('origin/{0}', github.base_ref) || github.event.before }}
165167
CI: true
168+
GOOGLE_MAPS_API_KEY: "${{ secrets.JS_MAPS_DEV_KEY }}"
166169

167170
- name: Upload Test Report Artifact
168171
uses: actions/upload-artifact@v4
@@ -215,6 +218,8 @@ jobs:
215218

216219
- name: Build All Projects
217220
run: npm run build-all
221+
env:
222+
GOOGLE_MAPS_API_KEY: "${{ secrets.JS_MAPS_DEV_KEY }}"
218223

219224
- name: Generate Index (Run Once After Full Builds)
220225
run: bash samples/generate-index.sh
@@ -228,6 +233,7 @@ jobs:
228233
env:
229234
CI: true
230235
TEST_ALL_SAMPLES: "true"
236+
GOOGLE_MAPS_API_KEY: "${{ secrets.JS_MAPS_DEV_KEY }}"
231237

232238
- name: Upload Test Report Artifact
233239
uses: actions/upload-artifact@v4

dist/samples/map-drawing-terradraw/app/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<script>
1414
// prettier-ignore
1515
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
16-
key: "AIzaSyA6myHzS10YXdcazAFalmXvDkrYCp5cLc8"
16+
key: "GOOGLE_MAPS_API_KEY"
1717
});
1818
</script>
1919
</head>

dist/samples/map-drawing-terradraw/app/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
"scripts": {
66
"build": "bash ../build-single.sh",
77
"test": "tsc && npm run build:vite --workspace=.",
8-
"start": "tsc && vite build --base './' && vite",
9-
"build:vite": "vite build --base './'",
10-
"preview": "vite preview"
8+
"start": "tsc && vite build --config ../../vite.config.js --base './' && vite --config ../../vite.config.js",
9+
"build:vite": "vite build --config ../../vite.config.js --base './'",
10+
"preview": "vite preview --config ../../vite.config.js"
1111
},
1212
"dependencies": {
1313
"terra-draw": "latest",

dist/samples/map-drawing-terradraw/docs/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<script>
1414
// prettier-ignore
1515
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
16-
key: "AIzaSyA6myHzS10YXdcazAFalmXvDkrYCp5cLc8"
16+
key: "GOOGLE_MAPS_API_KEY"
1717
});
1818
</script>
1919
</head>

dist/samples/map-drawing-terradraw/jsfiddle/demo.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<script>
1414
// prettier-ignore
1515
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
16-
key: "AIzaSyA6myHzS10YXdcazAFalmXvDkrYCp5cLc8"
16+
key: "GOOGLE_MAPS_API_KEY"
1717
});
1818
</script>
1919
</head>

dist/samples/routes-compute-routes/app/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<script>
1515
// prettier-ignore
1616
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
17-
key: "AIzaSyA6myHzS10YXdcazAFalmXvDkrYCp5cLc8"
17+
key: "GOOGLE_MAPS_API_KEY"
1818
});
1919
</script>
2020
</head>

dist/samples/routes-compute-routes/app/package.json

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,8 @@
44
"scripts": {
55
"build": "bash ../build-single.sh",
66
"test": "tsc && npm run build:vite --workspace=.",
7-
"start": "tsc && vite build --base './' && vite",
8-
"build:vite": "vite build --base './'",
9-
"preview": "vite preview"
10-
},
11-
"dependencies": {
12-
7+
"start": "tsc && vite build --config ../../vite.config.js --base './' && vite --config ../../vite.config.js",
8+
"build:vite": "vite build --config ../../vite.config.js --base './'",
9+
"preview": "vite preview --config ../../vite.config.js"
1310
}
1411
}

dist/samples/routes-compute-routes/docs/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<script>
1515
// prettier-ignore
1616
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
17-
key: "AIzaSyA6myHzS10YXdcazAFalmXvDkrYCp5cLc8"
17+
key: "GOOGLE_MAPS_API_KEY"
1818
});
1919
</script>
2020
</head>

dist/samples/routes-compute-routes/jsfiddle/demo.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<script>
1515
// prettier-ignore
1616
(g=>{var h,a,k,p="The Google Maps JavaScript API",c="google",l="importLibrary",q="__ib__",m=document,b=window;b=b[c]||(b[c]={});var d=b.maps||(b.maps={}),r=new Set,e=new URLSearchParams,u=()=>h||(h=new Promise(async(f,n)=>{await (a=m.createElement("script"));e.set("libraries",[...r]+"");for(k in g)e.set(k.replace(/[A-Z]/g,t=>"_"+t[0].toLowerCase()),g[k]);e.set("callback",c+".maps."+q);a.src=`https://maps.${c}apis.com/maps/api/js?`+e;d[q]=f;a.onerror=()=>h=n(Error(p+" could not load."));a.nonce=m.querySelector("script[nonce]")?.nonce||"";m.head.append(a)}));d[l]?console.warn(p+" only loads once. Ignoring:",g):d[l]=(f,...n)=>r.add(f)&&u().then(()=>d[l](f,...n))})({
17-
key: "AIzaSyA6myHzS10YXdcazAFalmXvDkrYCp5cLc8"
17+
key: "GOOGLE_MAPS_API_KEY"
1818
});
1919
</script>
2020
</head>

0 commit comments

Comments
 (0)