From e29aa696f977ad51b5dfdca1efffe8304e021d87 Mon Sep 17 00:00:00 2001 From: Harish Date: Thu, 8 Feb 2024 14:17:58 +0800 Subject: [PATCH 1/3] allow apng ext (#1122) --- src/utils/file-upload-utils.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/utils/file-upload-utils.js b/src/utils/file-upload-utils.js index d9f80fe38..e00291ded 100644 --- a/src/utils/file-upload-utils.js +++ b/src/utils/file-upload-utils.js @@ -13,6 +13,7 @@ const CLOUDMERSIVE_API_KEY = config.get("cloudmersiveKey") const ALLOWED_FILE_EXTENSIONS = [ "pdf", "png", + "apng", "jpg", "jpeg", "gif", From fb4c27fb6a6cde9dbd42145ca01aef015c256454 Mon Sep 17 00:00:00 2001 From: seaerchin <44049504+seaerchin@users.noreply.github.com> Date: Thu, 8 Feb 2024 15:11:06 +0800 Subject: [PATCH 2/3] fix(ecs): misc fixes for deployment workflow for staging (#1114) * fix(deploy-staging): update workflow * fix(task-def): update * fix(dpeloy_staging): update * fix(apsppec): add codeploy stuff * fix(task-def): update * fix(task-definition): update volumes path * fix(package): update env var injection * fix(task-def): add missing env vars * empty * fix(ecs): chnage log group * fix(tsk-def): add missing vars * fix(scripts): update env var injetdion * fix(dockerfile): update dockerfile * docs(unliknedpageservice): add a comment to avoid confusing ppl * fix(task-def): update prod values * fix(dockerfile): update key injection * feat(task-def): add env vars * fix(env): update env type injection * feat(task-def): enable init process * fix(task-def): update env vars * refactor(workflows): update ci + staging --- .aws/deploy/appspec.json | 17 +++++ .aws/deploy/backend-task-definition.prod.json | 72 ++++++++++++++++--- .../backend-task-definition.staging.json | 64 ++++++++++++++--- .github/workflows/aws_deploy.yml | 19 ++++- .github/workflows/ci.yml | 8 +-- .github/workflows/deploy_staging.yml | 12 ++-- Dockerfile | 4 +- package.json | 4 +- scripts/02_fetch_ssh_keys.sh | 14 +++- .../MdPageServices/UnlinkedPageService.js | 1 + 10 files changed, 181 insertions(+), 34 deletions(-) create mode 100644 .aws/deploy/appspec.json diff --git a/.aws/deploy/appspec.json b/.aws/deploy/appspec.json new file mode 100644 index 000000000..65dcb2edf --- /dev/null +++ b/.aws/deploy/appspec.json @@ -0,0 +1,17 @@ +{ + "version": 1, + "Resources": [ + { + "TargetService": { + "Type": "AWS::ECS::Service", + "Properties": { + "TaskDefinition": "arn:aws:ecs:ap-southeast-1::task-definition/isomer--ecs:1", + "LoadBalancerInfo": { + "ContainerName": "backend", + "ContainerPort": 8081 + } + } + } + } + ] +} diff --git a/.aws/deploy/backend-task-definition.prod.json b/.aws/deploy/backend-task-definition.prod.json index b4e16eb06..3be62b171 100644 --- a/.aws/deploy/backend-task-definition.prod.json +++ b/.aws/deploy/backend-task-definition.prod.json @@ -10,7 +10,7 @@ } ], "essential": true, - "environment": [], + "environment": [{ "name": "ENV_TYPE", "value": "PROD" }], "mountPoints": [ { "sourceVolume": "ggs-efs", @@ -18,6 +18,9 @@ "readOnly": false } ], + "linuxParameters": { + "initProcessEnabled": true + }, "volumesFrom": [], "secrets": [ { @@ -63,6 +66,10 @@ "valueFrom": "PROD_FF_DEPRECATE_SITE_QUEUES" }, { "name": "FRONTEND_URL", "valueFrom": "PROD_FRONTEND_URL" }, + { + "name": "GGS_REPAIR_FORM_KEY", + "valueFrom": "PROD_GGS_REPAIR_FORM_KEY" + }, { "name": "GGS_EXPERIMENTAL_TRACKING_SITES", "valueFrom": "PROD_GGS_EXPERIMENTAL_TRACKING_SITES" @@ -113,6 +120,55 @@ { "name": "POSTMAN_SMS_CRED_NAME", "valueFrom": "PROD_POSTMAN_SMS_CRED_NAME" + }, + { + "name": "REDIRECT_URI", + "valueFrom": "PROD_REDIRECT_URI" + }, + { + "name": "SESSION_SECRET", + "valueFrom": "PROD_SESSION_SECRET" + }, + { "name": "SGID_CLIENT_ID", "valueFrom": "PROD_SGID_CLIENT_ID" }, + { + "name": "SGID_CLIENT_SECRET", + "valueFrom": "PROD_SGID_CLIENT_SECRET" + }, + { + "name": "SGID_REDIRECT_URI", + "valueFrom": "PROD_SGID_REDIRECT_URI" + }, + { + "name": "SGID_PRIVATE_KEY", + "valueFrom": "PROD_SGID_PRIVATE_KEY" + }, + { + "name": "SITE_CREATE_FORM_KEY", + "valueFrom": "PROD_SITE_CREATE_FORM_KEY" + }, + { + "name": "SITE_LAUNCH_FORM_KEY", + "valueFrom": "PROD_SITE_LAUNCH_FORM_KEY" + }, + { + "name": "SITE_PASSWORD_SECRET_KEY", + "valueFrom": "PROD_SITE_PASSWORD_SECRET_KEY" + }, + { + "name": "PROD_SSH_PUBLIC_KEY", + "valueFrom": "PROD_SSH_PUBLIC_KEY" + }, + { + "name": "PROD_SSH_PRIVATE_KEY", + "valueFrom": "PROD_SSH_PRIVATE_KEY" + }, + { + "name": "STEP_FUNCTIONS_ARN", + "valueFrom": "PROD_STEP_FUNCTIONS_ARN" + }, + { + "name": "SYSTEM_GITHUB_TOKEN", + "valueFrom": "PROD_SYSTEM_GITHUB_TOKEN" } ], "logConfiguration": { @@ -170,19 +226,19 @@ }, { "name": "DD_AGENT_MAJOR_VERSION", - "value": 7 + "value": "7" }, { "name": "DD_LOGS_INJECTION", - "value": true + "value": "true" }, { "name": "DD_TRACE_STARTUP_LOGS", - "value": true + "value": "true" }, { "name": "DD_API_KEY", - "valueFrom": "" + "value": "" } ], "mountPoints": [], @@ -205,7 +261,7 @@ "name": "ggs-efs", "efsVolumeConfiguration": { "fileSystemId": "", - "rootDirectory": "/efs" + "rootDirectory": "/" } } ], @@ -214,8 +270,8 @@ "operatingSystemFamily": "LINUX" }, "requiresCompatibilities": ["FARGATE"], - "taskRoleArn": "arn:aws:iam:::role/isomer-infra-github-oidc-role-16ea937", - "executionRoleArn": "arn:aws:iam:::role/isomer-infra-github-oidc-role-16ea937", + "taskRoleArn": "arn:aws:iam:::role/isomer-prod-ecs-task-role", + "executionRoleArn": "arn:aws:iam:::role/isomer-prod-ecs-task-exec-role", "cpu": "1024", "memory": "8192" } diff --git a/.aws/deploy/backend-task-definition.staging.json b/.aws/deploy/backend-task-definition.staging.json index 576304a5b..b58fc2b05 100644 --- a/.aws/deploy/backend-task-definition.staging.json +++ b/.aws/deploy/backend-task-definition.staging.json @@ -18,6 +18,9 @@ "readOnly": false } ], + "linuxParameters": { + "initProcessEnabled": true + }, "volumesFrom": [], "secrets": [ { @@ -72,6 +75,10 @@ "valueFrom": "STAGING_FF_DEPRECATE_SITE_QUEUES" }, { "name": "FRONTEND_URL", "valueFrom": "STAGING_FRONTEND_URL" }, + { + "name": "GGS_REPAIR_FORM_KEY", + "valueFrom": "STAGING_GGS_REPAIR_FORM_KEY" + }, { "name": "GGS_EXPERIMENTAL_TRACKING_SITES", "valueFrom": "STAGING_GGS_EXPERIMENTAL_TRACKING_SITES" @@ -123,6 +130,39 @@ "name": "POSTMAN_SMS_CRED_NAME", "valueFrom": "STAGING_POSTMAN_SMS_CRED_NAME" }, + { + "name": "REDIRECT_URI", + "valueFrom": "STAGING_REDIRECT_URI" + }, + { + "name": "SESSION_SECRET", + "valueFrom": "STAGING_SESSION_SECRET" + }, + { "name": "SGID_CLIENT_ID", "valueFrom": "STAGING_SGID_CLIENT_ID" }, + { + "name": "SGID_CLIENT_SECRET", + "valueFrom": "STAGING_SGID_CLIENT_SECRET" + }, + { + "name": "SGID_REDIRECT_URI", + "valueFrom": "STAGING_SGID_REDIRECT_URI" + }, + { + "name": "SGID_PRIVATE_KEY", + "valueFrom": "STAGING_SGID_PRIVATE_KEY" + }, + { + "name": "SITE_CREATE_FORM_KEY", + "valueFrom": "STAGING_SITE_CREATE_FORM_KEY" + }, + { + "name": "SITE_LAUNCH_FORM_KEY", + "valueFrom": "STAGING_SITE_LAUNCH_FORM_KEY" + }, + { + "name": "SITE_PASSWORD_SECRET_KEY", + "valueFrom": "STAGING_SITE_PASSWORD_SECRET_KEY" + }, { "name": "STAGING_SSH_PUBLIC_KEY", "valueFrom": "STAGING_SSH_PUBLIC_KEY" @@ -130,12 +170,20 @@ { "name": "STAGING_SSH_PRIVATE_KEY", "valueFrom": "STAGING_SSH_PRIVATE_KEY" + }, + { + "name": "STEP_FUNCTIONS_ARN", + "valueFrom": "STAGING_STEP_FUNCTIONS_ARN" + }, + { + "name": "SYSTEM_GITHUB_TOKEN", + "valueFrom": "STAGING_SYSTEM_GITHUB_TOKEN" } ], "logConfiguration": { "logDriver": "awslogs", "options": { - "awslogs-group": "/aws/elasticbeanstalk/cms-backend-prod-node18/var/log/web.stdout.log", + "awslogs-group": "/aws/elasticbeanstalk/cms-backend-staging-node18/var/log/web.stdout.log", "awslogs-region": "ap-southeast-1", "awslogs-stream-prefix": "ecs" } @@ -187,19 +235,19 @@ }, { "name": "DD_AGENT_MAJOR_VERSION", - "value": 7 + "value": "7" }, { "name": "DD_LOGS_INJECTION", - "value": true + "value": "true" }, { "name": "DD_TRACE_STARTUP_LOGS", - "value": true + "value": "true" }, { "name": "DD_API_KEY", - "valueFrom": "" + "value": "" } ], "mountPoints": [], @@ -222,7 +270,7 @@ "name": "ggs-efs", "efsVolumeConfiguration": { "fileSystemId": "", - "rootDirectory": "/efs" + "rootDirectory": "/" } } ], @@ -231,8 +279,8 @@ "operatingSystemFamily": "LINUX" }, "requiresCompatibilities": ["FARGATE"], - "taskRoleArn": "arn:aws:iam:::role/isomer-infra-github-oidc-role-16ea937", - "executionRoleArn": "arn:aws:iam:::role/isomer-infra-github-oidc-role-16ea937", + "taskRoleArn": "arn:aws:iam:::role/isomer-stg-ecs-task-role", + "executionRoleArn": "arn:aws:iam:::role/isomer-stg-ecs-task-exec-role", "cpu": "1024", "memory": "8192" } diff --git a/.github/workflows/aws_deploy.yml b/.github/workflows/aws_deploy.yml index ffa6196ce..860ccb106 100644 --- a/.github/workflows/aws_deploy.yml +++ b/.github/workflows/aws_deploy.yml @@ -39,6 +39,15 @@ on: description: "Path to task definition file" required: true type: string + codedeploy-application: + description: 'CodeDeploy application to use' + required: true + type: string + codedeploy-deployment-group: + description: 'CodeDeploy deployment group to use' + required: true + type: string + secrets: AWS_ACCOUNT_ID: description: "AWS account ID to deploy to" @@ -114,6 +123,11 @@ jobs: sed -i 's//${{ secrets.EFS_FILE_SYSTEM_ID }}/g' ${{ inputs.task-definition-path }} sed -i 's//${{ secrets.DD_API_KEY }}/g' ${{ inputs.task-definition-path }} + - name: Replace variables in appspec + run: | + sed -i 's//${{ secrets.AWS_ACCOUNT_ID }}/g' .aws/deploy/appspec.json + sed -i 's//${{ inputs.shortEnv }}/g' .aws/deploy/appspec.json + - name: Fill in the new image ID in the Amazon ECS task definition id: task-def uses: aws-actions/amazon-ecs-render-task-definition@v1 @@ -128,4 +142,7 @@ jobs: task-definition: ${{ steps.task-def.outputs.task-definition }} cluster: ${{ inputs.ecs-cluster-name }} service: ${{ inputs.ecs-web-service-name }} - wait-for-service-stability: true \ No newline at end of file + wait-for-service-stability: true + codedeploy-appspec: .aws/deploy/appspec.json + codedeploy-application: ${{ inputs.codedeploy-application }} + codedeploy-deployment-group: ${{ inputs.codedeploy-deployment-group }} \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d53c39024..97a2fb012 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -102,8 +102,7 @@ jobs: import os ref = os.environ['GITHUB_REF'] prod = os.environ['PRODUCTION_BRANCH'] - staging = os.environ['STAGING_BRANCH'] - if ref == prod or ref == staging: + if ref == prod: print('::set-output name=proceed::true') else: print('::set-output name=proceed::false') @@ -162,16 +161,11 @@ jobs: import os branch = os.environ['GITHUB_REF'] production = os.environ['PRODUCTION_BRANCH'] - staging = os.environ['STAGING_BRANCH'] eb_app = os.environ['EB_APP'] eb_env_production = os.environ['EB_ENV_PRODUCTION'] - eb_env_staging = os.environ['EB_ENV_STAGING'] if branch == production: print('::set-output name=eb_app::' + eb_app) print('::set-output name=eb_env::' + eb_env_production) - elif branch == staging: - print('::set-output name=eb_app::' + eb_app) - print('::set-output name=eb_env::' + eb_env_staging) id: select_eb_vars - name: Deploy to EB uses: opengovsg/beanstalk-deploy@v11 diff --git a/.github/workflows/deploy_staging.yml b/.github/workflows/deploy_staging.yml index d7d7423a5..2d815c9c2 100644 --- a/.github/workflows/deploy_staging.yml +++ b/.github/workflows/deploy_staging.yml @@ -7,8 +7,7 @@ concurrency: on: push: branches: - # TODO: Update this to allow `staging` once ecs deploys work - # - staging + - staging - feat/ecs jobs: @@ -19,12 +18,15 @@ jobs: aws-region: "ap-southeast-1" cicd-role: "arn:aws:iam::095733531422:role/isomer-infra-github-oidc-role-16ea937" ecr-repository: "isomer-infra-staging-ecr" - ecs-cluster-name: "isomer-infra-staging-ecs" - ecs-web-service-name: "isomer-infra-staging-ecs-service" + ecs-cluster-name: "isomer-stg-ecs" + ecs-web-service-name: "isomer-stg-ecs-service" ecs-container-name: "backend" environment: "staging" shortEnv: "stg" - task-definition-path: ".aws/deploy/backend-task-definition.staging.json" + task-definition-path: ".aws/deploy/backend-task-definition.staging.json" + codedeploy-application: "isomer-stg-ecs-app" + codedeploy-deployment-group: "isomer-stg-ecs-dg" + secrets: AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} EFS_FILE_SYSTEM_ID: ${{ secrets.STAGING_EFS_FILE_SYSTEM_ID }} diff --git a/Dockerfile b/Dockerfile index c010f5dc5..940385586 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,5 +19,7 @@ RUN npm ci # NOTE: Removing the cache here to keep the image small RUN rm -rf /var/cache/apk/* +RUN git config --system --add safe.directory '*' + EXPOSE "8081" -CMD ["bash", "-c", "chmod +x ./scripts/02_fetch_ssh_keys.sh && bash ./scripts/02_fetch_ssh_keys.sh & npm run dev:server"] +CMD ["bash", "-c", "chmod +x ./scripts/02_fetch_ssh_keys.sh && bash ./scripts/02_fetch_ssh_keys.sh & npm run start:ecs"] diff --git a/package.json b/package.json index fc47bb739..b4221745a 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "scripts": { "build": "tsc -p tsconfig.build.json", "start": "node --unhandled-rejections=warn -r ts-node/register/transpile-only -r tsconfig-paths/register -r dotenv/config build/server.js dotenv_config_path=/efs/isomer/.isomer.env", - "dev:server": "source .env && ts-node-dev --unhandled-rejections=warn --respawn src/server.js", - "dev": "docker compose -f docker-compose.dev.yml up", + "start:ecs": "ts-node-dev --unhandled-rejections=warn --respawn src/server.js", + "dev": "source .env && docker compose -f docker-compose.dev.yml up", "test:docker": "docker run -d -p 54321:5432 --name postgres -e POSTGRES_USER=isomer -e POSTGRES_PASSWORD=password -e POSTGRES_DB=isomercms_test postgres:latest", "test": "source .env.test && jest --runInBand", "release": "npm version $npm_config_isomer_update && git push --tags", diff --git a/scripts/02_fetch_ssh_keys.sh b/scripts/02_fetch_ssh_keys.sh index cfa5b6f7e..2e5694f8b 100755 --- a/scripts/02_fetch_ssh_keys.sh +++ b/scripts/02_fetch_ssh_keys.sh @@ -1,11 +1,21 @@ #!/bin/bash +ENV_TYPE=$ENV_TYPE + +SSH_PUBLIC_KEY_PARAM_NAME="${ENV_TYPE}_SSH_PUBLIC_KEY" +SSH_PRIVATE_KEY_PARAM_NAME="${ENV_TYPE}_SSH_PRIVATE_KEY" + +# create .ssh folder if it does not exist +mkdir -p /root/.ssh + +SSH_PUBLIC_KEY_VALUE="${!SSH_PUBLIC_KEY_PARAM_NAME}" +SSH_PRIVATE_KEY_VALUE="${!SSH_PRIVATE_KEY_PARAM_NAME}" echo "Fetching keys" -cat ./.ssh/github.pub >/root/.ssh/github.pub || { +echo "$SSH_PUBLIC_KEY_VALUE" >/root/.ssh/github.pub || { echo "Failed to fetch SSH public key" exit 1 } -cat ./.ssh/github >/root/.ssh/github || { +echo "$SSH_PRIVATE_KEY_VALUE" >/root/.ssh/github || { echo "Failed to fetch SSH private key" exit 1 } diff --git a/src/services/fileServices/MdPageServices/UnlinkedPageService.js b/src/services/fileServices/MdPageServices/UnlinkedPageService.js index 10ca45182..efa44ff49 100644 --- a/src/services/fileServices/MdPageServices/UnlinkedPageService.js +++ b/src/services/fileServices/MdPageServices/UnlinkedPageService.js @@ -11,6 +11,7 @@ const UNLINKED_PAGES_DIRECTORY_NAME = "pages" class UnlinkedPageService { constructor({ gitHubService }) { + // NOTE: This is actually `RepoService` this.gitHubService = gitHubService } From 6da2932c8961020d2eb06f997cc0a55359800729 Mon Sep 17 00:00:00 2001 From: dcshzj <27919917+dcshzj@users.noreply.github.com> Date: Thu, 8 Feb 2024 15:18:02 +0800 Subject: [PATCH 3/3] 0.63.0 --- CHANGELOG.md | 12 ++++++++++-- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0eaca55bf..a9d3e887f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,8 +4,16 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). +#### [v0.63.0](https://github.com/isomerpages/isomercms-backend/compare/v0.62.0...v0.63.0) + +- fix(ecs): misc fixes for deployment workflow for staging [`#1114`](https://github.com/isomerpages/isomercms-backend/pull/1114) +- allow apng ext [`#1122`](https://github.com/isomerpages/isomercms-backend/pull/1122) +- 0.62.0 [`#1112`](https://github.com/isomerpages/isomercms-backend/pull/1112) + #### [v0.62.0](https://github.com/isomerpages/isomercms-backend/compare/v0.61.0...v0.62.0) +> 17 January 2024 + - chore: update formsg sdk [`#1108`](https://github.com/isomerpages/isomercms-backend/pull/1108) - Fix/privatisation quickie interaction [`#1094`](https://github.com/isomerpages/isomercms-backend/pull/1094) - chore: copy instead of clone [`#1095`](https://github.com/isomerpages/isomercms-backend/pull/1095) @@ -100,12 +108,12 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - fix(siteCreate): add redirect rules [`#1036`](https://github.com/isomerpages/isomercms-backend/pull/1036) - chore: remove extra and unused submodules [`#1031`](https://github.com/isomerpages/isomercms-backend/pull/1031) - release/0.54.0 [`#1033`](https://github.com/isomerpages/isomercms-backend/pull/1033) -- fix: use cTimeMs instead of birthtime due to EFS [`#1035`](https://github.com/isomerpages/isomercms-backend/pull/1035) #### [v0.54.0](https://github.com/isomerpages/isomercms-backend/compare/v0.53.0...v0.54.0) > 14 November 2023 +- fix: use cTimeMs instead of birthtime due to EFS [`#1035`](https://github.com/isomerpages/isomercms-backend/pull/1035) - fix(pagination): total length [`#1032`](https://github.com/isomerpages/isomercms-backend/pull/1032) - fix(staging-lite): apps were created for wrong br [`#1014`](https://github.com/isomerpages/isomercms-backend/pull/1014) - fix(cm): extra timeout [`#1027`](https://github.com/isomerpages/isomercms-backend/pull/1027) @@ -232,12 +240,12 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - build(deps-dev): bump @babel/traverse from 7.22.8 to 7.23.2 [`#984`](https://github.com/isomerpages/isomercms-backend/pull/984) - release/v0.48.0 [`#979`](https://github.com/isomerpages/isomercms-backend/pull/979) - feat(staging-id): add column to store the id [`#983`](https://github.com/isomerpages/isomercms-backend/pull/983) -- Fix: collaborators service tests [`#978`](https://github.com/isomerpages/isomercms-backend/pull/978) #### [v0.48.0](https://github.com/isomerpages/isomercms-backend/compare/v0.47.0...v0.48.0) > 18 October 2023 +- Fix: collaborators service tests [`#978`](https://github.com/isomerpages/isomercms-backend/pull/978) - chore(commitService): proper naming [`#975`](https://github.com/isomerpages/isomercms-backend/pull/975) - Feat/is 585 govt sgid login rollout [`#976`](https://github.com/isomerpages/isomercms-backend/pull/976) - test(quickie): unit tests [`#973`](https://github.com/isomerpages/isomercms-backend/pull/973) diff --git a/package-lock.json b/package-lock.json index b966e5d4c..0585a3cda 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "isomercms", - "version": "0.62.0", + "version": "0.63.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "isomercms", - "version": "0.62.0", + "version": "0.63.0", "dependencies": { "@aws-sdk/client-amplify": "^3.370.0", "@aws-sdk/client-cloudwatch-logs": "^3.370.0", diff --git a/package.json b/package.json index b4221745a..ccb79c8de 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "isomercms", - "version": "0.62.0", + "version": "0.63.0", "private": true, "scripts": { "build": "tsc -p tsconfig.build.json",