diff --git a/.github/workflows/push-load-test.yml b/.github/workflows/push-load-test.yml new file mode 100644 index 0000000000..c7d3255ed6 --- /dev/null +++ b/.github/workflows/push-load-test.yml @@ -0,0 +1,61 @@ +name: Push Load Test + +on: + # Invoked via another workflow, value passed in by string + workflow_call: + inputs: + deployment-env: + description: "Environment to deploy to (dev-green or dev-blue only)" + required: true + type: string + options: + - dev-green + - dev-blue + secrets: + aws-role-arn: + required: true + description: "AWS_ROLE_ARN value" + aws-account-id: + required: true + description: "TID_AWS_ACCOUNT_ID value" + +concurrency: + group: deploy-load-test-${{ inputs.deployment-env }} + cancel-in-progress: true + +jobs: + check: + name: Check for changes in load test setup + runs-on: ubuntu-latest + needs: validate + outputs: + changed: ${{ steps.changes.outputs.load_test == 'true' }} + steps: + - name: Checkout + uses: actions/checkout@v6 + - uses: dorny/paths-filter@v4 + id: changes + with: + filters: | + load_test: + - 'deploy/load_test/**' + - 'integration/load_tests/**' + + push: + name: Deploy new version + runs-on: ubuntu-latest + needs: check + if: ${{ needs.check.outputs.changed }} + permissions: + id-token: write + contents: read + steps: + - name: Checkout + uses: actions/checkout@v6 + - name: Build, tag, and push image to Amazon ECR + id: ecr + uses: mbta/actions/build-push-ecr@v2 + with: + docker-repo: "${{ secrets.aws-account-id || secrets.TID_AWS_ACCOUNT_ID }}.dkr.ecr.us-east-1.amazonaws.com/dotcom-load-tests" + dockerfile-path: "-f ./deploy/load_test/Dockerfile ." + role-to-assume: ${{ secrets.aws-role-arn || secrets.AWS_ROLE_ARN }} diff --git a/.github/workflows/use-deploy-ecs.yml b/.github/workflows/use-deploy-ecs.yml index 41925956ab..059877a167 100644 --- a/.github/workflows/use-deploy-ecs.yml +++ b/.github/workflows/use-deploy-ecs.yml @@ -179,3 +179,11 @@ jobs: secrets: aws-account-id: ${{ secrets.aws-account-id }} aws-role-arn: ${{ secrets.aws-role-arn }} + load-test: + uses: ./.github/workflows/push-load-test.yml + if: ${{ inputs.deployment-env == 'dev-green' || inputs.deployment-env == 'dev-blue' }} + with: + deployment-env: ${{ inputs.deployment-env }} + secrets: + aws-account-id: ${{ secrets.aws-account-id }} + aws-role-arn: ${{ secrets.aws-role-arn }} diff --git a/deploy/load_test/Dockerfile b/deploy/load_test/Dockerfile new file mode 100644 index 0000000000..5bd47f9a39 --- /dev/null +++ b/deploy/load_test/Dockerfile @@ -0,0 +1,10 @@ +FROM debian:trixie-20260223-slim + +WORKDIR /app + +RUN apt-get update && apt-get install -y curl git make build-essential inotify-tools nodejs npm + +RUN npm install -g artillery@2.0.33 +COPY ../../integration/load_tests/homepage-heavy-load.yml ./test.yml + +CMD npx artillery run -e ${ENVIRONMENT} ./test.yml diff --git a/integration/load_tests/homepage-heavy-load.yml b/integration/load_tests/homepage-heavy-load.yml index 884d9491c0..d8ea45de86 100644 --- a/integration/load_tests/homepage-heavy-load.yml +++ b/integration/load_tests/homepage-heavy-load.yml @@ -8,10 +8,10 @@ config: duration: 300 arrivalRate: 100 environments: - green: - target: "http://dev-green.mbtace.com" - blue: - target: "http://dev-blue.mbtace.com" + dev-green: + target: "https://dev-green.mbtace.com" + dev-blue: + target: "https://dev-blue.mbtace.com" scenarios: - name: "Stress test single page" flow: diff --git a/integration/load_tests/homepage-light-load.yml b/integration/load_tests/homepage-light-load.yml index 6517c04c49..7d823a23d4 100644 --- a/integration/load_tests/homepage-light-load.yml +++ b/integration/load_tests/homepage-light-load.yml @@ -11,10 +11,10 @@ config: duration: 60 arrivalRate: 3 environments: - green: - target: "http://dev-green.mbtace.com" - blue: - target: "http://dev-blue.mbtace.com" + dev-green: + target: "https://dev-green.mbtace.com" + dev-blue: + target: "https://dev-blue.mbtace.com" scenarios: - name: "Stress test single page" flow: