diff --git a/.github/actions/sanity-test-checks/action.yml b/.github/actions/sanity-test-checks/action.yml
index 22b0420c5..9a40b6e0f 100644
--- a/.github/actions/sanity-test-checks/action.yml
+++ b/.github/actions/sanity-test-checks/action.yml
@@ -1,5 +1,5 @@
name: "Validate Sanity Report"
-description: "Diff the sanity-test report with a fixture and validate expected shape."
+description: "Diff the sanity-test reports with a fixture and validate expected shape."
inputs:
WORKSPACE_ROOT:
@@ -22,18 +22,31 @@ runs:
working-directory: ${{ inputs.WORKSPACE_ROOT }}
run: |
set +e
- TEST_RESULT=$(diff -c <(jq \
- 'walk(if type == "object" then with_entries(.value |= \
- if type == "object" or type == "array" then . \
- else "" \
- end) \
- else . end)' \
- test/__fixtures__/${{ inputs.FIXTURE }}) \
- <(jq 'walk(if type == "object" then with_entries(.value |= \
- if type == "object" or type == "array" then . \
- else "" end) else . end)' \
- test/configs/backstop_data/bitmaps_test/**/report.json)\
+ FIXTURE="test/__fixtures__/${{ inputs.FIXTURE }}"
+ TEST_RESULT=$(\
+ diff -c \
+ <(jq \
+ 'walk(if type == "object" then with_entries(.value |= \
+ if type == "object" or type == "array" \
+ then . \
+ else \
+ "" \
+ end) \
+ else . \
+ end)' \
+ $FIXTURE) \
+ <(jq \
+ 'walk(if type == "object" then with_entries(.value |= \
+ if type == "object" or type == "array" \
+ then . \
+ else \
+ "" \
+ end) \
+ else . \
+ end)' \
+ test/configs/backstop_data/bitmaps_test/**/report.json) \
)
+
echo "TEST_RESULT=$TEST_RESULT" >> $GITHUB_ENV
if [[ "$TEST_RESULT" != "" ]]; then
echo "# ❎ ${{ inputs.RUNNER }} Sanity Different" >> $GITHUB_STEP_SUMMARY
@@ -44,7 +57,7 @@ runs:
echo "# ✅ ${{ inputs.RUNNER }} Sanity Report Valid" >> $GITHUB_STEP_SUMMARY
fi
- - name: "Full Smoke Test Diff"
+ - name: "Full Sanity Report Diff"
id: diff
continue-on-error: true
shell: bash
diff --git a/.github/actions/smoke-test-checks/action.yml b/.github/actions/smoke-test-checks/action.yml
new file mode 100644
index 000000000..03b14f087
--- /dev/null
+++ b/.github/actions/smoke-test-checks/action.yml
@@ -0,0 +1,93 @@
+name: "Validate Smoke Report"
+description: "Diff the smoke-test reports with a fixture and validate expected shape."
+
+inputs:
+ WORKSPACE_ROOT:
+ description: "Working Directory"
+ required: true
+ RUNNER:
+ description: "Test Runner"
+ required: true
+ FIXTURE:
+ description: "Test Report Fixture"
+ required: true
+
+runs:
+ using: "composite"
+ steps:
+ - name: "Validate ${{ inputs.RUNNER }} Report"
+ id: validate
+ continue-on-error: true
+ shell: bash
+ working-directory: ${{ steps.base.outputs.WORKSPACE_ROOT }}
+ run: |
+ set +e
+ FIXTURE="test/__fixtures__/${{ inputs.FIXTURE }}"
+ TEST_RESULT=$(\
+ diff -c \
+ <(jq \
+ 'walk(if type == "object" then with_entries(.value |= \
+ if type == "object" or type == "array"
+ then . \
+ else \
+ "" \
+ end) \
+ else . \
+ end) | \
+ del(\
+ .tests[].pair.diff, \
+ .tests[].pair.diffImage \
+ )'\
+ $FIXTURE) \
+ <(jq \
+ 'walk(if type == "object" then with_entries(.value |= \
+ if type == "object" or type == "array" \
+ then . \
+ else \
+ "" \
+ end) \
+ else . \
+ end) | \
+ del(\
+ .tests[].pair.diff, \
+ .tests[].pair.diffImage\
+ )' \
+ test/configs/backstop_data/bitmaps_test/**/report.json))
+
+ echo "TEST_RESULT=$TEST_RESULT" >> $GITHUB_ENV
+ if [[ "$TEST_RESULT" != "" ]]; then
+ echo "# ❎ ${{ inputs.RUNNER }} Report Different" >> $GITHUB_STEP_SUMMARY
+ echo '```diff' >> $GITHUB_STEP_SUMMARY
+ echo "$TEST_RESULT" >> $GITHUB_STEP_SUMMARY
+ echo '```'
+ else
+ echo "# ✅ ${{ inputs.RUNNER }} Report Validated" >> $GITHUB_STEP_SUMMARY
+ fi
+
+ - name: "Full Smoke Report Diff"
+ id: diff
+ continue-on-error: true
+ shell: bash
+ working-directory: ${{ steps.base.outputs.WORKSPACE_ROOT }}
+ run: |
+ set +e
+ FULL_TEST_DIFF=$(diff <(jq -S '.tests[]' test/__fixtures__/${{ inputs.FIXTURE }}) <(jq -S '.tests[]' test/configs/backstop_data/bitmaps_test/**/report.json))
+ echo "## Unfiltered Diff" >> $GITHUB_STEP_SUMMARY
+ echo "" >> $GITHUB_STEP_SUMMARY
+ echo "Expand Diff
" >> $GITHUB_STEP_SUMMARY
+ echo "" >> $GITHUB_STEP_SUMMARY
+ echo '```diff' >> $GITHUB_STEP_SUMMARY
+ echo "${FULL_TEST_DIFF}" >> $GITHUB_STEP_SUMMARY
+ echo '```' >> $GITHUB_STEP_SUMMARY
+ echo "" >> $GITHUB_STEP_SUMMARY
+ echo " " >> $GITHUB_STEP_SUMMARY
+
+ - name: "Report Validation Outcome"
+ shell: bash
+ working-directory: ${{ steps.base.outputs.WORKSPACE_ROOT }}
+ run: |
+ if [[ "$TEST_RESULT" != "" ]]; then
+ exit 1
+ else
+ exit 0
+ fi
diff --git a/.github/workflows/backstop-smoke-test.yml b/.github/workflows/backstop-smoke-test.yml
index da4f7e904..c9d66d62d 100644
--- a/.github/workflows/backstop-smoke-test.yml
+++ b/.github/workflows/backstop-smoke-test.yml
@@ -40,50 +40,11 @@ jobs:
run: |
npm run smoke-test
- - name: "Validate Puppeteer Report"
- id: validate
- continue-on-error: true
- shell: bash
- working-directory: ${{ steps.base.outputs.WORKSPACE_ROOT }}
- run: |
- set +e
- PUPPETEER_TEST_RESULT=$(diff -c <(jq 'walk(if type == "object" then with_entries(.value |= if type == "object" or type == "array" then . else "" end) else . end) | del(.tests[].pair.diff, .tests[].pair.diffImage)' test/__fixtures__/smoke-test.json) \
- <(jq 'walk(if type == "object" then with_entries(.value |= if type == "object" or type == "array" then . else "" end) else . end) | del(.tests[].pair.diff, .tests[].pair.diffImage)' test/configs/backstop_data/bitmaps_test/**/report.json))
- echo "PUPPETEER_TEST_RESULT=$PUPPETEER_TEST_RESULT" >> $GITHUB_ENV
- if [[ "$PUPPETEER_TEST_RESULT" != "" ]]; then
- echo "# ❎ Puppeteer Report Different" >> $GITHUB_STEP_SUMMARY
- echo '```diff' >> $GITHUB_STEP_SUMMARY
- echo "$PUPPETEER_TEST_RESULT" >> $GITHUB_STEP_SUMMARY
- echo '```'
- else
- echo "# ✅ Puppeteer Report Validated" >> $GITHUB_STEP_SUMMARY
- fi
-
- - name: "Full Smoke Test Diff"
- id: diff
- continue-on-error: true
- shell: bash
- working-directory: ${{ steps.base.outputs.WORKSPACE_ROOT }}
- run: |
- set +e
- FULL_TEST_DIFF=$(diff <(jq -S '.tests[]' test/__fixtures__/sanity-test-playwright.json) <(jq -S '.tests[]' test/configs/backstop_data/bitmaps_test/**/report.json))
- echo "## Unfiltered Diff" >> $GITHUB_STEP_SUMMARY
- echo "" >> $GITHUB_STEP_SUMMARY
- echo "Expand Diff
" >> $GITHUB_STEP_SUMMARY
- echo "" >> $GITHUB_STEP_SUMMARY
- echo '```diff' >> $GITHUB_STEP_SUMMARY
- echo "${FULL_TEST_DIFF}" >> $GITHUB_STEP_SUMMARY
- echo '```' >> $GITHUB_STEP_SUMMARY
- echo "" >> $GITHUB_STEP_SUMMARY
- echo " " >> $GITHUB_STEP_SUMMARY
-
- - name: "Report Validation Outcome"
- run: |
- if [[ "$PUPPETEER_TEST_RESULT" != "" ]]; then
- exit 1
- else
- exit 0
- fi
+ - uses: ./actions/.github/actions/smoke-test-checks
+ with:
+ WORKSPACE_ROOT: ${{ steps.base.outputs.WORKSPACE_ROOT }}
+ RUNNER: "Puppeteer"
+ FIXTURE: "smoke-test.json"
smoke-playwright:
name: 💨 Playwright
@@ -113,21 +74,8 @@ jobs:
npx playwright install --with-deps
npm run smoke-test-playwright
- - name: "Validate Playwright Report"
- id: validate
- continue-on-error: true
- shell: bash
- working-directory: ${{ steps.base.outputs.WORKSPACE_ROOT }}
- run: |
- set +e
- PLAYWRIGHT_TEST_RESULT=$(diff -c <(jq -S 'walk(if type == "object" then with_entries(.value |= if type == "object" or type == "array" then . else "" end) else . end)' | del(.tests[].pair.diff, .tests[].pair.diffImage)' test/__fixtures__/smoke-test-playwright.json) \
- <(jq -S 'walk(if type == "object" then with_entries(.value |= if type == "object" or type == "array" then . else "" end) else . end)' | del(.tests[].pair.diff, .tests[].pair.diffImage)' test/configs/backstop_data/bitmaps_test/**/report.json))
- echo "PLAYWRIGHT_TEST_RESULT=$PLAYWRIGHT_TEST_RESULT" >> $GITHUB_ENV
- if [[ "$PLAYWRIGHT_TEST_RESULT" != "" ]]; then
- echo "# ❎ Playwright Report Different" >> $GITHUB_STEP_SUMMARY
- echo '```diff' >> $GITHUB_STEP_SUMMARY
- echo "$PLAYWRIGHT_TEST_RESULT" >> $GITHUB_STEP_SUMMARY
- echo '```'
- else
- echo "# ✅ Playwright Report Validated" >> $GITHUB_STEP_SUMMARY
- fi
+ - uses: ./actions/.github/actions/smoke-test-checks
+ with:
+ WORKSPACE_ROOT: ${{ steps.base.outputs.WORKSPACE_ROOT }}
+ RUNNER: "Playwright"
+ FIXTURE: "smoke-test-playwright.json"
diff --git a/.github/workflows/docker-smoke-test.yml b/.github/workflows/docker-smoke-test.yml
index 5fc46e5ee..a0b3998a7 100644
--- a/.github/workflows/docker-smoke-test.yml
+++ b/.github/workflows/docker-smoke-test.yml
@@ -27,33 +27,22 @@ jobs:
packages: write
steps:
- - name: Checkout
+ - name: Checkout actions
uses: actions/checkout@v4
with:
- fetch-depth: 1
- ref: ${{ github.event.pull_request.head.sha || github.ref }}
+ ref: ${{ github.event.pull_request.head.sha || github.head_ref || github.ref_name || github.ref }}
+ sparse-checkout: |
+ .github/actions
+ path: actions
- - name: "Setup Node, npm Cache, and Install"
- uses: ./.github/actions/setup-base
+ - uses: ./actions/.github/actions/setup-base
+ id: base
- - name: Set Name and Tag Vars
- env:
- name: "${{ env.BRANCH_NAME }}"
- run: |
- echo "IMAGE_NAME_LC=${IMAGE_NAME,,}" >>${GITHUB_ENV}
- echo "TAG=${name/\//-}" >> $GITHUB_ENV
- echo "PV=$(cat package.json | jq -r '.version')" >> $GITHUB_ENV
-
- - name: Log in to the Container Registry
- uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
+ - uses: ./actions/.github/actions/prepare-docker
with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Pull Image
- run: |
- docker pull $REGISTRY/$IMAGE_NAME_LC:$TAG
+ REGISTRY: ${{ env.REGISTRY }}
+ ACTOR: ${{ github.actor }}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: "𓋏 Run `backstop test --confg=backstop_features` in Docker"
continue-on-error: true
@@ -61,45 +50,12 @@ jobs:
set +e
cd test/configs/ && docker run --rm -t --mount type=bind,source="$(pwd)",target=/src $REGISTRY/$IMAGE_NAME_LC:$TAG test --config=backstop_features
- - name: "Validate Puppeteer Report"
- continue-on-error: true
- run: |
- set +e
- PUPPETEER_TEST_RESULT=$(diff -c <(jq 'walk(if type == "object" then with_entries(.value |= if type == "object" or type == "array" then . else "" end) else . end)' test/__fixtures__/smoke-test-docker.json) \
- <(jq 'walk(if type == "object" then with_entries(.value |= if type == "object" or type == "array" then . else "" end) else . end)' test/configs/backstop_data/bitmaps_test/**/report.json))
- echo "PUPPETEER_TEST_RESULT=$PUPPETEER_TEST_RESULT" >> $GITHUB_ENV
- if [[ "$PUPPETEER_TEST_RESULT" != "" ]]; then
- echo "# ❎ Puppeteer Smoke Different" >> $GITHUB_STEP_SUMMARY
- echo '```diff' >> $GITHUB_STEP_SUMMARY
- echo "${PUPPETEER_TEST_RESULT}" >> $GITHUB_STEP_SUMMARY
- echo '```' >> $GITHUB_STEP_SUMMARY
- else
- echo "# ✅ Puppeteer Smoke Report Valid" >> $GITHUB_STEP_SUMMARY
- fi
-
- - name: "Full Smoke Report Diff"
- id: diff
- continue-on-error: true
- run: |
- set +e
- FULL_TEST_DIFF=$(diff <(jq -S '.tests[]' test/__fixtures__/smoke-test-docker.json) <(jq -S '.tests[]' test/configs/backstop_data/bitmaps_test/**/report.json))
- echo "## Unfiltered Diff" >> $GITHUB_STEP_SUMMARY
- echo "" >> $GITHUB_STEP_SUMMARY
- echo "Expand Diff
" >> $GITHUB_STEP_SUMMARY
- echo "" >> $GITHUB_STEP_SUMMARY
- echo '```diff' >> $GITHUB_STEP_SUMMARY
- echo "${FULL_TEST_DIFF}" >> $GITHUB_STEP_SUMMARY
- echo '```' >> $GITHUB_STEP_SUMMARY
- echo "" >> $GITHUB_STEP_SUMMARY
- echo " " >> $GITHUB_STEP_SUMMARY
-
- - name: "Report Validation Outcome"
- run: |
- if [[ "$PUPPETEER_TEST_RESULT" != "" ]]; then
- exit 1
- else
- exit 0
- fi
+ - name: "Validate Puppeteer Docker Test Results"
+ uses: ./actions/.github/actions/smoke-test-checks
+ with:
+ WORKSPACE_ROOT: ${{ steps.base.outputs.WORKSPACE_ROOT }}
+ RUNNER: "Puppeteer"
+ FIXTURE: "smoke-test-docker.json"
smoke-test-playwright:
name: 💨 Playwright
@@ -110,33 +66,22 @@ jobs:
packages: write
steps:
- - name: Checkout
+ - name: Checkout actions
uses: actions/checkout@v4
with:
- fetch-depth: 1
- ref: ${{ github.event.pull_request.head.sha || github.ref }}
+ ref: ${{ github.event.pull_request.head.sha || github.head_ref || github.ref_name || github.ref }}
+ sparse-checkout: |
+ .github/actions
+ path: actions
- - name: "Setup Node, npm Cache, and Install"
- uses: ./.github/actions/setup-base
+ - uses: ./actions/.github/actions/setup-base
+ id: base
- - name: Set Name and Tag Vars
- env:
- name: "${{ env.BRANCH_NAME }}"
- run: |
- echo "IMAGE_NAME_LC=${IMAGE_NAME,,}" >>${GITHUB_ENV}
- echo "TAG=${name/\//-}" >> $GITHUB_ENV
- echo "PV=$(cat package.json | jq -r '.version')" >> $GITHUB_ENV
-
- - name: Log in to the Container registry
- uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1
+ - uses: ./actions/.github/actions/prepare-docker
with:
- registry: ${{ env.REGISTRY }}
- username: ${{ github.actor }}
- password: ${{ secrets.GITHUB_TOKEN }}
-
- - name: Pull Image
- run: |
- docker pull $REGISTRY/$IMAGE_NAME_LC:$TAG
+ REGISTRY: ${{ env.REGISTRY }}
+ ACTOR: ${{ github.actor }}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: "🎭 Run `backstop test --confg=backstop_features_pw` in Docker"
continue-on-error: true
@@ -144,42 +89,9 @@ jobs:
set +e
cd test/configs/ && docker run --rm -t --mount type=bind,source="$(pwd)",target=/src $REGISTRY/$IMAGE_NAME_LC:$TAG test --config=backstop_features_pw
- - name: "Validate Playwright Report"
- continue-on-error: true
- run: |
- set +e
- PLAYWRIGHT_TEST_RESULT=$(diff -c <(jq 'walk(if type == "object" then with_entries(.value |= if type == "object" or type == "array" then . else "" end) else . end)' test/__fixtures__/smoke-test-playwright-docker.json) \
- <(jq 'walk(if type == "object" then with_entries(.value |= if type == "object" or type == "array" then . else "" end) else . end)' test/configs/backstop_data/bitmaps_test/**/report.json))
- echo "PLAYWRIGHT_TEST_RESULT=$PLAYWRIGHT_TEST_RESULT" >> $GITHUB_ENV
- if [[ "$PLAYWRIGHT_TEST_RESULT" != "" ]]; then
- echo "# ❎ Playwright Sanity Report Different" >> $GITHUB_STEP_SUMMARY
- echo '```diff' >> $GITHUB_STEP_SUMMARY
- echo "${PLAYWRIGHT_TEST_RESULT}" >> $GITHUB_STEP_SUMMARY
- echo '```' >> $GITHUB_STEP_SUMMARY
- else
- echo "# ✅ Playwright Sanity Report Valid" >> $GITHUB_STEP_SUMMARY
- fi
-
- - name: "Full Sanity Report Diff"
- id: diff
- continue-on-error: true
- run: |
- set +e
- FULL_TEST_DIFF=$(diff <(jq -S '.tests[]' test/__fixtures__/smoke-test-playwright-docker.json) <(jq -S '.tests[]' test/configs/backstop_data/bitmaps_test/**/report.json))
- echo "## Unfiltered Diff" >> $GITHUB_STEP_SUMMARY
- echo "" >> $GITHUB_STEP_SUMMARY
- echo "Expand Diff
" >> $GITHUB_STEP_SUMMARY
- echo "" >> $GITHUB_STEP_SUMMARY
- echo '```diff' >> $GITHUB_STEP_SUMMARY
- echo "${FULL_TEST_DIFF}" >> $GITHUB_STEP_SUMMARY
- echo '```' >> $GITHUB_STEP_SUMMARY
- echo "" >> $GITHUB_STEP_SUMMARY
- echo " " >> $GITHUB_STEP_SUMMARY
-
- - name: "Report Validation Outcome"
- run: |
- if [[ "$PLAYWRIGHT_TEST_RESULT" != "" ]]; then
- exit 1
- else
- exit 0
- fi
+ - name: "Validate Playwright Docker Test Results"
+ uses: ./actions/.github/actions/smoke-test-checks
+ with:
+ WORKSPACE_ROOT: ${{ steps.base.outputs.WORKSPACE_ROOT }}
+ RUNNER: "Playwright"
+ FIXTURE: "smoke-test-playwright-docker.json"