Skip to content

CRASM-2286- Refactor Playwright ECS task into its own bash script #852

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 36 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
ccceadd
Fix incorrect escape characters in configuration strings.
JCantu248 Apr 9, 2025
cf3aafa
Merge branch 'develop' of github.com:cisagov/XFD into CRASM-2286_Bug_…
JCantu248 Apr 9, 2025
bca4034
Spun the ECS task to its own bash script for ease of testing.
JCantu248 Apr 11, 2025
5d19e6b
Debugging bash script connecting to Fargate.
JCantu248 Apr 16, 2025
3ee619e
Testing for errors in frontend listener in test suite.
JCantu248 Apr 16, 2025
ab09493
Just omit listener check from playwright tests for now while testing.
JCantu248 Apr 16, 2025
3f2330a
Console logs for debugging environment variables.
JCantu248 Apr 18, 2025
e458ffe
Merge branch 'develop' of github.com:cisagov/XFD into CRASM-2286_Bug_…
JCantu248 Apr 23, 2025
279fe54
Add login environment variable temporarily to test around the Okta lo…
JCantu248 Apr 24, 2025
f5f9881
Added an autoconfiguration feature for different environment configur…
JCantu248 Apr 29, 2025
f93d65c
Adding utils/env.ts
JCantu248 Apr 29, 2025
b353990
Remove debug logging statements.
JCantu248 Apr 29, 2025
3ccf3b3
Merge branch 'develop' of github.com:cisagov/XFD into CRASM-2286_Bug_…
JCantu248 Apr 30, 2025
ba9bda9
Simplify logic for determining URL for respective environments.
JCantu248 May 1, 2025
195a446
Merge branch 'develop' of github.com:cisagov/XFD into CRASM-2286_Bug_…
JCantu248 May 5, 2025
cb68348
Refactor to move logic to new Dockerfile.
JCantu248 May 8, 2025
2d70512
Big refactor of Playwright ECS, with new entrypoints, terraform chang…
JCantu248 May 12, 2025
9e208d7
Bug fixes to regression.yml.
JCantu248 May 12, 2025
d18ca8b
Bug fix to Dockerfile.playwright
JCantu248 May 12, 2025
356e1c6
Fixing entrypoint for Playwright
JCantu248 May 12, 2025
464934c
Debugging Dockerfile.playwright
JCantu248 May 12, 2025
bee15b3
Fix Dockerfile to have debian be set to noninteractive.
JCantu248 May 13, 2025
bc25619
Merge branch 'develop' of github.com:cisagov/XFD into CRASM-2286_Bug_…
JCantu248 May 13, 2025
a25260b
Fixing things based on review from Copilot
JCantu248 May 13, 2025
0eb7551
Fix path for chmod
JCantu248 May 13, 2025
a32537c
Merge branch 'develop' of github.com:cisagov/XFD into CRASM-2286_Bug_…
JCantu248 May 14, 2025
b960caf
Add environment argument to dockerfile entrypoint.
JCantu248 May 14, 2025
c601701
Merge branch 'develop' of github.com:cisagov/XFD into CRASM-2286_Bug_…
JCantu248 May 15, 2025
9c5a66b
Adjust frontend URL for playwright and wait timer.
JCantu248 May 19, 2025
c204cfc
Small changes to version issues in pre-commit, small change to regres…
JCantu248 May 20, 2025
05263e0
Merge branch 'develop' into CRASM-2286_Bug_fix_regression_yaml
JCantu248 May 22, 2025
fbcce88
Merge branch 'develop' of github.com:cisagov/XFD into CRASM-2286_Bug_…
JCantu248 Jun 3, 2025
b784892
Fix a path issue with global-setup loading environment variables.
JCantu248 Jun 6, 2025
14b843c
Change docker-compose.yml PW_Headless to be true for Docker instance …
JCantu248 Jun 6, 2025
a986a7c
Revision to test case browser actions and test fixtures.
JCantu248 Jun 10, 2025
246c01e
Merge branch 'develop' of github.com:cisagov/XFD into CRASM-2286_Bug_…
JCantu248 Jun 13, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
193 changes: 76 additions & 117 deletions .github/workflows/regression.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
# yamllint disable

---
name: Regression Testing

Expand Down Expand Up @@ -29,82 +31,62 @@ jobs:
if: github.event_name == 'push' && github.ref == 'refs/heads/develop'
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18

- name: Install dependencies
run: npm ci
- name: Set environment variables for staging
run: echo "ENVIRONMENT=staging" >> $GITHUB_ENV

- name: Run Playwright tests
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
PW_XFD_URL: ${{ vars.PW_XFD_URL }}
PW_XFD_2FA_ISSUER: ${{ secrets.PW_XFD_2FA_ISSUER }}
PW_XFD_2FA_SECRET: ${{ secrets.PW_XFD_2FA_SECRET }}
PW_XFD_PASSWORD: ${{ secrets.PW_XFD_PASSWORD }}
PW_XFD_USERNAME: ${{ secrets.PW_XFD_USERNAME }}
GIT_BRANCH: develop
AUTOMATED_TEST_REPORTS_BUCKET_NAME:
${{ vars.AUTOMATED_TEST_REPORTS_BUCKET_NAME }}
AWS_REGION: ${{ secrets.AWS_REGION }}
AWS_SUBNET: ${{ secrets.AWS_SUBNET }}
AWS_SECURITY_GROUP: ${{ secrets.AWS_SECURITY_GROUP }}
run: |
# Start the ECS task and capture the task ARN
TASK_ARN=$(aws ecs run-task \
--cluster crossfeed-playwright-staging-cd-ecs-cluster \
--task-definition crossfeed-staging-cd-playwright-worker \
--launch-type FARGATE \
--network-configuration 'awsvpcConfiguration={
"subnets": ["${{ secrets.AWS_SUBNET }}"],
"securityGroups": ["${{ secrets.AWS_SECURITY_GROUP }}"],
"assignPublicIp": "ENABLED"
}' \
--region ${{ secrets.AWS_REGION }} \
--overrides '{
"containerOverrides": [
{
"name": "main",
"command": [
"sh",
"-c",
"echo \"Running Playwright Tests\""; \
cd /app/xfd/playwright && npx playwright test"
]
}
]
}' \
--query 'tasks[0].taskArn' --output text)

echo "Started ECS Task with ARN: $TASK_ARN"

# Wait for the ECS task to complete
aws ecs wait tasks-stopped \
--cluster crossfeed-playwright-staging-cd-ecs-cluster\
--tasks $TASK_ARN --region ${{ secrets.AWS_REGION }}

echo "ECS task completed. Continuing with the next steps."
chmod +x run_playwright_tests.sh
CLUSTER_NAME=crossfeed-playwright-staging-cd-ecs-cluster \
TASK_DEFINITION=crossfeed-staging-cd-playwright-worker \
AUTOMATED_TEST_REPORTS_BUCKET_NAME=$AUTOMATED_TEST_REPORTS_BUCKET_NAME \
AWS_SUBNET=$AWS_SUBNET \
AWS_SECURITY_GROUP=$AWS_SECURITY_GROUP \
PW_XFD_2FA_ISSUER=$PW_XFD_2FA_ISSUER \
PW_XFD_2FA_SECRET=$PW_XFD_2FA_SECRET \
PW_XFD_PASSWORD=$PW_XFD_PASSWORD \
./run_playwright_tests.sh

continue-on-error: false # Ensure it stops if the ECS task fails

- name: Upload test results as artifact
- name: Download test report from S3
run: |
mkdir -p ./playwright-report/html
aws s3 cp \
"s3://$AUTOMATED_TEST_REPORTS_BUCKET_NAME/staging/playwright-reports/latest/html/" \
./playwright-report/html/ --recursive

aws s3 cp \
"s3://$AUTOMATED_TEST_REPORTS_BUCKET_NAME/staging/playwright-reports/latest/results.json \
./playwright-report/results.json

- name: Upload Playwright HTML report
uses: actions/upload-artifact@v4
with:
name: playwright-test-results
path: ./test-results/*.json
name: playwright-html-report
path: ./playwright-report/html/

- name: Upload HTML report to S3
run: |
aws s3 cp ./playwright-report/html \
s3://${{ vars.AUTOMATED_TEST_REPORT_BUCKET_NAME }}/\
playwright-reports/html/ --recursive || \
{ echo "HTML report upload failed"; exit 1; }
- name: Upload Playwright results JSON
uses: actions/upload-artifact@v4
with:
name: playwright-results-json
path: ./playwright-report/results.json

- name: Upload JSON report to S3
run: |
if aws s3 cp ./playwright-report/results.json \
s3://${{ vars.AUTOMATED_TEST_REPORT_BUCKET_NAME }}/\
playwright-reports/results.json; then \
echo "JSON report uploaded successfully."; \
else \
echo "Failed to upload JSON report to S3." >&2; \
exit 1; \
fi

test_integration:
runs-on: ubuntu-latest
Expand All @@ -113,79 +95,56 @@ jobs:
if: github.event_name == 'push' && github.ref == 'refs/heads/integration'
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 18

- name: Install dependencies
run: npm ci
- name: Set environment variables for staging
run: echo "ENVIRONMENT=integration" >> $GITHUB_ENV

- name: Run Playwright tests
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
PW_XFD_URL: ${{ vars.PW_XFD_URL }}
PW_XFD_2FA_ISSUER: ${{ secrets.PW_XFD_2FA_ISSUER }}
PW_XFD_2FA_SECRET: ${{ secrets.PW_XFD_2FA_SECRET }}
PW_XFD_PASSWORD: ${{ secrets.PW_XFD_PASSWORD }}
PW_XFD_USERNAME: ${{ secrets.PW_XFD_USERNAME }}
GIT_BRANCH: integration
AUTOMATED_TEST_REPORTS_BUCKET_NAME:
${{ vars.AUTOMATED_TEST_REPORTS_BUCKET_NAME }}
AWS_REGION: ${{ secrets.AWS_REGION }}
AWS_SUBNET: ${{ secrets.AWS_SUBNET }}
AWS_SECURITY_GROUP: ${{ secrets.AWS_SECURITY_GROUP }}
run: |
# Start the ECS task and capture the task ARN
TASK_ARN=$(aws ecs run-task \
--cluster crossfeed-playwright-staging-cd-ecs-cluster \
--task-definition crossfeed-staging-cd-playwright-worker \
--launch-type FARGATE \
--network-configuration 'awsvpcConfiguration={
"subnets": ["${{ secrets.AWS_SUBNET }}"],
"securityGroups": ["${{ secrets.AWS_SECURITY_GROUP }}"],
"assignPublicIp": "ENABLED"
}' \
--region ${{ secrets.AWS_REGION }} \
--overrides '{
"containerOverrides": [
{
"name": "main",
"command": [
"sh",
"-c",
"echo \"Running Playwright Tests\""; \
cd /app/xfd/playwright && npx playwright test"
]
}
]
}' \
--query 'tasks[0].taskArn' --output text)

echo "Started ECS Task with ARN: $TASK_ARN"

# Wait for the ECS task to complete
aws ecs wait tasks-stopped \
--cluster crossfeed-playwright-staging-cd-ecs-cluster\
--tasks $TASK_ARN --region ${{ secrets.AWS_REGION }}

echo "ECS task completed. Continuing with the next steps."
chmod +x run_playwright_tests.sh
CLUSTER_NAME=crossfeed-playwright-integration-ecs-cluster \
TASK_DEFINITION=crossfeed-integration-playwright-worker \
AUTOMATED_TEST_REPORTS_BUCKET_NAME=$AUTOMATED_TEST_REPORTS_BUCKET_NAME \
AWS_SUBNET=$AWS_SUBNET \
AWS_SECURITY_GROUP=$AWS_SECURITY_GROUP \
./run_playwright_tests.sh


continue-on-error: false # Ensure it stops if the ECS task fails

- name: Upload test results as artifact
- name: Download test report from S3
run: |
mkdir -p ./playwright-report/html
aws s3 cp \
"s3://${AUTOMATED_TEST_REPORTS_BUCKET_NAME}/integration/playwright-reports/html/" \
./playwright-report/html/ --recursive

aws s3 cp \
"s3://${AUTOMATED_TEST_REPORTS_BUCKET_NAME}/integration/playwright-reports/results.json" \
./playwright-report/results.json

- name: Upload Playwright HTML report
uses: actions/upload-artifact@v4
with:
name: playwright-test-results
path: ./test-results/*.json
name: playwright-html-report
path: ./playwright-report/html/

- name: Upload HTML report to S3
run: |
aws s3 cp ./playwright-report/ \
s3://${{ vars.AUTOMATED_TEST_REPORT_BUCKET_NAME }}/\
playwright-reports/html/ --recursive || \
{ echo "HTML report upload failed"; exit 1; }

- name: Upload JSON report to S3
run: |
if aws s3 cp ./playwright-report/results.json \
s3://${{ vars.AUTOMATED_TEST_REPORT_BUCKET_NAME }}/\
playwright-reports/results.json; then \
echo "JSON report uploaded successfully."; \
else \
echo "Failed to upload JSON report to S3." >&2; \
exit 1; \
fi
- name: Upload Playwright results JSON
uses: actions/upload-artifact@v4
with:
name: playwright-results-json
path: ./playwright-report/results.json
24 changes: 24 additions & 0 deletions backend/Dockerfile.playwright
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
FROM mcr.microsoft.com/playwright:v1.50.1-jammy

# Set working directory
WORKDIR /app

# Install needed tools
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y git awscli

# Clone Playwright test repo and install dependencies
RUN git clone -b CRASM-2286_Bug_fix_regression_yaml https://github.com/cisagov/xfd.git /app/xfd \
&& cd /app/xfd/playwright \
&& npm ci \
&& npx playwright install --with-deps

# Set working directory to where tests are located
WORKDIR /app/xfd/playwright

# Copy the test runner script
COPY ../worker/entrypoint.playwright.sh /entrypoint.playwright.sh
RUN chmod +x /entrypoint.playwright.sh

# Define entrypoint
ENTRYPOINT ["/entrypoint.playwright.sh"]
2 changes: 2 additions & 0 deletions backend/tools/build-worker.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,5 @@ set -e
docker build --platform linux/amd64 -t crossfeed-worker -f Dockerfile.worker .

docker build --platform linux/amd64 -t pe-worker -f Dockerfile.pe .

docker build --platform linux/amd64 -t playwright-worker -f Dockerfile.playwright .
4 changes: 4 additions & 0 deletions backend/tools/deploy-worker.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ AWS_ECR_DOMAIN=957221700844.dkr.ecr.us-east-1.amazonaws.com

WORKER_TAG=${1:-crossfeed-staging-worker}
PE_WORKER_TAG=${1:-pe-staging-worker}
PW_WORKER_TAG=${1:-playwright-staging-worker}

./tools/build-worker.sh
aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $AWS_ECR_DOMAIN
Expand All @@ -18,3 +19,6 @@ docker push $AWS_ECR_DOMAIN/"$WORKER_TAG":latest

docker tag pe-worker:latest $AWS_ECR_DOMAIN/"$PE_WORKER_TAG":latest
docker push $AWS_ECR_DOMAIN/"$PE_WORKER_TAG":latest

docker tag crossfeed-worker:latest $AWS_ECR_DOMAIN/"$PW_WORKER_TAG":latest
docker push $AWS_ECR_DOMAIN/"$PW_WORKER_TAG":latest
14 changes: 14 additions & 0 deletions backend/worker/entrypoint.playwright.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#!/usr/bin/env bash

set -euo pipefail

echo "🔁 Running Playwright tests..."
npx playwright test

echo "📤 Uploading results to S3..."
aws s3 cp ./playwright-report/html "$S3_HTML_PATH" --recursive --region "$AWS_REGION"
aws s3 cp ./playwright-report/results.json "$S3_JSON_PATH" --region "$AWS_REGION"
aws s3 cp ./playwright-report/html "s3://$AUTOMATED_TEST_REPORTS_BUCKET_NAME/$ENVIRONMENT/playwright-reports/latest/html/" --recursive --region "$AWS_REGION"
aws s3 cp ./playwright-report/results.json "s3://$AUTOMATED_TEST_REPORTS_BUCKET_NAME/$ENVIRONMENT/playwright-reports/latest/results.json" --region "$AWS_REGION"

echo "✅ Tests completed and uploaded."
1 change: 1 addition & 0 deletions dev.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ PW_XFD_PASSWORD =
PW_XFD_2FA_ISSUER =
PW_XFD_2FA_SECRET =
PW_XFD_USER_ROLE =
PW_HEADLESS=false
SESSION_STORAGE = ""

DMZ_SYNC_ENDPOINT='http://localhost:3000'
Expand Down
3 changes: 2 additions & 1 deletion docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -180,9 +180,10 @@ services:
- PW_XFD_2FA_ISSUER=${PW_XFD_2FA_ISSUER}
- PW_XFD_2FA_SECRET=${PW_XFD_2FA_SECRET}
- PW_XFD_PASSWORD=${PW_XFD_PASSWORD}
- PW_XFD_URL=${PW_XFD_URL}
- PW_XFD_URL=http://frontend:3000
- PW_XFD_USER_ROLE=${PW_XFD_USER_ROLE}
- PW_XFD_USERNAME=${PW_XFD_USERNAME}
- PW_HEADLESS=true
command: >
/bin/bash -c "npm ci && npx playwright install --with-deps && npx playwright test"

Expand Down
1 change: 1 addition & 0 deletions infrastructure/integration.tfvars
Original file line number Diff line number Diff line change
Expand Up @@ -118,3 +118,4 @@ ssm_whoisxml_thread_count = "/crossfeed/integration/WHOIS_XML_THREAD_
ssm_whoisxml_api_key = "/crossfeed/integration/WHOIS_XML_API_KEY"
crossfeed_playwright = "crossfeed-playwright-integration"
automated_test_reports_bucket_name = "cisa-crossfeed-integration-automated-test-reports"
playwright_worker_repository_name = "crossfeed-playwright-worker-integration"
Loading
Loading