diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml
index 2b0fb1051b..a4948c5fda 100644
--- a/.github/workflows/pull-request.yml
+++ b/.github/workflows/pull-request.yml
@@ -211,6 +211,7 @@ jobs:
VITE_APP_API_URL: https://api.${{ env.FULL_DOMAIN }}
VITE_APP_HASURA_URL: https://hasura.${{ env.FULL_DOMAIN }}/v1/graphql
VITE_APP_HASURA_WEBSOCKET: wss://hasura.${{ env.FULL_DOMAIN }}/v1/graphql
+ VITE_APP_MAPBOX_ACCESS_TOKEN: ${{ secrets.MAPBOX_ACCESS_TOKEN }}
VITE_APP_SHAREDB_URL: wss://sharedb.${{ env.FULL_DOMAIN }}
# needed because there's no API to change google's allowed OAuth URLs
VITE_APP_GOOGLE_OAUTH_OVERRIDE: https://api.editor.planx.dev
@@ -226,6 +227,7 @@ jobs:
VITE_APP_API_URL: https://api.${{ env.FULL_DOMAIN }}
VITE_APP_HASURA_URL: https://hasura.${{ env.FULL_DOMAIN }}/v1/graphql
VITE_APP_HASURA_WEBSOCKET: wss://hasura.${{ env.FULL_DOMAIN }}/v1/graphql
+ VITE_APP_MAPBOX_ACCESS_TOKEN: ${{ secrets.MAPBOX_ACCESS_TOKEN }}
VITE_APP_SHAREDB_URL: wss://sharedb.${{ env.FULL_DOMAIN }}
VITE_APP_GOOGLE_OAUTH_OVERRIDE: https://api.editor.planx.dev
VITE_APP_ENV: pizza
diff --git a/.github/workflows/push-main.yml b/.github/workflows/push-main.yml
index 9c8b73c8e8..d99d4d7b71 100644
--- a/.github/workflows/push-main.yml
+++ b/.github/workflows/push-main.yml
@@ -53,13 +53,14 @@ jobs:
- run: pnpm build
working-directory: editor.planx.uk
env:
+ VITE_APP_AIRBRAKE_PROJECT_ID: ${{ secrets.AIRBRAKE_PROJECT_ID }}
+ VITE_APP_AIRBRAKE_PROJECT_KEY: ${{ secrets.AIRBRAKE_PROJECT_KEY }}
VITE_APP_API_URL: https://api.editor.planx.dev
+ VITE_APP_ENV: staging
VITE_APP_HASURA_URL: https://hasura.editor.planx.dev/v1/graphql
+ VITE_APP_MAPBOX_ACCESS_TOKEN: ${{ secrets.MAPBOX_ACCESS_TOKEN }}
VITE_APP_HASURA_WEBSOCKET: wss://hasura.editor.planx.dev/v1/graphql
VITE_APP_SHAREDB_URL: wss://sharedb.editor.planx.dev
- VITE_APP_AIRBRAKE_PROJECT_ID: ${{ secrets.AIRBRAKE_PROJECT_ID }}
- VITE_APP_AIRBRAKE_PROJECT_KEY: ${{ secrets.AIRBRAKE_PROJECT_KEY }}
- VITE_APP_ENV: staging
- name: Upload Build Artifact
uses: actions/upload-artifact@v4
with:
diff --git a/.github/workflows/push-production.yml b/.github/workflows/push-production.yml
index 319f28051b..f89fd74555 100644
--- a/.github/workflows/push-production.yml
+++ b/.github/workflows/push-production.yml
@@ -53,13 +53,14 @@ jobs:
- run: pnpm build
working-directory: editor.planx.uk
env:
+ VITE_APP_AIRBRAKE_PROJECT_ID: ${{ secrets.AIRBRAKE_PROJECT_ID }}
+ VITE_APP_AIRBRAKE_PROJECT_KEY: ${{ secrets.AIRBRAKE_PROJECT_KEY }}
VITE_APP_API_URL: https://api.editor.planx.uk
+ VITE_APP_ENV: production
VITE_APP_HASURA_URL: https://hasura.editor.planx.uk/v1/graphql
VITE_APP_HASURA_WEBSOCKET: wss://hasura.editor.planx.uk/v1/graphql
+ VITE_APP_MAPBOX_ACCESS_TOKEN: ${{ secrets.MAPBOX_ACCESS_TOKEN }}
VITE_APP_SHAREDB_URL: wss://sharedb.editor.planx.uk
- VITE_APP_AIRBRAKE_PROJECT_ID: ${{ secrets.AIRBRAKE_PROJECT_ID }}
- VITE_APP_AIRBRAKE_PROJECT_KEY: ${{ secrets.AIRBRAKE_PROJECT_KEY }}
- VITE_APP_ENV: production
- name: Upload Build Artifact
uses: actions/upload-artifact@v4
with:
diff --git a/.gitignore b/.gitignore
index cf53f31bad..2b647dd837 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,6 +11,7 @@ editor.planx.uk/.eslintcache
.env.prod
.env.temp
api.planx.uk/.env.test
+editor.planx.uk/.env
hasura.planx.uk/.env.test
# IDE
diff --git a/docker-compose.yml b/docker-compose.yml
index f638c5069d..6d57522027 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -112,41 +112,42 @@ services:
timeout: 3s
retries: 5
environment:
- APP_ENVIRONMENT: ${APP_ENVIRONMENT}
- HASURA_GRAPHQL_ADMIN_SECRET: ${HASURA_GRAPHQL_ADMIN_SECRET}
- HASURA_GRAPHQL_URL: http://hasura-proxy:${HASURA_PROXY_PORT}/v1/graphql
- HASURA_METADATA_URL: http://hasura-proxy:${HASURA_PROXY_PORT}/v1/metadata
- HASURA_SCHEMA_URL: http://hasura-proxy:${HASURA_PROXY_PORT}/v2/query
- JWT_SECRET: ${JWT_SECRET}
- GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID}
- GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET}
+ AIRBRAKE_PROJECT_ID: ${AIRBRAKE_PROJECT_ID}
+ AIRBRAKE_PROJECT_KEY: ${AIRBRAKE_PROJECT_KEY}
API_URL_EXT: ${API_URL_EXT}
- EDITOR_URL_EXT: ${EDITOR_URL_EXT}
- SESSION_SECRET: ${SESSION_SECRET}
- AWS_S3_REGION: ${AWS_S3_REGION}
+ APP_ENVIRONMENT: ${APP_ENVIRONMENT}
AWS_ACCESS_KEY: ${AWS_ACCESS_KEY}
- AWS_SECRET_KEY: ${AWS_SECRET_KEY}
- AWS_S3_BUCKET: ${AWS_S3_BUCKET}
AWS_S3_ACL: ${AWS_S3_ACL}
- PORT: ${API_PORT}
+ AWS_S3_BUCKET: ${AWS_S3_BUCKET}
+ AWS_S3_REGION: ${AWS_S3_REGION}
+ AWS_SECRET_KEY: ${AWS_SECRET_KEY}
BOPS_API_TOKEN: ${BOPS_API_TOKEN}
- AIRBRAKE_PROJECT_ID: ${AIRBRAKE_PROJECT_ID}
- AIRBRAKE_PROJECT_KEY: ${AIRBRAKE_PROJECT_KEY}
- UNIFORM_TOKEN_URL: ${UNIFORM_TOKEN_URL}
- UNIFORM_SUBMISSION_URL: ${UNIFORM_SUBMISSION_URL}
- GOVUK_NOTIFY_API_KEY: ${GOVUK_NOTIFY_API_KEY}
- HASURA_PLANX_API_KEY: ${HASURA_PLANX_API_KEY}
- FILE_API_KEY: ${FILE_API_KEY}
- FILE_API_KEY_NEXUS: ${FILE_API_KEY_NEXUS}
- FILE_API_KEY_BARNET: ${FILE_API_KEY_BARNET}
- SLACK_WEBHOOK_URL: ${SLACK_WEBHOOK_URL}
- ORDNANCE_SURVEY_API_KEY: ${ORDNANCE_SURVEY_API_KEY}
- MINIO_PORT: ${MINIO_PORT}
CORS_ALLOWLIST: ${EDITOR_URL_EXT}, ${API_URL_EXT}
+ EDITOR_URL_EXT: ${EDITOR_URL_EXT}
ENCRYPTION_KEY: ${ENCRYPTION_KEY}
+ FILE_API_KEY_BARNET: ${FILE_API_KEY_BARNET}
+ FILE_API_KEY_NEXUS: ${FILE_API_KEY_NEXUS}
+ FILE_API_KEY: ${FILE_API_KEY}
+ GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID}
+ GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET}
+ GOVUK_NOTIFY_API_KEY: ${GOVUK_NOTIFY_API_KEY}
+ HASURA_GRAPHQL_ADMIN_SECRET: ${HASURA_GRAPHQL_ADMIN_SECRET}
+ HASURA_GRAPHQL_URL: http://hasura-proxy:${HASURA_PROXY_PORT}/v1/graphql
+ HASURA_METADATA_URL: http://hasura-proxy:${HASURA_PROXY_PORT}/v1/metadata
+ HASURA_PLANX_API_KEY: ${HASURA_PLANX_API_KEY}
+ HASURA_SCHEMA_URL: http://hasura-proxy:${HASURA_PROXY_PORT}/v2/query
IDOX_NEXUS_CLIENT: ${IDOX_NEXUS_CLIENT}
- IDOX_NEXUS_TOKEN_URL: ${IDOX_NEXUS_TOKEN_URL}
IDOX_NEXUS_SUBMISSION_URL: ${IDOX_NEXUS_SUBMISSION_URL}
+ IDOX_NEXUS_TOKEN_URL: ${IDOX_NEXUS_TOKEN_URL}
+ JWT_SECRET: ${JWT_SECRET}
+ MAPBOX_ACCESS_TOKEN: ${MAPBOX_ACCESS_TOKEN}
+ MINIO_PORT: ${MINIO_PORT}
+ ORDNANCE_SURVEY_API_KEY: ${ORDNANCE_SURVEY_API_KEY}
+ PORT: ${API_PORT}
+ SESSION_SECRET: ${SESSION_SECRET}
+ SLACK_WEBHOOK_URL: ${SLACK_WEBHOOK_URL}
+ UNIFORM_SUBMISSION_URL: ${UNIFORM_SUBMISSION_URL}
+ UNIFORM_TOKEN_URL: ${UNIFORM_TOKEN_URL}
# Local authority config
# Lambeth
UNIFORM_CLIENT_LAMBETH: ${UNIFORM_CLIENT_LAMBETH}
diff --git a/editor.planx.uk/.env b/editor.planx.uk/.env
deleted file mode 100644
index ca38e5df07..0000000000
--- a/editor.planx.uk/.env
+++ /dev/null
@@ -1,13 +0,0 @@
-# Used in local development and testing, overwritten in .env.production
-# This file does not (and should not) contain secrets - all values here are publicly exposed
-# If you're working off a fork of Planx, please replace the AIRBRAKE and FEEDBACK_FISH values with a mock value like "SECRET"
-
-VITE_APP_AIRBRAKE_PROJECT_ID=329753
-VITE_APP_AIRBRAKE_PROJECT_KEY=388fe6f4cc0d6644c923500d5672a5b6
-
-VITE_APP_API_URL=http://localhost:7002
-VITE_APP_HASURA_URL=http://localhost:7100/v1/graphql
-VITE_APP_HASURA_WEBSOCKET=ws://localhost:7100/v1/graphql
-VITE_APP_SHAREDB_URL=ws://localhost:7003
-
-VITE_APP_ENV=development
\ No newline at end of file
diff --git a/editor.planx.uk/.env.example b/editor.planx.uk/.env.example
new file mode 100644
index 0000000000..ac87499ee5
--- /dev/null
+++ b/editor.planx.uk/.env.example
@@ -0,0 +1,15 @@
+# Used in local development and testing, overwritten in .env.production
+# Most values in this file are publicly exposed and not secrets
+VITE_APP_AIRBRAKE_PROJECT_ID=👻
+VITE_APP_AIRBRAKE_PROJECT_KEY=👻
+
+# This token should be exclusively scoped for local development: localhost:3000 (here) & localhost:5173 (@opensystemslab/map)
+# A separate token restricted to our production, staging, and pizza domains is then set via Pulumi and Github Action secrets
+VITE_APP_MAPBOX_ACCESS_TOKEN=👻
+
+VITE_APP_API_URL=http://localhost:7002
+VITE_APP_HASURA_URL=http://localhost:7100/v1/graphql
+VITE_APP_HASURA_WEBSOCKET=ws://localhost:7100/v1/graphql
+VITE_APP_SHAREDB_URL=ws://localhost:7003
+
+VITE_APP_ENV=development
\ No newline at end of file
diff --git a/editor.planx.uk/.gitignore b/editor.planx.uk/.gitignore
index 28f061d8ba..feecb54853 100644
--- a/editor.planx.uk/.gitignore
+++ b/editor.planx.uk/.gitignore
@@ -13,6 +13,7 @@
# misc
.DS_Store
+.env
.env.local
.env.development.local
.env.test.local
diff --git a/editor.planx.uk/src/@planx/components/List/schemas/Trees.ts b/editor.planx.uk/src/@planx/components/List/schemas/Trees.ts
index c7d9e47681..62b70f550b 100644
--- a/editor.planx.uk/src/@planx/components/List/schemas/Trees.ts
+++ b/editor.planx.uk/src/@planx/components/List/schemas/Trees.ts
@@ -68,8 +68,7 @@ export const Trees: Schema = {
mapOptions: {
basemap: "OSVectorTile",
drawType: "Point",
- drawColor: "#ff0000",
- drawMany: true,
+ drawColor: "#66ff00",
},
},
},
diff --git a/editor.planx.uk/src/@planx/components/List/utils.tsx b/editor.planx.uk/src/@planx/components/List/utils.tsx
index 71044f10aa..28f8dbb2b4 100644
--- a/editor.planx.uk/src/@planx/components/List/utils.tsx
+++ b/editor.planx.uk/src/@planx/components/List/utils.tsx
@@ -39,7 +39,7 @@ export function formatSchemaDisplayValue(
}
case "question": {
const matchingOption = field.data.options.find(
- (option) => option.data.text === value,
+ (option) => option.data.text === value || option.data.val === value,
);
return matchingOption?.data.text;
}
@@ -56,6 +56,7 @@ export function formatSchemaDisplayValue(
{/* @ts-ignore */}
>
@@ -80,6 +86,7 @@ export function formatSchemaDisplayValue(
{/* @ts-ignore */}
>
diff --git a/editor.planx.uk/src/@planx/components/MapAndLabel/Editor.tsx b/editor.planx.uk/src/@planx/components/MapAndLabel/Editor.tsx
index 036e3b909a..2c8b6e0c8f 100644
--- a/editor.planx.uk/src/@planx/components/MapAndLabel/Editor.tsx
+++ b/editor.planx.uk/src/@planx/components/MapAndLabel/Editor.tsx
@@ -1,7 +1,7 @@
+import Box from "@mui/material/Box";
import FormControl from "@mui/material/FormControl";
import MenuItem from "@mui/material/MenuItem";
import RadioGroup from "@mui/material/RadioGroup";
-import { useTheme } from "@mui/material/styles";
import { ComponentType as TYPES } from "@opensystemslab/planx-core/types";
import { useFormik } from "formik";
import React from "react";
@@ -28,8 +28,6 @@ export const SCHEMAS = [{ name: "Trees", schema: Trees }];
export default MapAndLabelComponent;
function MapAndLabelComponent(props: Props) {
- const theme = useTheme();
-
const formik = useFormik({
initialValues: parseContent(props.node?.data),
onSubmit: (newValues) => {
@@ -78,8 +76,68 @@ function MapAndLabelComponent(props: Props) {
-
+
+
+
+
+
+ {[
+ {
+ id: "OSVectorTile",
+ title: "Ordnance Survey Vector Tiles",
+ },
+ {
+ id: "MapboxSatellite",
+ title: "Mapbox Satellite imagery",
+ },
+ ].map((type) => (
+ ) => {
+ const target = e?.target as HTMLInputElement;
+ formik.setFieldValue("basemap", target.value);
+ }}
+ />
+ ))}
+
+
+
+
+
+
+
+
+ {[
+ { id: "Polygon", title: "Polygon" },
+ { id: "Point", title: "Point" },
+ ].map((type) => (
+ ) => {
+ const target = e?.target as HTMLInputElement;
+ formik.setFieldValue("drawType", target.value);
+ }}
+ />
+ ))}
+
+
+
+
-
-
-
-
- {[
- { id: "Polygon", title: "Polygon" },
- { id: "Point", title: "Point" },
- ].map((type) => (
- ) => {
- const target = e?.target as HTMLInputElement;
- formik.setFieldValue("drawType", target.value);
- }}
- />
- ))}
-
-
-
-
diff --git a/editor.planx.uk/src/@planx/components/MapAndLabel/Public/index.tsx b/editor.planx.uk/src/@planx/components/MapAndLabel/Public/index.tsx
index fb945f1813..e67154fe27 100644
--- a/editor.planx.uk/src/@planx/components/MapAndLabel/Public/index.tsx
+++ b/editor.planx.uk/src/@planx/components/MapAndLabel/Public/index.tsx
@@ -76,7 +76,7 @@ const VerticalFeatureTabs: React.FC<{ features: Feature[] }> = ({
{`${schema.type} ${feature.properties?.label}`}
-
+
{`${feature.geometry.type}`}
{feature.geometry.type === "Point"
? ` (${feature.geometry.coordinates.map((coord) =>
@@ -106,6 +106,7 @@ const Root = () => {
info,
policyRef,
howMeasured,
+ basemap,
drawColor,
drawType,
schemaName,
@@ -173,6 +174,7 @@ const Root = () => {
{/* @ts-ignore */}
{
osProxyEndpoint={`${
import.meta.env.VITE_APP_API_URL
}/proxy/ordnance-survey`}
- osCopyright={`© Crown copyright and database rights ${new Date().getFullYear()} OS (0)100024857`}
+ osCopyright={
+ basemap === "OSVectorTile"
+ ? `© Crown copyright and database rights ${new Date().getFullYear()} OS (0)100024857`
+ : ``
+ }
clipGeojsonData={
teamSettings?.boundaryBBox &&
JSON.stringify(teamSettings?.boundaryBBox)
}
+ mapboxAccessToken={import.meta.env.VITE_APP_MAPBOX_ACCESS_TOKEN}
+ collapseAttributions
/>
{features && features?.length > 0 ? (
diff --git a/editor.planx.uk/src/@planx/components/MapAndLabel/model.ts b/editor.planx.uk/src/@planx/components/MapAndLabel/model.ts
index 0af358016d..3f2877f91c 100644
--- a/editor.planx.uk/src/@planx/components/MapAndLabel/model.ts
+++ b/editor.planx.uk/src/@planx/components/MapAndLabel/model.ts
@@ -8,6 +8,7 @@ export interface MapAndLabel extends MoreInformation {
fn: string;
title: string;
description?: string;
+ basemap: "OSVectorTile" | "OSRaster" | "MapboxSatellite" | "OSM";
drawColor: string;
drawType: "Polygon" | "Point";
schemaName: string;
@@ -20,6 +21,7 @@ export const parseContent = (
fn: data?.fn || "",
title: data?.title,
description: data?.description,
+ basemap: data?.basemap || "OSVectorTile",
drawColor: data?.drawColor || "#22194D",
drawType: data?.drawType || "Polygon",
schemaName: data?.schemaName || SCHEMAS[0].name,
diff --git a/editor.planx.uk/src/@planx/components/shared/Schema/InputFields/MapFieldInput.tsx b/editor.planx.uk/src/@planx/components/shared/Schema/InputFields/MapFieldInput.tsx
index f362cba5b2..c258b8199e 100644
--- a/editor.planx.uk/src/@planx/components/shared/Schema/InputFields/MapFieldInput.tsx
+++ b/editor.planx.uk/src/@planx/components/shared/Schema/InputFields/MapFieldInput.tsx
@@ -64,11 +64,17 @@ export const MapFieldInput: React.FC> = (props) => {
osProxyEndpoint={`${
import.meta.env.VITE_APP_API_URL
}/proxy/ordnance-survey`}
- osCopyright={`Basemap subject to Crown copyright and database rights ${new Date().getFullYear()} OS (0)100024857`}
+ osCopyright={
+ mapOptions?.basemap === "OSVectorTile"
+ ? `Basemap subject to Crown copyright and database rights ${new Date().getFullYear()} OS (0)100024857`
+ : ``
+ }
clipGeojsonData={
teamSettings?.boundaryBBox &&
JSON.stringify(teamSettings?.boundaryBBox)
}
+ mapboxAccessToken={import.meta.env.VITE_APP_MAPBOX_ACCESS_TOKEN}
+ collapseAttributions
/>
diff --git a/infrastructure/application/Pulumi.production.yaml b/infrastructure/application/Pulumi.production.yaml
index 9cd4350222..f86e61472c 100644
--- a/infrastructure/application/Pulumi.production.yaml
+++ b/infrastructure/application/Pulumi.production.yaml
@@ -31,6 +31,8 @@ config:
application:idox-nexus-token-url: todo
application:jwt-secret:
secure: AAABABnYUYnZbOVTfN/n+m6kMQV951efSyHJYKVkGmtYvbPkpAk+BUIciL6AbJvW2x5bBuYvsrmY1v5lyZkoqoJ3XgDA/MTBQNIiNg==
+ application:mapbox-access-token:
+ secure: AAABAGwrLOkFpIZ3u8XeKIsfk1ujqFYKdv4us+ia2EdCXU8sBj2LiXfn8K6UcOifzf3HlOA6CYL3WwalKLmtvuq90CInbipB3dtY4Mr2Vx7NcUA7zxbUtli+8WcShIiNq490GwlTlf7ChjnNSIr3FzCeK3D/Xiq25wT0398c5ZwHyg==
application:metabase-encryption-secret-key:
secure: AAABAKQ6L5aOwZWpj9YOsaW8bOOukjt1mZuTgdKjM/3nSmF/0nM/f9c9W9DXygUFj2wtq5/iugo1UTS0+bhEn8Dr9k1Qzr2EmuGpQw==
application:metabasePgPassword:
diff --git a/infrastructure/application/Pulumi.staging.yaml b/infrastructure/application/Pulumi.staging.yaml
index 1e82aeb6e0..c229c31e56 100644
--- a/infrastructure/application/Pulumi.staging.yaml
+++ b/infrastructure/application/Pulumi.staging.yaml
@@ -32,6 +32,8 @@ config:
application:idox-nexus-token-url: https://dev.identity.idoxgroup.com/uaa/oauth/token
application:jwt-secret:
secure: AAABACbmLC4176IBxX5iL64/nycSXEsCYSQ0hTb7t2OCVlWUc627Vr/EpBhcqPrw9q+0z8UOvRJG5/c/DflZxfPxyJRUVNu+
+ application:mapbox-access-token:
+ secure: AAABAMWf2zVq5/mKCLynpgzAidNsnbUEBpb47n7MRWp2xzRgwaf3kzOvnZax9N04ZScQqU6I5/tEKTBAbSb8MIBJ8mU2iTZbPg8FD6wYsetRyftm1K39KBsIl9aS7fXvZFOG7BsC4qMDEhlDkH8gbV2HTev3VvvRUe3lzVhjNGNHqQ==
application:metabase-encryption-secret-key:
secure: AAABAGmfVICD8sR+IE6mHC8BNUY1WQXGCbv5F3C1fSgA+1ADiRem3GNrwY0YRZociRYuPIo3MIRS0aIg44jt10SBCE0ik58wHamcKA==
application:metabasePgPassword:
diff --git a/infrastructure/application/index.ts b/infrastructure/application/index.ts
index c92f558199..72b80554eb 100644
--- a/infrastructure/application/index.ts
+++ b/infrastructure/application/index.ts
@@ -421,6 +421,10 @@ export = async () => {
name: "IDOX_NEXUS_SUBMISSION_URL",
value: config.requireSecret("idox-nexus-submission-url"),
},
+ {
+ name: "MAPBOX_ACCESS_TOKEN",
+ value: config.requireSecret("mapbox-access-token"),
+ },
generateCORSAllowList(CUSTOM_DOMAINS, DOMAIN),
...generateTeamSecrets(config, env),
],
diff --git a/scripts/pull-secrets.sh b/scripts/pull-secrets.sh
index deb2863074..86bdc61e3b 100755
--- a/scripts/pull-secrets.sh
+++ b/scripts/pull-secrets.sh
@@ -8,6 +8,7 @@ then
aws s3 cp s3://pizza-secrets/root.env ./../.env
aws s3 cp s3://pizza-secrets/api.env.test ./../api.planx.uk/.env.test
aws s3 cp s3://pizza-secrets/hasura.env.test ./../hasura.planx.uk/.env.test
+ aws s3 cp s3://pizza-secrets/editor.env ./../editor.planx.uk/.env
else
echo "Fetching secrets for developer"
profile=${1:-default}
@@ -15,6 +16,7 @@ else
aws s3 cp s3://pizza-secrets/root.env ./../.env --profile $profile
aws s3 cp s3://pizza-secrets/api.env.test ./../api.planx.uk/.env.test --profile $profile
aws s3 cp s3://pizza-secrets/hasura.env.test ./../hasura.planx.uk/.env.test --profile $profile
+ aws s3 cp s3://pizza-secrets/editor.env ./../editor.planx.uk/.env --profile $profile
fi
echo "Complete: Secrets from S3 copied to local machine"
diff --git a/scripts/push-secrets.sh b/scripts/push-secrets.sh
index 73aae14e9f..cb7f3a74bc 100755
--- a/scripts/push-secrets.sh
+++ b/scripts/push-secrets.sh
@@ -7,4 +7,5 @@ aws sso login --profile $profile
aws s3 cp ./../.env s3://pizza-secrets/root.env --profile $profile
aws s3 cp ./../api.planx.uk/.env.test s3://pizza-secrets/api.env.test --profile $profile
aws s3 cp ./../hasura.planx.uk/.env.test s3://pizza-secrets/hasura.env.test --profile $profile
+aws s3 cp ./../editor.planx.uk/.env s3://pizza-secrets/editor.env --profile $profile
echo "Complete: Secrets from local machine pushed to S3"
\ No newline at end of file