From cfaccb13711d2e6a356cd7b503974d5d33b40f3b Mon Sep 17 00:00:00 2001 From: pwadmore-ea <8915039+pwadmore-ea@users.noreply.github.com> Date: Thu, 26 Mar 2026 09:15:44 +0000 Subject: [PATCH 01/11] feature/NI-169-pin-localstack-version https://eaflood.atlassian.net/browse/NI-169 Use the final version of LocalStack community edition while alternatives are considered (see https://blog.localstack.cloud/localstack-for-aws-release-2026-03-0/) From 252bd6c79a103aa247180bc7dd53d51eb27bd2c4 Mon Sep 17 00:00:00 2001 From: pwadmore-ea <8915039+pwadmore-ea@users.noreply.github.com> Date: Fri, 27 Mar 2026 12:32:12 +0000 Subject: [PATCH 02/11] Pin Localstack community edition version --- docker/infrastructure.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/infrastructure.yml b/docker/infrastructure.yml index 81a9b03..ff88ba3 100644 --- a/docker/infrastructure.yml +++ b/docker/infrastructure.yml @@ -1,7 +1,7 @@ services: localstack: container_name: "localstack-main" - image: localstack/localstack:latest + image: localstack/localstack:4.14.0 ports: - "127.0.0.1:4566:4566" # LocalStack Gateway - "127.0.0.1:4510-4559:4510-4559" # external services port range From b305d079bef552d26fd4f63bce49e8d2a567c919 Mon Sep 17 00:00:00 2001 From: pwadmore-ea <8915039+pwadmore-ea@users.noreply.github.com> Date: Wed, 1 Apr 2026 18:33:03 +0100 Subject: [PATCH 03/11] Address SonarQube cloud issues --- .github/workflows/ci.yml | 4 ++++ docker/scripts/register-api-gateway.sh | 33 +++++++++++++++++--------- 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 78b4929..11138e9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,3 +38,7 @@ jobs: -Dsonar.exclusions=**/node_modules/**,**/test/**,**/test-output/** -Dsonar.javascript.lcov.reportPaths=coverage/lcov.info -Dsonar.javascript.exclusions=**/node_modules/**,**/test/**,**/test-output/**,**/mock/**,**/public/** + -Dsonar.issue.ignore.multicriteria=e1 + -Dsonar.issue.ignore.multicriteria.e1.ruleKey=secrets:S2068 + -Dsonar.issue.ignore.multicriteria.e1.resourceKey=**/docker/.env + diff --git a/docker/scripts/register-api-gateway.sh b/docker/scripts/register-api-gateway.sh index 4f2414a..688f0bf 100755 --- a/docker/scripts/register-api-gateway.sh +++ b/docker/scripts/register-api-gateway.sh @@ -42,6 +42,7 @@ main() { --stage-name local echo "Created API Gateway deployment" + return 0 } get_http_method() { @@ -50,12 +51,14 @@ get_http_method() { else echo GET fi + return 0 } register_api_gateway_support_for_get_message() { get_message_resource_id=$(create_resource $cap_xml_rest_api_root_resource_id "message") message_resource_id=$(create_resource $get_message_resource_id "{id}") put_method_and_integration $message_resource_id + return 0 } register_api_gateway_support_for_get_message_v2() { @@ -71,6 +74,7 @@ register_api_gateway_support_for_get_message_v2() { register_api_gateway_support_for_get_messages_atom() { get_messages_atom_resource_id=$(create_resource $cap_xml_rest_api_root_resource_id "messages.atom") put_method_and_integration $get_messages_atom_resource_id + return 0 } register_api_gateway_support_for_get_messages_atom_v2() { @@ -85,6 +89,7 @@ register_api_gateway_support_for_get_messages_atom_v2() { register_api_gateway_support_for_process_message() { process_message_resource_id=$(create_resource $cap_xml_rest_api_root_resource_id "message") put_method_and_integration $process_message_resource_id + return 0 } create_resource() { @@ -92,6 +97,7 @@ create_resource() { --rest-api-id $cap_xml_rest_api_id \ --parent-id $1 \ --path-part $2 | jq -r '.id') + return 0 } put_method_and_integration() { @@ -111,7 +117,7 @@ get_request_parameters() { if [ $lambda_function_name = "getMessage" ]; then echo --request-parameters "method.request.path.id=true" fi - return + return 0 } put_integration() { @@ -165,10 +171,12 @@ put_integration() { put_responses_for_process_message ;; - + *) + echo "Unable to configure integration for unexpected function $lambda_function_name" + ;; esac - return + return 0 } put_method_response_for_http_200_status_code() { @@ -176,13 +184,13 @@ put_method_response_for_http_200_status_code() { # by a function. This results in some duplication. case $lambda_function_name in getMessage|getMessagesAtom) - awslocal apigateway put-method-response \ - --rest-api-id $cap_xml_rest_api_id \ - --resource-id $resource_id \ - --http-method $http_method \ - --status-code 200 \ - --response-models '{"application/xml": "Empty"}' - ;; + awslocal apigateway put-method-response \ + --rest-api-id $cap_xml_rest_api_id \ + --resource-id $resource_id \ + --http-method $http_method \ + --status-code 200 \ + --response-models '{"application/xml": "Empty"}' + ;; processMessage) awslocal apigateway put-method-response \ --rest-api-id $cap_xml_rest_api_id \ @@ -190,7 +198,10 @@ put_method_response_for_http_200_status_code() { --http-method $http_method \ --status-code 200 \ --response-models '{"application/json": "Empty"}' - ;; + ;; + *) + echo "Unable to configure method response for unexpected function $lambda_function_name" + ;; esac } From 4312044fa7a92035fd1c5cc9b9a440d2466b37f0 Mon Sep 17 00:00:00 2001 From: pwadmore-ea <8915039+pwadmore-ea@users.noreply.github.com> Date: Thu, 2 Apr 2026 11:42:43 +0100 Subject: [PATCH 04/11] Address SonarQube cloud issues --- .github/workflows/ci.yml | 9 +++++---- docker/scripts/install-packages.sh | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 11138e9..4c658b6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,7 +38,8 @@ jobs: -Dsonar.exclusions=**/node_modules/**,**/test/**,**/test-output/** -Dsonar.javascript.lcov.reportPaths=coverage/lcov.info -Dsonar.javascript.exclusions=**/node_modules/**,**/test/**,**/test-output/**,**/mock/**,**/public/** - -Dsonar.issue.ignore.multicriteria=e1 - -Dsonar.issue.ignore.multicriteria.e1.ruleKey=secrets:S2068 - -Dsonar.issue.ignore.multicriteria.e1.resourceKey=**/docker/.env - + -Dsonar.issue.ignore.multicriteria=e1,e2 + -Dsonar.issue.ignore.multicriteria.e1.ruleKey=secrets:S5332 + -Dsonar.issue.ignore.multicriteria.e1.resourceKey=**/docker/scripts/register-lambda-functions.sh,**/docker/scripts/load-dummy-data.sh + -Dsonar.issue.ignore.multicriteria.e2.ruleKey=secrets:S2068 + -Dsonar.issue.ignore.multicriteria.e2.resourceKey=**/docker/.env diff --git a/docker/scripts/install-packages.sh b/docker/scripts/install-packages.sh index b2aeab3..3cd50f6 100755 --- a/docker/scripts/install-packages.sh +++ b/docker/scripts/install-packages.sh @@ -4,7 +4,7 @@ set -e # Remove /etc/apt/sources.list.d/backports.list to resolve apt duplication warnings rm -f /etc/apt/sources.list.d/backports.list # Install Nodesource package signing key and the Node.js repository. -curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --yes --dearmor -o /usr/share/keyrings/nodesource.gpg +curl --proto "=https" --tlsv1.2 -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --yes --dearmor -o /usr/share/keyrings/nodesource.gpg echo "deb [signed-by=/usr/share/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODEJS_VERSION}.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list > /dev/null # Install packages apt update -y && \ From a11be66b8893e6450df0de52e87b23ed1827edd3 Mon Sep 17 00:00:00 2001 From: pwadmore-ea <8915039+pwadmore-ea@users.noreply.github.com> Date: Thu, 2 Apr 2026 11:49:07 +0100 Subject: [PATCH 05/11] Address SonarQube cloud issues --- .github/workflows/ci.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4c658b6..3427626 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,8 +38,10 @@ jobs: -Dsonar.exclusions=**/node_modules/**,**/test/**,**/test-output/** -Dsonar.javascript.lcov.reportPaths=coverage/lcov.info -Dsonar.javascript.exclusions=**/node_modules/**,**/test/**,**/test-output/**,**/mock/**,**/public/** - -Dsonar.issue.ignore.multicriteria=e1,e2 + -Dsonar.issue.ignore.multicriteria=e1,e2,e3 -Dsonar.issue.ignore.multicriteria.e1.ruleKey=secrets:S5332 - -Dsonar.issue.ignore.multicriteria.e1.resourceKey=**/docker/scripts/register-lambda-functions.sh,**/docker/scripts/load-dummy-data.sh - -Dsonar.issue.ignore.multicriteria.e2.ruleKey=secrets:S2068 - -Dsonar.issue.ignore.multicriteria.e2.resourceKey=**/docker/.env + -Dsonar.issue.ignore.multicriteria.e1.resourceKey=**/docker/scripts/register-lambda-functions.sh + -Dsonar.issue.ignore.multicriteria.e2.ruleKey=secrets:S5332 + -Dsonar.issue.ignore.multicriteria.e2.resourceKey=**/docker/scripts/load-dummy-data.sh + -Dsonar.issue.ignore.multicriteria.e3.ruleKey=secrets:S2068 + -Dsonar.issue.ignore.multicriteria.e3.resourceKey=**/docker/.env From 36e2a83eebce4459edc6bae22eb915b3ed14271a Mon Sep 17 00:00:00 2001 From: pwadmore-ea <8915039+pwadmore-ea@users.noreply.github.com> Date: Thu, 2 Apr 2026 12:16:50 +0100 Subject: [PATCH 06/11] Address SonarQube cloud issues --- docker/scripts/register-api-gateway.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docker/scripts/register-api-gateway.sh b/docker/scripts/register-api-gateway.sh index 688f0bf..5e8fbd4 100755 --- a/docker/scripts/register-api-gateway.sh +++ b/docker/scripts/register-api-gateway.sh @@ -111,6 +111,7 @@ put_method_and_integration() { $(get_request_parameters $lambda_function_name) put_integration + return 0 } get_request_parameters() { @@ -227,6 +228,7 @@ put_responses_for_get_message() { put_responses_for_get_messages_atom() { put_responses_for_http_200_get put_integration_response_for_http_500 + return 0 } put_responses_for_process_message() { @@ -238,6 +240,7 @@ put_responses_for_process_message() { put_method_response_for_http_200_status_code put_integration_response_for_http_500 + return 0 } put_responses_for_http_200_get() { From 5d0b20efe12520657405fc5f6d6bdd5c69f8cf61 Mon Sep 17 00:00:00 2001 From: pwadmore-ea <8915039+pwadmore-ea@users.noreply.github.com> Date: Thu, 2 Apr 2026 12:26:25 +0100 Subject: [PATCH 07/11] Address SonarQube cloud issues --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3427626..6e7a152 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,9 +39,9 @@ jobs: -Dsonar.javascript.lcov.reportPaths=coverage/lcov.info -Dsonar.javascript.exclusions=**/node_modules/**,**/test/**,**/test-output/**,**/mock/**,**/public/** -Dsonar.issue.ignore.multicriteria=e1,e2,e3 - -Dsonar.issue.ignore.multicriteria.e1.ruleKey=secrets:S5332 + -Dsonar.issue.ignore.multicriteria.e1.ruleKey=shell:S5332 -Dsonar.issue.ignore.multicriteria.e1.resourceKey=**/docker/scripts/register-lambda-functions.sh - -Dsonar.issue.ignore.multicriteria.e2.ruleKey=secrets:S5332 + -Dsonar.issue.ignore.multicriteria.e2.ruleKey=shell:S5332 -Dsonar.issue.ignore.multicriteria.e2.resourceKey=**/docker/scripts/load-dummy-data.sh -Dsonar.issue.ignore.multicriteria.e3.ruleKey=secrets:S2068 -Dsonar.issue.ignore.multicriteria.e3.resourceKey=**/docker/.env From 12f26d3b893580b9dbd2e650ffd35ccc5ed37482 Mon Sep 17 00:00:00 2001 From: pwadmore-ea <8915039+pwadmore-ea@users.noreply.github.com> Date: Thu, 2 Apr 2026 12:32:08 +0100 Subject: [PATCH 08/11] Address SonarQube cloud issues --- docker/scripts/register-api-gateway.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docker/scripts/register-api-gateway.sh b/docker/scripts/register-api-gateway.sh index 5e8fbd4..2dd8d68 100755 --- a/docker/scripts/register-api-gateway.sh +++ b/docker/scripts/register-api-gateway.sh @@ -204,6 +204,7 @@ put_method_response_for_http_200_status_code() { echo "Unable to configure method response for unexpected function $lambda_function_name" ;; esac + return 0 } put_responses_for_get_message() { @@ -223,6 +224,7 @@ put_responses_for_get_message() { --response-templates '{"application/json": "{\"errorMessage\": $input.json(\"$.errorMessage\")}"}' put_integration_response_for_http_500 + return 0 } put_responses_for_get_messages_atom() { @@ -254,6 +256,7 @@ put_responses_for_http_200_get() { --status-code 200 \ --response-parameters '{"method.response.header.content-type": "integration.response.body.headers.content-type"}' \ --response-templates '{"application/xml" : "#set($inputRoot = $input.path(\"$\"))\n$inputRoot.body"}' + return 0 } put_integration_response_for_http_500() { @@ -266,6 +269,7 @@ put_integration_response_for_http_500() { --response-parameters '{"method.response.header.content-type": "integration.response.body.headers.content-type"}' \ --response-templates '{"application/json": "{\"errorMessage\": $input.json(\"$.errorMessage\")}"}' \ --selection-pattern '(\n|.)+' + return 0 } main "$@" \ No newline at end of file From 419205ffcd92a79eefb6847c02541b4c231b91f4 Mon Sep 17 00:00:00 2001 From: pwadmore-ea <8915039+pwadmore-ea@users.noreply.github.com> Date: Thu, 2 Apr 2026 12:57:59 +0100 Subject: [PATCH 09/11] Address SonarQube cloud issues --- docker/scripts/register-api-gateway.sh | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docker/scripts/register-api-gateway.sh b/docker/scripts/register-api-gateway.sh index 2dd8d68..d8d6c33 100755 --- a/docker/scripts/register-api-gateway.sh +++ b/docker/scripts/register-api-gateway.sh @@ -46,7 +46,8 @@ main() { } get_http_method() { - if [ $1 = "processMessage" ]; then + lambda_function_name=$1 + if [ $lambda_function_name = "processMessage" ]; then echo POST else echo GET @@ -93,10 +94,12 @@ register_api_gateway_support_for_process_message() { } create_resource() { + cap_xml_rest_api_root_resource_id=$1 + cap_xml_rest_api_path_part=$2 echo $(awslocal apigateway create-resource \ --rest-api-id $cap_xml_rest_api_id \ - --parent-id $1 \ - --path-part $2 | jq -r '.id') + --parent-id $cap_xml_rest_api_root_resource_id \ + --path-part $cap_xml_rest_api_path_part | jq -r '.id') return 0 } From b38b294902c59d4fc19044de80632cbd2962c7d2 Mon Sep 17 00:00:00 2001 From: pwadmore-ea <8915039+pwadmore-ea@users.noreply.github.com> Date: Thu, 2 Apr 2026 14:25:35 +0100 Subject: [PATCH 10/11] Add comments --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6e7a152..2d48c61 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -39,9 +39,11 @@ jobs: -Dsonar.javascript.lcov.reportPaths=coverage/lcov.info -Dsonar.javascript.exclusions=**/node_modules/**,**/test/**,**/test-output/**,**/mock/**,**/public/** -Dsonar.issue.ignore.multicriteria=e1,e2,e3 + # shell:S5332 - Clear text protocols are acceptable for AWS local development. -Dsonar.issue.ignore.multicriteria.e1.ruleKey=shell:S5332 -Dsonar.issue.ignore.multicriteria.e1.resourceKey=**/docker/scripts/register-lambda-functions.sh -Dsonar.issue.ignore.multicriteria.e2.ruleKey=shell:S5332 -Dsonar.issue.ignore.multicriteria.e2.resourceKey=**/docker/scripts/load-dummy-data.sh + # secrets:S2068 - Well known local development secrets are aceptable. -Dsonar.issue.ignore.multicriteria.e3.ruleKey=secrets:S2068 -Dsonar.issue.ignore.multicriteria.e3.resourceKey=**/docker/.env From da7ca8f574b22e474a9fbee6a196f770a1ae4442 Mon Sep 17 00:00:00 2001 From: pwadmore-ea <8915039+pwadmore-ea@users.noreply.github.com> Date: Thu, 2 Apr 2026 14:34:24 +0100 Subject: [PATCH 11/11] Add comments --- .github/workflows/ci.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2d48c61..43d34f3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,3 +1,6 @@ +# SonarQube cloud analysis exceptions +# shell:S5332 - Clear text protocols are acceptable for AWS local development. +# secrets:S2068 - Well known local development secrets are aceptable. name: CI on: [push, pull_request] @@ -39,11 +42,9 @@ jobs: -Dsonar.javascript.lcov.reportPaths=coverage/lcov.info -Dsonar.javascript.exclusions=**/node_modules/**,**/test/**,**/test-output/**,**/mock/**,**/public/** -Dsonar.issue.ignore.multicriteria=e1,e2,e3 - # shell:S5332 - Clear text protocols are acceptable for AWS local development. -Dsonar.issue.ignore.multicriteria.e1.ruleKey=shell:S5332 -Dsonar.issue.ignore.multicriteria.e1.resourceKey=**/docker/scripts/register-lambda-functions.sh -Dsonar.issue.ignore.multicriteria.e2.ruleKey=shell:S5332 -Dsonar.issue.ignore.multicriteria.e2.resourceKey=**/docker/scripts/load-dummy-data.sh - # secrets:S2068 - Well known local development secrets are aceptable. -Dsonar.issue.ignore.multicriteria.e3.ruleKey=secrets:S2068 -Dsonar.issue.ignore.multicriteria.e3.resourceKey=**/docker/.env