From 2294f83591848ce96b3a453603ec9bafe90c812d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 26 Sep 2024 14:54:43 -0400 Subject: [PATCH 1/5] Bump actions/checkout from 4.1.7 to 4.2.0 (#16008) Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.7 to 4.2.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/692973e3d937129bcbf40652eb9f2f61becf3332...d632683dd7b4114ad314bca15554477dd762a938) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/StaleItemsReport.yml | 2 +- .github/workflows/alert_MBUsers_Inactive.yml | 2 +- .github/workflows/alert_PD_schedule_Slack.yml | 6 +++--- .github/workflows/alert_cert_expire.yml | 2 +- .github/workflows/alert_resource_costs.yml | 2 +- .github/workflows/alert_stale_branches.yaml | 2 +- .github/workflows/alert_terraform_changes.yml | 2 +- .github/workflows/alert_version_upgrade.yml | 2 +- .github/workflows/build_frontend.yaml | 4 ++-- .github/workflows/build_hub.yml | 4 ++-- .github/workflows/cleanup_acr_images.yml | 2 +- .github/workflows/codeql.yml | 2 +- .github/workflows/dependency_review.yml | 2 +- .github/workflows/deploy_terraform.yml | 6 +++--- .github/workflows/deployment_rollback.yml | 2 +- .github/workflows/destroy_demo_environment.yml | 2 +- .github/workflows/export_cost_data.yml | 2 +- .github/workflows/frontend_chromatic_main.yml | 2 +- .github/workflows/frontend_ci.yml | 18 +++++++++--------- .github/workflows/log_management.yml | 2 +- .../workflows/prepare_deployment_branch.yaml | 2 +- .github/workflows/publish_docker.yaml | 8 ++++---- .github/workflows/release_chatops_app.yml | 4 ++-- .github/workflows/release_to_azure.yml | 16 ++++++++-------- .github/workflows/release_to_github.yml | 8 ++++---- .github/workflows/release_trial_frontend.yml | 6 +++--- .github/workflows/restore_databases.yml | 6 +++--- .github/workflows/scan_action_logs.yml | 2 +- .github/workflows/snyk.yml | 4 ++-- .github/workflows/sonarcloud.yml | 2 +- .github/workflows/start_frontend_smoke.yml | 2 +- .github/workflows/start_test_servers.yml | 2 +- .github/workflows/stop_test_servers.yml | 2 +- .github/workflows/sync-translation-schemas.yml | 2 +- .github/workflows/validate_resources.yml | 8 ++++---- .github/workflows/validate_terraform.yml | 6 +++--- 36 files changed, 74 insertions(+), 74 deletions(-) diff --git a/.github/workflows/StaleItemsReport.yml b/.github/workflows/StaleItemsReport.yml index dfe57121b8d..f3a11ee97b9 100644 --- a/.github/workflows/StaleItemsReport.yml +++ b/.github/workflows/StaleItemsReport.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 with: fetch-depth: 0 diff --git a/.github/workflows/alert_MBUsers_Inactive.yml b/.github/workflows/alert_MBUsers_Inactive.yml index 8e29bab1724..72396770da0 100644 --- a/.github/workflows/alert_MBUsers_Inactive.yml +++ b/.github/workflows/alert_MBUsers_Inactive.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 with: fetch-depth: 0 diff --git a/.github/workflows/alert_PD_schedule_Slack.yml b/.github/workflows/alert_PD_schedule_Slack.yml index 288e6d5acb2..e9593ec4d9c 100644 --- a/.github/workflows/alert_PD_schedule_Slack.yml +++ b/.github/workflows/alert_PD_schedule_Slack.yml @@ -17,7 +17,7 @@ jobs: steps: - name: "Check out changes" - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: IsMonday id: IsMonday if: github.event_name == 'schedule' && github.event.schedule == '7 13 * * Mon' @@ -37,7 +37,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 with: fetch-depth: 0 @@ -92,7 +92,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 with: fetch-depth: 0 diff --git a/.github/workflows/alert_cert_expire.yml b/.github/workflows/alert_cert_expire.yml index d5f3c088662..430ee3353d4 100644 --- a/.github/workflows/alert_cert_expire.yml +++ b/.github/workflows/alert_cert_expire.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Get runner ip id: runner_ip diff --git a/.github/workflows/alert_resource_costs.yml b/.github/workflows/alert_resource_costs.yml index 92db32281f5..0b16f6491b6 100644 --- a/.github/workflows/alert_resource_costs.yml +++ b/.github/workflows/alert_resource_costs.yml @@ -18,7 +18,7 @@ jobs: steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Login into Azure uses: ./.github/actions/vpn-azure diff --git a/.github/workflows/alert_stale_branches.yaml b/.github/workflows/alert_stale_branches.yaml index 924f781450a..2849296912d 100644 --- a/.github/workflows/alert_stale_branches.yaml +++ b/.github/workflows/alert_stale_branches.yaml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 with: fetch-depth: 0 - name: Get our Counts diff --git a/.github/workflows/alert_terraform_changes.yml b/.github/workflows/alert_terraform_changes.yml index 304479f0888..a9033ec99ba 100644 --- a/.github/workflows/alert_terraform_changes.yml +++ b/.github/workflows/alert_terraform_changes.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Connect to VPN and login to Azure uses: ./.github/actions/vpn-azure with: diff --git a/.github/workflows/alert_version_upgrade.yml b/.github/workflows/alert_version_upgrade.yml index 6d66c50dcbb..f8f1255eab8 100644 --- a/.github/workflows/alert_version_upgrade.yml +++ b/.github/workflows/alert_version_upgrade.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 with: fetch-depth: 0 diff --git a/.github/workflows/build_frontend.yaml b/.github/workflows/build_frontend.yaml index 1769065b789..49be6ce187a 100644 --- a/.github/workflows/build_frontend.yaml +++ b/.github/workflows/build_frontend.yaml @@ -29,7 +29,7 @@ jobs: version: ${{ steps.build_vars.outputs.version }} steps: - name: "Check out changes" - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Build vars id: build_vars uses: ./.github/actions/build-vars @@ -46,7 +46,7 @@ jobs: steps: - name: "Check out changes" - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Build frontend uses: ./.github/actions/build-frontend diff --git a/.github/workflows/build_hub.yml b/.github/workflows/build_hub.yml index 3774600f35e..33f4587a15f 100644 --- a/.github/workflows/build_hub.yml +++ b/.github/workflows/build_hub.yml @@ -30,7 +30,7 @@ jobs: has_router_change: ${{ steps.build_vars.outputs.has_router_change }} steps: - name: "Check out changes" - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Build vars id: build_vars uses: ./.github/actions/build-vars @@ -56,7 +56,7 @@ jobs: sudo swapon --show - name: "Check out changes" - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Build backend uses: ./.github/actions/build-backend diff --git a/.github/workflows/cleanup_acr_images.yml b/.github/workflows/cleanup_acr_images.yml index 02e42a25bc6..abf1185097a 100644 --- a/.github/workflows/cleanup_acr_images.yml +++ b/.github/workflows/cleanup_acr_images.yml @@ -13,7 +13,7 @@ jobs: env: [staging, prod] steps: - name: "Check out changes" - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Connect to VPN & Login into Azure uses: ./.github/actions/vpn-azure diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index dc1210ddb87..cda3706bbdd 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -44,7 +44,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL diff --git a/.github/workflows/dependency_review.yml b/.github/workflows/dependency_review.yml index dc956eee512..0bbf231149f 100644 --- a/.github/workflows/dependency_review.yml +++ b/.github/workflows/dependency_review.yml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Checkout Repository' - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: 'Dependency Review' uses: actions/dependency-review-action@5a2ce3f5b92ee19cbb1541a4984c76d921601d7c with: diff --git a/.github/workflows/deploy_terraform.yml b/.github/workflows/deploy_terraform.yml index 22300f7d233..3112e70fc10 100644 --- a/.github/workflows/deploy_terraform.yml +++ b/.github/workflows/deploy_terraform.yml @@ -20,7 +20,7 @@ jobs: tf_change: ${{ steps.build_vars.outputs.has_terraform_change }} steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Build vars id: build_vars uses: ./.github/actions/build-vars @@ -39,7 +39,7 @@ jobs: change_count: ${{ steps.stats1.outputs.change-count }} steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Connect to VPN and login to Azure uses: ./.github/actions/vpn-azure with: @@ -89,7 +89,7 @@ jobs: working-directory: operations/app/terraform/vars/${{ needs.pre_job.outputs.env_name }} steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Connect to VPN and login to Azure uses: ./.github/actions/vpn-azure with: diff --git a/.github/workflows/deployment_rollback.yml b/.github/workflows/deployment_rollback.yml index 3c83a690e21..35342708a52 100644 --- a/.github/workflows/deployment_rollback.yml +++ b/.github/workflows/deployment_rollback.yml @@ -29,7 +29,7 @@ jobs: exit 1 - name: "Check out changes" - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Set deployment environment run: echo "ENV=${{ github.event.inputs.environment }}" >> $GITHUB_ENV diff --git a/.github/workflows/destroy_demo_environment.yml b/.github/workflows/destroy_demo_environment.yml index e15620c53e0..a64a2e21f81 100644 --- a/.github/workflows/destroy_demo_environment.yml +++ b/.github/workflows/destroy_demo_environment.yml @@ -24,7 +24,7 @@ jobs: working-directory: operations/app/terraform/vars/demo steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Use specific version of Terraform uses: hashicorp/setup-terraform@b9cd54a3c349d3f38e8881555d616ced269862dd diff --git a/.github/workflows/export_cost_data.yml b/.github/workflows/export_cost_data.yml index b7f451d3b25..05969238c83 100644 --- a/.github/workflows/export_cost_data.yml +++ b/.github/workflows/export_cost_data.yml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-latest steps: - name: "Check out changes" - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Connect to VPN and login to Azure uses: ./.github/actions/vpn-azure with: diff --git a/.github/workflows/frontend_chromatic_main.yml b/.github/workflows/frontend_chromatic_main.yml index 43df8503c6a..7ca6151a5df 100644 --- a/.github/workflows/frontend_chromatic_main.yml +++ b/.github/workflows/frontend_chromatic_main.yml @@ -19,7 +19,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - On Push Event - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 with: fetch-depth: 0 - name: Use Node.js with yarn diff --git a/.github/workflows/frontend_ci.yml b/.github/workflows/frontend_ci.yml index 9357af4488a..55aacb3d022 100644 --- a/.github/workflows/frontend_ci.yml +++ b/.github/workflows/frontend_ci.yml @@ -28,7 +28,7 @@ jobs: is_permitted: ${{ github.event_name == 'pull_request' && steps.build_vars.outputs.has_frontend_change == 'true' && steps.build_vars.outputs.is_deployment_pr == 'false' }} steps: - name: "Check out changes" - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Build vars id: build_vars uses: ./.github/actions/build-vars @@ -41,7 +41,7 @@ jobs: steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Use Node.js with yarn uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 with: @@ -61,7 +61,7 @@ jobs: steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Use Node.js with yarn uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 with: @@ -98,7 +98,7 @@ jobs: sudo swapon --show - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Use Node.js with yarn uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 with: @@ -149,7 +149,7 @@ jobs: steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Use Node.js with yarn uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 with: @@ -229,7 +229,7 @@ jobs: steps: - name: Checkout - On Pull Request - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 with: fetch-depth: 0 # By default the pull_request event will run on a ephermeral merge commit which simulates a merge between the pull request @@ -300,7 +300,7 @@ jobs: # steps: # - name: Check out changes - # uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + # uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # - name: Initialize CodeQL # uses: github/codeql-action/init@65c74964a9ed8c44ed9f19d4bbc5757a6a8e9ab9 # with: @@ -320,7 +320,7 @@ jobs: # steps: # - name: Check out changes - # uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + # uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # with: # fetch-depth: 0 # - name: Use Node.js with yarn @@ -354,7 +354,7 @@ jobs: # runs-on: ubuntu-latest # steps: # - name: Check out changes - # uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + # uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # - name: Use Node.js with yarn # uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 # with: diff --git a/.github/workflows/log_management.yml b/.github/workflows/log_management.yml index 2b6810adb05..4da1340e62c 100644 --- a/.github/workflows/log_management.yml +++ b/.github/workflows/log_management.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest name: Run log management steps steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Workflow Housekeeper - workflows NOT in default branch uses: JosiahSiegel/workflow-housekeeper@731cc20bb613208b34efb6ac74aab4ba147abb50 env: diff --git a/.github/workflows/prepare_deployment_branch.yaml b/.github/workflows/prepare_deployment_branch.yaml index 275d823032a..25cf8aff75e 100644 --- a/.github/workflows/prepare_deployment_branch.yaml +++ b/.github/workflows/prepare_deployment_branch.yaml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: "Check out changes" - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Set Environment Variables run: | diff --git a/.github/workflows/publish_docker.yaml b/.github/workflows/publish_docker.yaml index 34f7a2d2011..2c58a5c8b0c 100644 --- a/.github/workflows/publish_docker.yaml +++ b/.github/workflows/publish_docker.yaml @@ -23,7 +23,7 @@ jobs: run_publish_sftp_alpine: ${{ steps.check_sftp_alpine_image.outputs.run_job }} steps: - name: "Check out changes" - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 id: skip_check with: @@ -89,7 +89,7 @@ jobs: AZ_ENV: [ demo1, demo2, demo3, test, staging, prod ] steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Log In to the Container Registry uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 @@ -116,7 +116,7 @@ jobs: packages: write steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Log In to the Container Registry uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 @@ -144,7 +144,7 @@ jobs: packages: write steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Log In to the Container Registry uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 diff --git a/.github/workflows/release_chatops_app.yml b/.github/workflows/release_chatops_app.yml index 3b590e47ecc..2cf114cb640 100644 --- a/.github/workflows/release_chatops_app.yml +++ b/.github/workflows/release_chatops_app.yml @@ -20,7 +20,7 @@ jobs: env_name: ${{ steps.build_vars.outputs.env_name }} steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Build vars id: build_vars @@ -36,7 +36,7 @@ jobs: working-directory: operations/slack-boltjs-app steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 with: submodules: true diff --git a/.github/workflows/release_to_azure.yml b/.github/workflows/release_to_azure.yml index 00e50056549..619bc91645a 100644 --- a/.github/workflows/release_to_azure.yml +++ b/.github/workflows/release_to_azure.yml @@ -27,7 +27,7 @@ jobs: dns_ip: ${{ steps.build_vars.outputs.dns_ip }} steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Build vars id: build_vars @@ -43,7 +43,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Build backend uses: ./.github/actions/build-backend @@ -61,7 +61,7 @@ jobs: working-directory: frontend-react steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Build frontend uses: ./.github/actions/build-frontend @@ -90,7 +90,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Use specific version of Terraform uses: hashicorp/setup-terraform@b9cd54a3c349d3f38e8881555d616ced269862dd @@ -129,7 +129,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Login to Azure if: | @@ -164,7 +164,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 deploy_router_release: name: "Deploy Router Release: ${{ needs.pre_job.outputs.env_name }}" @@ -181,7 +181,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Connect to VPN and login to Azure uses: ./.github/actions/vpn-azure @@ -220,7 +220,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Connect to VPN and login to Azure uses: ./.github/actions/vpn-azure diff --git a/.github/workflows/release_to_github.yml b/.github/workflows/release_to_github.yml index 373e48d4ccc..a1b804a342c 100644 --- a/.github/workflows/release_to_github.yml +++ b/.github/workflows/release_to_github.yml @@ -19,7 +19,7 @@ jobs: enable_builds: 'true' steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 with: fetch-depth: 0 - name: Build vars @@ -36,7 +36,7 @@ jobs: working-directory: prime-router steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Build backend if: ${{ needs.wf_vars.outputs.enable_builds == 'true' }} uses: ./.github/actions/build-backend @@ -53,7 +53,7 @@ jobs: working-directory: frontend-react steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Build frontend if: ${{ needs.wf_vars.outputs.enable_builds == 'true' }} uses: ./.github/actions/build-frontend @@ -78,7 +78,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 with: fetch-depth: 0 - name: Download router artifact diff --git a/.github/workflows/release_trial_frontend.yml b/.github/workflows/release_trial_frontend.yml index baad32b1250..9c8df9192c7 100644 --- a/.github/workflows/release_trial_frontend.yml +++ b/.github/workflows/release_trial_frontend.yml @@ -21,7 +21,7 @@ jobs: version: ${{ github.ref_name }} steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Build vars id: build_vars @@ -37,7 +37,7 @@ jobs: working-directory: frontend-react steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Build frontend uses: ./.github/actions/build-frontend @@ -66,7 +66,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Connect to VPN and login to Azure uses: ./.github/actions/vpn-azure diff --git a/.github/workflows/restore_databases.yml b/.github/workflows/restore_databases.yml index f0051fbeb7c..628f82c377e 100644 --- a/.github/workflows/restore_databases.yml +++ b/.github/workflows/restore_databases.yml @@ -60,7 +60,7 @@ jobs: sink_backup_storage: ${{ env.SINK_BACKUP_STORAGE }} steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Set env variables shell: bash @@ -137,7 +137,7 @@ jobs: backup_age_valid: ${{ env.BACKUP_AGE_VALID }} steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - uses: azure/login@a65d910e8af852a8061c627c456678983e180302 with: @@ -228,7 +228,7 @@ jobs: sink_db_server: ${{ needs.pre_job.outputs.sink_db_server }} steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - uses: azure/login@a65d910e8af852a8061c627c456678983e180302 with: diff --git a/.github/workflows/scan_action_logs.yml b/.github/workflows/scan_action_logs.yml index 4d852aa9924..2c209176fc4 100644 --- a/.github/workflows/scan_action_logs.yml +++ b/.github/workflows/scan_action_logs.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest name: Scan repo run logs steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Scan run logs uses: josiahsiegel/runleaks@4dd30d107c03b6ade87978e10c94a77015e488f9 id: scan diff --git a/.github/workflows/snyk.yml b/.github/workflows/snyk.yml index 05eff9f04ea..2704fa9ba6f 100644 --- a/.github/workflows/snyk.yml +++ b/.github/workflows/snyk.yml @@ -19,7 +19,7 @@ jobs: has_router_change: ${{ steps.build_vars.outputs.has_router_change }} steps: - name: "Check out changes" - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Build vars id: build_vars uses: ./.github/actions/build-vars @@ -33,7 +33,7 @@ jobs: matrix: folder: [prime-router, submissions, auth, shared] steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - uses: snyk/actions/setup@b98d498629f1c368650224d6d212bf7dfa89e4bf - name: Set up JDK 17 to generate backend coverage stats uses: actions/setup-java@b36c23c0d998641eff861008f374ee103c25ac73 diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index 235fc25f720..6f996603649 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -42,7 +42,7 @@ jobs: sudo swapon --show - name: "Check out everything" - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 with: fetch-depth: 0 diff --git a/.github/workflows/start_frontend_smoke.yml b/.github/workflows/start_frontend_smoke.yml index 673b2ee5197..6e000e723e0 100644 --- a/.github/workflows/start_frontend_smoke.yml +++ b/.github/workflows/start_frontend_smoke.yml @@ -23,7 +23,7 @@ jobs: steps: - name: "Check out changes" - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Use Node.js with yarn uses: actions/setup-node@0a44ba7841725637a19e28fa30b79a866c81b0a6 with: diff --git a/.github/workflows/start_test_servers.yml b/.github/workflows/start_test_servers.yml index b1b52c9d2bb..292ef517956 100644 --- a/.github/workflows/start_test_servers.yml +++ b/.github/workflows/start_test_servers.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # Login to Azure - uses: azure/login@a65d910e8af852a8061c627c456678983e180302 diff --git a/.github/workflows/stop_test_servers.yml b/.github/workflows/stop_test_servers.yml index 9fd0ebd0506..5f16822a7f9 100644 --- a/.github/workflows/stop_test_servers.yml +++ b/.github/workflows/stop_test_servers.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Connect to VPN and login to Azure uses: ./.github/actions/vpn-azure diff --git a/.github/workflows/sync-translation-schemas.yml b/.github/workflows/sync-translation-schemas.yml index c6103d8deba..45ea3cd7f0c 100644 --- a/.github/workflows/sync-translation-schemas.yml +++ b/.github/workflows/sync-translation-schemas.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Login into Azure uses: ./.github/actions/vpn-azure diff --git a/.github/workflows/validate_resources.yml b/.github/workflows/validate_resources.yml index 101557421ec..02af76df69d 100644 --- a/.github/workflows/validate_resources.yml +++ b/.github/workflows/validate_resources.yml @@ -22,7 +22,7 @@ jobs: env_name: ${{ env.VALIDATE_ENV }} steps: - name: Check out changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Build vars id: build_vars @@ -47,7 +47,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Connect to VPN and login to Azure uses: ./.github/actions/vpn-azure @@ -101,7 +101,7 @@ jobs: env_name: [ demo1, demo2, demo3 ] steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - uses: azure/login@a65d910e8af852a8061c627c456678983e180302 with: @@ -134,7 +134,7 @@ jobs: concurrency: ${{ matrix.env_name }} steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - uses: azure/login@a65d910e8af852a8061c627c456678983e180302 with: diff --git a/.github/workflows/validate_terraform.yml b/.github/workflows/validate_terraform.yml index 6fa0c54c997..bd3cc505cca 100644 --- a/.github/workflows/validate_terraform.yml +++ b/.github/workflows/validate_terraform.yml @@ -18,7 +18,7 @@ jobs: has_operations_change: ${{ steps.build_vars.outputs.has_terraform_change }} steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Build vars id: build_vars uses: ./.github/actions/build-vars @@ -31,7 +31,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Check Out Changes - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Use specific version of Terraform uses: hashicorp/setup-terraform@b9cd54a3c349d3f38e8881555d616ced269862dd with: @@ -45,7 +45,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repo - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 - name: Run Checkov action uses: bridgecrewio/checkov-action@d0e41abbcc8c1103c6ae7e451681d071f05e1c20 From 1bf38e8dec26998a34ebd71eabbb3bce06ad3138 Mon Sep 17 00:00:00 2001 From: Brick Green <86254221+brick-green@users.noreply.github.com> Date: Thu, 26 Sep 2024 17:07:46 -0400 Subject: [PATCH 2/5] update submission received event and delete v1 azure events (#15990) * remove ReportRouteEvent.kt * remove events and update md * update to include queryParameter * update unit test * transition to config based filtering and allow one query parameter to have multiple values * account for empty parameter filter list * transition to application.yml --- .../docs/observability/azure-events.md | 159 +++--------------- .../universal-pipeline/destination-filter.md | 8 +- .../universal-pipeline/receiver-filter.md | 3 +- .../event/ReceiverFilterFailedEvent.kt | 23 --- .../event/ReportAcceptedEvent.kt | 20 --- .../observability/event/ReportCreatedEvent.kt | 12 -- .../event/ReportNotRoutedEvent.kt | 18 -- .../observability/event/ReportRouteEvent.kt | 20 --- submissions/build.gradle.kts | 1 + .../submissions/SubmissionReceivedEvent.kt | 16 +- .../config/AllowedParametersConfig.kt | 41 +++++ .../controllers/SubmissionController.kt | 65 ++++++- .../src/main/resources/application.properties | 7 - .../src/main/resources/application.yml | 27 +++ .../SubmissionControllerIntegrationTest.kt | 6 + .../test/kotlin/SubmissionControllerTest.kt | 25 ++- 16 files changed, 189 insertions(+), 262 deletions(-) delete mode 100644 prime-router/src/main/kotlin/azure/observability/event/ReceiverFilterFailedEvent.kt delete mode 100644 prime-router/src/main/kotlin/azure/observability/event/ReportAcceptedEvent.kt delete mode 100644 prime-router/src/main/kotlin/azure/observability/event/ReportCreatedEvent.kt delete mode 100644 prime-router/src/main/kotlin/azure/observability/event/ReportNotRoutedEvent.kt delete mode 100644 prime-router/src/main/kotlin/azure/observability/event/ReportRouteEvent.kt create mode 100644 submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/config/AllowedParametersConfig.kt delete mode 100644 submissions/src/main/resources/application.properties create mode 100644 submissions/src/main/resources/application.yml diff --git a/prime-router/docs/observability/azure-events.md b/prime-router/docs/observability/azure-events.md index 07fcbaaeb6a..d7b6b6a9bbb 100644 --- a/prime-router/docs/observability/azure-events.md +++ b/prime-router/docs/observability/azure-events.md @@ -45,115 +45,6 @@ class MyService( } ``` -Under the hood, it will serialize your event class and push the event -to the configured Microsoft AppInsights instance. - -## Event Glossery - -### ReportCreatedEvent -This event is emitted by the convert step when a report is successfully translated into a FHIR bundle. -- reportId - - The ID assigned to the created report -- topic - - The topic of the created report - - -### ReportAcceptedEvent -This event is emitted by the destination filter step, _before_ any filters are evaluated -- reportId - - The report ID from the preceding function (convert step) -- submittedReportId - - The report ID submitted by the sender -- topic - - The topic of the report -- sender - - The full sender name -- observations - - A list of observations each containing a list of its mapped conditions -- bundleSize - - Length of the bundle JSON string -- messageId - - From the bundle.identifier value and system. If ingested as HL7 this comes from MSH-10 - - -### ReportNotRoutedEvent -This is event is emitted by the destination filter step if a bundle not routed to any receivers. - -- reportId - - The ID of the empty report that terminated this lineage -- parentReportId - - The report ID from the preceding function (convert step) -- submittedReportId - - The report ID submitted by the sender -- topic - - The topic of the report -- sender - - The full sender name -- bundleSize - - Length of the bundle JSON string -- failingFilters - - A list of all the filters that failed causing this report not the be routed -- messageId - - From the bundle.identifier value and system. If ingested as HL7 this comes from MSH-10 - - -### ReportRouteEvent -This event is emitted by the receiver filter step, _after_ all filters have passed and a report has been -routed to a receiver. Many `ReportRouteEvent` can correspond to a `ReportAcceptedEvent` and can be "joined" on: - -`ReportAcceptedEvent.reportId == ReportRouteEvent.parentReportId` - -- reportId - - The ID of the report routed to the receiver -- parentReportId - - The report ID from the preceding function (destination filter step) -- submittedReportId - - The report ID submitted by the sender -- topic - - The topic of the report -- sender - - The full sender name -- receiver - - The full receiver name. (deprecated: When a report does not get routed to a receiver this value will be `"null"`) -- observations - - A list of observations each containing a list of its mapped conditions -- (deprecated) originalObservations - - (deprecated) A list of observations in the originally submitted report, before any filters were run -- filteredObservations - - A list of observations that were filtered from the bundle during filtering -- bundleSize - - Length of the bundle JSON string -- messageId - - From the bundle.identifier value and system. If ingested as HL7 this comes from MSH-10 - - -### ReceiverFilterFailedEvent -This event is emitted by the receiver filter step if a bundle fails a receiver filter. - -- reportId - - The ID of the empty report that terminated this lineage -- parentReportId - - The report ID from the preceding function (destination filter step) -- submittedReportId - - The report ID submitted by the sender -- topic - - The topic of the report -- sender - - The full sender name -- receiver - - The full receiver name. -- observations - - A list of observations each containing a list of its mapped conditions -- failingFilters - - A list of all the filters that failed for this report -- failingFilterType - - The type of filter that failed this report -- bundleSize - - Length of the bundle JSON string -- messageId - - From the bundle.identifier value and system. If ingested as HL7 this comes from MSH-10 - - ## How to query for events Events that are pushed to Azure can be found in the `customEvents` table in the log explorer. The properties defined in @@ -176,24 +67,24 @@ customEvents ### Distinct senders ``` customEvents -| where name == "ReportAcceptedEvent" -| extend sender = tostring(customDimensions.sender) -| distinct sender +| where name == "REPORT_RECEIVED" +| extend senderName = tostring(parse_json(tostring(customDimensions.params)).senderName) +| distinct senderName ``` ### Get report count sent by sender ``` customEvents -| where name == "ReportAcceptedEvent" -| extend sender = tostring(customDimensions.sender) -| summarize count() by sender +| where name == "REPORT_RECEIVED" +| extend senderName = tostring(parse_json(tostring(customDimensions.params)).senderName) +| summarize count() by senderName | order by count_ ``` ### Get report count sent by topic ``` customEvents -| where name == "ReportAcceptedEvent" +| where name == "REPORT_RECEIVED" | extend topic = tostring(customDimensions.topic) | summarize count() by topic | order by count_ @@ -202,12 +93,8 @@ customEvents ### Get reportable conditions count for all reports sent to Report Stream ``` customEvents -| where name == "ReportAcceptedEvent" -| extend observations = parse_json(tostring(customDimensions.observations)) -| mv-expand observations -| extend conditions = parse_json(tostring(observations.conditions)) -| mv-expand conditions -| extend conditionDisplay = tostring(conditions.display) +| where name == "ITEM_ACCEPTED" +| extend conditionDisplay = tostring(parse_json(tostring(parse_json(tostring(parse_json(tostring(parse_json(tostring(parse_json(tostring(customDimensions.params)).bundleDigest)).observationSummaries))[0].testSummary))[0].conditions))[0].display) | summarize count() by conditionDisplay | order by count_ ``` @@ -215,28 +102,25 @@ customEvents ### Distinct receivers ``` customEvents -| where name == "ReportRouteEvent" -| extend receiver = tostring(customDimensions.receiver) -| where receiver != "null" -| distinct receiver +| where name == "ITEM_ROUTED" +| extend receiverName = tostring(parse_json(tostring(customDimensions.params)).receiverName) +| distinct receiverName ``` ### Get report count routed to a receiver ``` customEvents -| where name == "ReportRouteEvent" -| extend receiver = tostring(customDimensions.receiver) -| where receiver != "null" -| summarize count() by receiver +| where name == "ITEM_ROUTED" +| extend receiverName = tostring(parse_json(tostring(customDimensions.params)).receiverName) +| summarize count() by receiverName | order by count_ ``` ### Get report count routed by topic ``` customEvents -| where name == "ReportRouteEvent" -| extend topic = tostring(customDimensions.topic), receiver = tostring(customDimensions.receiver) -| where receiver != "null" +| where name == "ITEM_ROUTED" +| extend topic = tostring(customDimensions.topic) | summarize count() by topic | order by count_ ``` @@ -244,13 +128,8 @@ customEvents ### Get reportable conditions count for all reports routed to receivers ``` customEvents -| where name == "ReportRouteEvent" -| extend observations = parse_json(tostring(customDimensions.observations)), receiver = tostring(customDimensions.receiver) -| where receiver != "null" -| mv-expand observations -| extend conditions = parse_json(tostring(observations.conditions)) -| mv-expand conditions -| extend conditionDisplay = tostring(conditions.display) +| where name == "ITEM_ROUTED" +| extend conditionDisplay = tostring(parse_json(tostring(parse_json(tostring(parse_json(tostring(parse_json(tostring(parse_json(tostring(customDimensions.params)).bundleDigest)).observationSummaries))[0].testSummary))[0].conditions))[0].display) | summarize count() by conditionDisplay | order by count_ ``` diff --git a/prime-router/docs/universal-pipeline/destination-filter.md b/prime-router/docs/universal-pipeline/destination-filter.md index fd9162c4d38..21fbe27e878 100644 --- a/prime-router/docs/universal-pipeline/destination-filter.md +++ b/prime-router/docs/universal-pipeline/destination-filter.md @@ -186,10 +186,10 @@ This filter will log messages to the console when: This step emits one of two events below _once_ each time it runs. -| Event | Trigger | -|-------------------------------------------------------------------------------|------------------------------------------------------------------| -| [ReportAcceptedEvent](../observability/azure-events.md#reportacceptedevent) | when a report is received by this step (precludes all filtering) | -| [ReportNotRoutedEvent](../observability/azure-events.md#reportnotroutedevent) | when a report is not valid for any receivers | +| Event | Trigger | +|-----------------|------------------------------------------------------------------| +| ITEM_ROUTED | when a report is received by this step (precludes all filtering) | +| ITEM_NOT_ROUTED | when a report is not valid for any receivers | ## Retries diff --git a/prime-router/docs/universal-pipeline/receiver-filter.md b/prime-router/docs/universal-pipeline/receiver-filter.md index 3c0de1e403d..e98957961f0 100644 --- a/prime-router/docs/universal-pipeline/receiver-filter.md +++ b/prime-router/docs/universal-pipeline/receiver-filter.md @@ -294,8 +294,7 @@ This step emits one of the below events _per receiver_ each time it runs. | Event | Trigger | |-----------------------------------------------------------------------------------------|------------------------------------------------------------| -| [ReportRouteEvent](../observability/azure-events.md#reportrouteevent) | When a report is routed to a receiver (all filters passed) | -| [ReceiverFilterFailedEvent](../observability/azure-events.md#receiverfilterfailedevent) | When a report fails receiver filters | +| ITEM_FILTER_FAILED | When a report fails receiver filters | ## Retries diff --git a/prime-router/src/main/kotlin/azure/observability/event/ReceiverFilterFailedEvent.kt b/prime-router/src/main/kotlin/azure/observability/event/ReceiverFilterFailedEvent.kt deleted file mode 100644 index 6f915d64bdf..00000000000 --- a/prime-router/src/main/kotlin/azure/observability/event/ReceiverFilterFailedEvent.kt +++ /dev/null @@ -1,23 +0,0 @@ -package gov.cdc.prime.router.azure.observability.event - -import gov.cdc.prime.router.ReportId -import gov.cdc.prime.router.ReportStreamFilterType -import gov.cdc.prime.router.Topic - -/** - * Event definition for when a report fails a receiver's filters - */ - -data class ReceiverFilterFailedEvent( - val reportId: ReportId, - val parentReportId: ReportId, - val submittedReportId: ReportId, - val topic: Topic, - val sender: String, - val receiver: String, - val observations: List, - val failingFilters: List, - val failingFilterType: ReportStreamFilterType, - val bundleSize: Int, - val messageId: AzureEventUtils.MessageID, -) : AzureCustomEvent \ No newline at end of file diff --git a/prime-router/src/main/kotlin/azure/observability/event/ReportAcceptedEvent.kt b/prime-router/src/main/kotlin/azure/observability/event/ReportAcceptedEvent.kt deleted file mode 100644 index 0eed89d94aa..00000000000 --- a/prime-router/src/main/kotlin/azure/observability/event/ReportAcceptedEvent.kt +++ /dev/null @@ -1,20 +0,0 @@ -package gov.cdc.prime.router.azure.observability.event - -import gov.cdc.prime.router.ReportId -import gov.cdc.prime.router.Topic - -/** - * Event definition for when a report is ready to be processed per receiver - * - * This event should contain all observations sent by the sender since no - * receiver specific filters have been run - */ -data class ReportAcceptedEvent( - val reportId: ReportId, - val submittedReportId: ReportId, - val topic: Topic, - val sender: String, - val observations: List, - val bundleSize: Int, - val messageId: AzureEventUtils.MessageID, -) : AzureCustomEvent \ No newline at end of file diff --git a/prime-router/src/main/kotlin/azure/observability/event/ReportCreatedEvent.kt b/prime-router/src/main/kotlin/azure/observability/event/ReportCreatedEvent.kt deleted file mode 100644 index f6453dad064..00000000000 --- a/prime-router/src/main/kotlin/azure/observability/event/ReportCreatedEvent.kt +++ /dev/null @@ -1,12 +0,0 @@ -package gov.cdc.prime.router.azure.observability.event - -import gov.cdc.prime.router.ReportId -import gov.cdc.prime.router.Topic - -/** - * An event emitted during every report created - */ -data class ReportCreatedEvent( - val reportId: ReportId, - val topic: Topic, -) : AzureCustomEvent \ No newline at end of file diff --git a/prime-router/src/main/kotlin/azure/observability/event/ReportNotRoutedEvent.kt b/prime-router/src/main/kotlin/azure/observability/event/ReportNotRoutedEvent.kt deleted file mode 100644 index 0280e12d912..00000000000 --- a/prime-router/src/main/kotlin/azure/observability/event/ReportNotRoutedEvent.kt +++ /dev/null @@ -1,18 +0,0 @@ -package gov.cdc.prime.router.azure.observability.event - -import gov.cdc.prime.router.ReportId -import gov.cdc.prime.router.Topic - -/** - * Event definition for when a report does not get routed to any receivers - */ - -data class ReportNotRoutedEvent( - val reportId: ReportId, - val parentReportId: ReportId, - val submittedReportId: ReportId, - val topic: Topic, - val sender: String, - val bundleSize: Int, - val messageId: AzureEventUtils.MessageID, -) : AzureCustomEvent \ No newline at end of file diff --git a/prime-router/src/main/kotlin/azure/observability/event/ReportRouteEvent.kt b/prime-router/src/main/kotlin/azure/observability/event/ReportRouteEvent.kt deleted file mode 100644 index 4479c753fa7..00000000000 --- a/prime-router/src/main/kotlin/azure/observability/event/ReportRouteEvent.kt +++ /dev/null @@ -1,20 +0,0 @@ -package gov.cdc.prime.router.azure.observability.event - -import gov.cdc.prime.router.ReportId -import gov.cdc.prime.router.Topic - -/** - * Event definition for when a report gets routed to a receiver - */ -data class ReportRouteEvent( - val reportId: ReportId, - val parentReportId: ReportId, - val submittedReportId: ReportId, - val topic: Topic, - val sender: String, - val receiver: String?, // TODO: this should not be nullable anymore after #14450 - val observations: List, - val filteredObservations: List, - val bundleSize: Int, - val messageId: AzureEventUtils.MessageID, -) : AzureCustomEvent \ No newline at end of file diff --git a/submissions/build.gradle.kts b/submissions/build.gradle.kts index 5c99ee9f63e..8c96e222de5 100644 --- a/submissions/build.gradle.kts +++ b/submissions/build.gradle.kts @@ -30,6 +30,7 @@ dependencies { testImplementation("org.jetbrains.kotlin:kotlin-test-junit5") testImplementation("org.mockito.kotlin:mockito-kotlin:5.4.0") testImplementation("org.apache.commons:commons-compress:1.27.1") + testImplementation("org.springframework.security:spring-security-test") testRuntimeOnly("org.junit.platform:junit-platform-launcher") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor:1.9.0") implementation(project(":shared")) diff --git a/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/SubmissionReceivedEvent.kt b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/SubmissionReceivedEvent.kt index 61c348c0aa6..b82c0993a31 100644 --- a/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/SubmissionReceivedEvent.kt +++ b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/SubmissionReceivedEvent.kt @@ -8,9 +8,17 @@ data class SubmissionReceivedEvent( val reportId: UUID, val parentReportId: UUID, val rootReportId: UUID, - val headers: Map, - val sender: String, - val senderIP: String, - val fileSize: String, + val requestParameters: SubmissionDetails, + val method: String, + val url: String, + val senderName: String, + val senderIp: String, + val fileLength: String, val blobUrl: String, + val pipelineStepName: String, +) + +data class SubmissionDetails( + val headers: Map, + val queryParameters: Map>, ) \ No newline at end of file diff --git a/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/config/AllowedParametersConfig.kt b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/config/AllowedParametersConfig.kt new file mode 100644 index 00000000000..d3dab4cdccf --- /dev/null +++ b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/config/AllowedParametersConfig.kt @@ -0,0 +1,41 @@ +package gov.cdc.prime.reportstream.submissions.config + +import org.springframework.boot.context.properties.ConfigurationProperties +import org.springframework.stereotype.Component + +/** + * Configuration class to load allowed headers and query parameters from the application properties. + * + * This class is used to read properties prefixed with "allowed" from the `application.properties` or `application.yml` + * file and bind them to the `headers` and `queryParameters` fields. + * + * Example of properties in the `application.properties` file: + * + * ``` + * allowed.headers.client_id=client_id + * allowed.headers.content_type=content-type + * allowed.queryParameters.processing=processing + * allowed.queryParameters.another_param=another + * ``` + * + * These properties will be automatically injected into the `headers` and `queryParameters` lists when the + * Spring application context is initialized. + * + * @property headers A list of allowed HTTP header names that are expected in incoming requests. + * @property queryParameters A list of allowed query parameter names that can be used in incoming requests. + */ +@Component +@ConfigurationProperties(prefix = "allowed") +class AllowedParametersConfig { + /** + * A list of allowed HTTP headers that can be accepted by the API. + * Each entry in the list represents a header name expected in the incoming request. + */ + var headers: List = emptyList() + + /** + * A list of allowed query parameters that the API can accept in incoming requests. + * Each entry in the list represents a query parameter name expected in the incoming request. + */ + var queryParameters: List = emptyList() +} \ No newline at end of file diff --git a/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/controllers/SubmissionController.kt b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/controllers/SubmissionController.kt index c92e98354eb..37d92c49a74 100644 --- a/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/controllers/SubmissionController.kt +++ b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/controllers/SubmissionController.kt @@ -8,8 +8,11 @@ import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import gov.cdc.prime.reportstream.shared.BlobUtils import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.reportstream.shared.Submission +import gov.cdc.prime.reportstream.submissions.SubmissionDetails import gov.cdc.prime.reportstream.submissions.SubmissionReceivedEvent import gov.cdc.prime.reportstream.submissions.TelemetryService +import gov.cdc.prime.reportstream.submissions.config.AllowedParametersConfig +import jakarta.servlet.http.HttpServletRequest import org.slf4j.LoggerFactory import org.springframework.http.HttpStatus import org.springframework.http.ResponseEntity @@ -42,6 +45,7 @@ class SubmissionController( private val queueClient: QueueClient, private val tableClient: TableClient, private val telemetryService: TelemetryService, + private val allowedParametersConfig: AllowedParametersConfig, ) { /** * Submits a report. @@ -54,6 +58,7 @@ class SubmissionController( * @param contentType the content type of the report (must be "application/hl7-v2" or "application/fhir+ndjson") * @param clientId the ID of the client submitting the report. Should represent org.senderName * @param data the report data + * @param request gives access to request details * @return a ResponseEntity containing the reportID, status, and timestamp */ @PostMapping("/api/v1/reports", consumes = ["application/hl7-v2", "application/fhir+ndjson"]) @@ -65,12 +70,19 @@ class SubmissionController( @RequestHeader("x-azure-clientip") senderIp: String, @RequestHeader(value = "payloadName", required = false) payloadName: String?, @RequestBody data: String, + request: HttpServletRequest, ): ResponseEntity<*> { val reportId = UUID.randomUUID() val reportReceivedTime = Instant.now() val contentTypeMime = contentType.substringBefore(';') val status = "Received" val objectMapper = jacksonObjectMapper().registerModule(JavaTimeModule()) + // Filter request headers based on the allowed list + val filteredHeaders = filterHeaders(headers) + + // Filter query parameters based on the allowed list (only keep 'processing' or others defined in application.properties) + val filteredQueryParameters = filterQueryParameters(request) + logger.info( "Received report submission: reportId=$reportId, contentType=$contentTypeMime" + ", clientId=$clientId${payloadName?.let { ", payloadName=$it" } ?: ""}}" @@ -98,11 +110,17 @@ class SubmissionController( reportId = reportId, parentReportId = reportId, rootReportId = reportId, - headers = filterHeaders(headers), - sender = clientId, - senderIP = senderIp, - fileSize = contentLength, - blobUrl = blobClient.blobUrl + requestParameters = SubmissionDetails( + filteredHeaders, + filteredQueryParameters + ), + method = request.method, + url = request.requestURL.toString(), + senderName = clientId, + senderIp = senderIp, + fileLength = contentLength, + blobUrl = blobClient.blobUrl, + pipelineStepName = "submission" ) logger.debug("Created SUBMISSION_RECEIVED") @@ -121,7 +139,7 @@ class SubmissionController( BlobUtils.digestToString(digest), clientId.lowercase(), reportId, - filterHeaders(headers).toMap(), + filterHeaders(headers), ).serialize() logger.debug("Created message for queue") @@ -231,12 +249,41 @@ class SubmissionController( } } + /** + * Filters the request headers based on the allowed headers configured in the application.yml. + * Handles the case where allowed headers are defined as a list. + */ private fun filterHeaders(headers: Map): Map { - val headersToInclude = - listOf("client_id", "content-type", "payloadname", "x-azure-clientip", "content-length") - return headers.filter { it.key.lowercase() in headersToInclude } + val allowedHeaders = allowedParametersConfig.headers + + // Filter the request headers to only include allowed headers + return headers.filterKeys { key -> + allowedHeaders.map { it.lowercase() }.contains(key.lowercase()) + } } + /** + * Filters the query parameters based on the allowed query parameters configured in the application.yml. + * Handles multiple values for the same query parameter from HttpServletRequest. + */ + private fun filterQueryParameters(request: HttpServletRequest): Map> { + val allowedQueryParams = allowedParametersConfig.queryParameters + + // Create a map to hold the filtered query parameters + val filteredParams = mutableMapOf>() + + // Loop over allowed parameters and get their values from the request + allowedQueryParams.forEach { paramName -> + val values = request.getParameterValues(paramName) + if (values != null) { + filteredParams[paramName] = values.toList() // Convert array to List + } + } + + return filteredParams + } + + private fun formBlobName( reportId: UUID, contentTypeMime: String, diff --git a/submissions/src/main/resources/application.properties b/submissions/src/main/resources/application.properties deleted file mode 100644 index a8750014f5d..00000000000 --- a/submissions/src/main/resources/application.properties +++ /dev/null @@ -1,7 +0,0 @@ -spring.application.name=submissions -server.port=8880 -azure.storage.connection-string=${AZURE_STORAGE_CONNECTION_STRING:DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;} -azure.storage.container-name=${AZURE_STORAGE_CONTAINER_NAME:reports} -azure.storage.queue-name=${AZURE_STORAGE_QUEUE_NAME:elr-fhir-receive} -azure.storage.table-name=${AZURE_STORAGE_TABLE_NAME:submission} -spring.security.oauth2.resourceserver.jwt.issuer-uri=https://reportstream.oktapreview.com/oauth2/ausekaai7gUuUtHda1d7 \ No newline at end of file diff --git a/submissions/src/main/resources/application.yml b/submissions/src/main/resources/application.yml new file mode 100644 index 00000000000..c75d070b3fa --- /dev/null +++ b/submissions/src/main/resources/application.yml @@ -0,0 +1,27 @@ +spring: + application: + name: submissions + security: + oauth2: + resourceserver: + jwt: + issuer-uri: https://reportstream.oktapreview.com/oauth2/ausekaai7gUuUtHda1d7 + server: + port: 8880 + +azure: + storage: + connection-string: ${AZURE_STORAGE_CONNECTION_STRING:DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://localhost:10000/devstoreaccount1;QueueEndpoint=http://localhost:10001/devstoreaccount1;TableEndpoint=http://127.0.0.1:10002/devstoreaccount1;} + container-name: ${AZURE_STORAGE_CONTAINER_NAME:reports} + queue-name: ${AZURE_STORAGE_QUEUE_NAME:elr-fhir-receive} + table-name: ${AZURE_STORAGE_TABLE_NAME:submission} + +allowed: + headers: + - client_id + - content-type + - payloadname + - x-azure-clientip + - content-length +# - queryParameters: +# - param \ No newline at end of file diff --git a/submissions/src/test/kotlin/SubmissionControllerIntegrationTest.kt b/submissions/src/test/kotlin/SubmissionControllerIntegrationTest.kt index 50255bb05e6..dbfcd9934dd 100644 --- a/submissions/src/test/kotlin/SubmissionControllerIntegrationTest.kt +++ b/submissions/src/test/kotlin/SubmissionControllerIntegrationTest.kt @@ -10,6 +10,8 @@ import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.reportstream.shared.QueueMessage.ObjectMapperProvider +import gov.cdc.prime.reportstream.submissions.config.AzureConfig +import gov.cdc.prime.reportstream.submissions.config.SecurityConfig import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.BeforeEach @@ -17,7 +19,9 @@ import org.junit.jupiter.api.Test import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc import org.springframework.boot.test.context.SpringBootTest +import org.springframework.context.annotation.Import import org.springframework.http.MediaType +import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf import org.springframework.test.context.ActiveProfiles import org.springframework.test.context.DynamicPropertyRegistry import org.springframework.test.context.DynamicPropertySource @@ -31,6 +35,7 @@ import java.util.Base64 @SpringBootTest @ActiveProfiles("test") @AutoConfigureMockMvc +@Import(AzureConfig::class, SecurityConfig::class) class SubmissionControllerIntegrationTest { @Autowired @@ -92,6 +97,7 @@ class SubmissionControllerIntegrationTest { mockMvc.perform( MockMvcRequestBuilders.post("/api/v1/reports") + .with(csrf()) .content(requestBody) .contentType(MediaType.valueOf("application/hl7-v2")) .header("client_id", "testClient") diff --git a/submissions/src/test/kotlin/SubmissionControllerTest.kt b/submissions/src/test/kotlin/SubmissionControllerTest.kt index ab1dfd84120..2c552872834 100644 --- a/submissions/src/test/kotlin/SubmissionControllerTest.kt +++ b/submissions/src/test/kotlin/SubmissionControllerTest.kt @@ -11,7 +11,9 @@ import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import gov.cdc.prime.reportstream.shared.QueueMessage import gov.cdc.prime.reportstream.shared.QueueMessage.ObjectMapperProvider import gov.cdc.prime.reportstream.submissions.TelemetryService +import gov.cdc.prime.reportstream.submissions.config.AllowedParametersConfig import gov.cdc.prime.reportstream.submissions.config.AzureConfig +import gov.cdc.prime.reportstream.submissions.config.SecurityConfig import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach import org.junit.jupiter.api.Test @@ -33,6 +35,7 @@ import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest import org.springframework.boot.test.mock.mockito.MockBean import org.springframework.context.annotation.Import import org.springframework.http.MediaType +import org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf import org.springframework.test.web.servlet.MockMvc import org.springframework.test.web.servlet.request.MockMvcRequestBuilders import org.springframework.test.web.servlet.result.MockMvcResultMatchers @@ -42,7 +45,7 @@ import java.util.Base64 import java.util.UUID @WebMvcTest(SubmissionController::class) -@Import(AzureConfig::class) +@Import(AzureConfig::class, SecurityConfig::class, AllowedParametersConfig::class) class SubmissionControllerTest { @Autowired @@ -126,6 +129,7 @@ class SubmissionControllerTest { mockMvc.perform( MockMvcRequestBuilders.post("/api/v1/reports") + .with(csrf()) .content(requestBody) .contentType(MediaType.valueOf("application/hl7-v2")) .header("client_id", "testClient") @@ -172,6 +176,7 @@ class SubmissionControllerTest { mockMvc.perform( MockMvcRequestBuilders.post("/api/v1/reports") + .with(csrf()) .content(requestBody) .contentType(MediaType.valueOf("application/fhir+ndjson")) .header("client_id", "testClient") @@ -203,6 +208,7 @@ class SubmissionControllerTest { mockMvc.perform( MockMvcRequestBuilders.post("/api/v1/reports") + .with(csrf()) .content(requestBody) .contentType(MediaType.APPLICATION_JSON) .header("client_id", "testClient") @@ -219,6 +225,7 @@ class SubmissionControllerTest { mockMvc.perform( MockMvcRequestBuilders.post("/api/v1/reports") + .with(csrf()) .content(requestBody) .contentType(MediaType.valueOf("application/hl7-v2")) .header("payloadname", "testPayload") @@ -241,6 +248,7 @@ class SubmissionControllerTest { mockMvc.perform( MockMvcRequestBuilders.post("/api/v1/reports") + .with(csrf()) .content(requestBody) .contentType(MediaType.parseMediaType("application/hl7-v2")) .header("client_id", "testClient") @@ -263,6 +271,7 @@ class SubmissionControllerTest { mockMvc.perform( MockMvcRequestBuilders.post("/api/v1/reports") + .with(csrf()) .content(requestBody) .contentType(MediaType.parseMediaType("application/hl7-v2")) .header("client_id", "testClient") @@ -301,11 +310,14 @@ class SubmissionControllerTest { mockMvc.perform( MockMvcRequestBuilders.post("/api/v1/reports") + .with(csrf()) .content(requestBody) .contentType(MediaType.valueOf("application/hl7-v2")) .header("client_id", "testClient") .header("payloadname", "testPayload") .header("x-azure-clientip", "127.0.0.1") + .queryParam("processing", "test1", "test2") + .queryParam("test", "test2") ) .andExpect(MockMvcResultMatchers.status().isCreated) @@ -321,12 +333,19 @@ class SubmissionControllerTest { val eventDetails = objectMapper.readValue(capturedProperties["event"], Map::class.java) assert(eventDetails["reportId"] == reportId.toString()) assert(eventDetails["blobUrl"] == expectedBlobUrl) - assert(eventDetails["senderIP"] == "127.0.0.1") - val headers = eventDetails["headers"] as Map<*, *> + assert(eventDetails["senderIp"] == "127.0.0.1") + assert(eventDetails["method"] == "POST") + assert(eventDetails["senderName"] == "testClient") + assert(eventDetails["pipelineStepName"] == "submission") + assert(eventDetails["url"] == "http://localhost/api/v1/reports") + val requestParameters = eventDetails["requestParameters"] as Map<*, *> + val headers = requestParameters["headers"] as Map<*, *> assert(headers["client_id"] == "testClient") assert(headers["Content-Type"] == "application/hl7-v2;charset=UTF-8") assert(headers["payloadname"] == "testPayload") assert(headers["x-azure-clientip"] == "127.0.0.1") + val queryParameters = requestParameters["queryParameters"] as Map<*, *> + assert(queryParameters.isEmpty()) uuidMockedStatic.close() } From 6f19ce70096388960208892ddcc497ab365f9b60 Mon Sep 17 00:00:00 2001 From: Stephen Nesman <94193373+snesm@users.noreply.github.com> Date: Fri, 27 Sep 2024 09:45:28 -0400 Subject: [PATCH 3/5] revvert to "by System.getProperties()" (#15999) --- buildSrc/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 2360922c337..6eca1793cc0 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -17,7 +17,7 @@ kotlin { } dependencies { - val kotlinVersion = KotlinVersion.CURRENT.toString() + val kotlinVersion by System.getProperties() implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:${kotlinVersion}") implementation("org.jlleitschuh.gradle.ktlint:org.jlleitschuh.gradle.ktlint.gradle.plugin:12.1.1") -} \ No newline at end of file +} From 26246ad07963a3c553fcd566e8d9465deb14d25c Mon Sep 17 00:00:00 2001 From: Stephen Nesman <94193373+snesm@users.noreply.github.com> Date: Fri, 27 Sep 2024 10:07:36 -0400 Subject: [PATCH 4/5] Update dependabot-updates.md (#16000) Typo --- .../docs/docs-deprecated/playbooks/dependabot-updates.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prime-router/docs/docs-deprecated/playbooks/dependabot-updates.md b/prime-router/docs/docs-deprecated/playbooks/dependabot-updates.md index d470d812472..1c84a92132e 100644 --- a/prime-router/docs/docs-deprecated/playbooks/dependabot-updates.md +++ b/prime-router/docs/docs-deprecated/playbooks/dependabot-updates.md @@ -18,7 +18,7 @@ Please pay attention to [security related dependency PRs](https://github.com/CDC ## Steps 1. Open the dependabot's pull request to be merged and identify if the PR is out of date from master. If so, create a new comment in the PR with the text -`@dependabot rebase` to let dependabot rebase the branch for you. If you use any other method, dependabot will not be able to keep track of the PR. If the PR has conflicts (and no manual commits were added), use `@dpendabot recreate` to recreate the PR from scratch. +`@dependabot rebase` to let dependabot rebase the branch for you. If you use any other method, dependabot will not be able to keep track of the PR. If the PR has conflicts (and no manual commits were added), use `@dependabot recreate` to recreate the PR from scratch. 1. Verify that the build for the PR is successful. Note that the unit, integration and smoke tests are run as part of the build. 1. Read the updated library's changelog and identify and communicate any risks you find. When in doubt ask! Library changes can affect many parts of the system. 1. Identify any library version conflicts for the updated library. This may happen when other libraries are dependent on a different version of the same library. See From 351db90d250b4dc35e714b92fb3f662de965f5a4 Mon Sep 17 00:00:00 2001 From: Stephen Nesman <94193373+snesm@users.noreply.github.com> Date: Fri, 27 Sep 2024 11:12:35 -0400 Subject: [PATCH 5/5] Bump gradle from 8.8 to 8.10.2 (#15226) * Bump gradle from 8.8 to 8.10.2 * ktlint /submissions --- gradle/wrapper/gradle-wrapper.jar | Bin 43453 -> 43583 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 5 ++++- gradlew.bat | 2 ++ prime-router/Dockerfile.build | 4 ++-- .../getting-started/install-gradle.md | 2 +- .../controllers/SubmissionController.kt | 3 +-- 7 files changed, 11 insertions(+), 7 deletions(-) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e6441136f3d4ba8a0da8d277868979cfbc8ad796..a4b76b9530d66f5e68d973ea569d8e19de379189 100644 GIT binary patch delta 12612 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 HJ4oML2Lo<@i8BwbL^1~GkG`E7C$SEa_ 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a4413138c96..df97d72b8b9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index b740cf13397..f5feea6d6b1 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 7101f8e4676..9b42019c791 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## diff --git a/prime-router/Dockerfile.build b/prime-router/Dockerfile.build index 923fc6572ef..07610edd1d9 100644 --- a/prime-router/Dockerfile.build +++ b/prime-router/Dockerfile.build @@ -3,7 +3,7 @@ # To build it, you must specify at least the following --build-arg values # with some suggested default shown here # -# --build-arg GRADLE_VERSION=8.8 - The version of Gradle you want to build with +# --build-arg GRADLE_VERSION=8.10.2 - The version of Gradle you want to build with # --build-arg AFCT_VERSION=4.0.5198 - The version of the Azure Functions Core Tools # --build-arg JAVA_VERSION=17 - The version of the JDK (and thus JRE) you want to build against/with # @@ -14,7 +14,7 @@ # a tad bit easier when you are rebuilding the builder image # FROM alpine:3.20 AS downloader -ARG GRADLE_VERSION=8.8 +ARG GRADLE_VERSION=8.10.2 ARG AFCT_VERSION=4.0.5198 RUN apk update && apk add wget --no-cache diff --git a/prime-router/docs/docs-deprecated/getting-started/install-gradle.md b/prime-router/docs/docs-deprecated/getting-started/install-gradle.md index 955f9e71ced..90fc7b3cf64 100644 --- a/prime-router/docs/docs-deprecated/getting-started/install-gradle.md +++ b/prime-router/docs/docs-deprecated/getting-started/install-gradle.md @@ -20,7 +20,7 @@ If your package manager contains a gradle version >=8.0.0, feel free to install ```bash mkdir -p ${HOME?}/bin/gradle-bins/ cd ${HOME?}/bin/gradle-bins/ -VERSION=8.8 +VERSION=8.10.2 wget https://services.gradle.org/distributions/gradle-${VERSION?}-bin.zip unzip "gradle-${VERSION?}-bin.zip" rm "gradle-${VERSION?}-bin.zip" diff --git a/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/controllers/SubmissionController.kt b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/controllers/SubmissionController.kt index 37d92c49a74..cec852bc193 100644 --- a/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/controllers/SubmissionController.kt +++ b/submissions/src/main/kotlin/gov/cdc/prime/reportstream/submissions/controllers/SubmissionController.kt @@ -276,14 +276,13 @@ class SubmissionController( allowedQueryParams.forEach { paramName -> val values = request.getParameterValues(paramName) if (values != null) { - filteredParams[paramName] = values.toList() // Convert array to List + filteredParams[paramName] = values.toList() // Convert array to List } } return filteredParams } - private fun formBlobName( reportId: UUID, contentTypeMime: String,