From 09c7767c5dea12332bf082b863691b38c71b1121 Mon Sep 17 00:00:00 2001 From: Rob Brackett Date: Fri, 21 Feb 2025 16:31:25 -0800 Subject: [PATCH] Auto-update snapshot tests if changing strings The special incantation to update snapshots is tough to remember and non-obvious to many folks who are just updating text copy in the app. This makes the CI workflow auto-update snapshot tests on pull requests (not other pushes) where there were changes to the english strings. It's possible this could make tests pass when they shouldn't (if other things that should not have changed were changed), so it also posts a comment to the PR if it had to update the snapshots that reminds a reviewer to check the snapshot changes. --- .github/workflows/build-client.yml | 53 ++++++++++++++++++++++++++++-- client/src/data/copy/common.tsx | 2 +- 2 files changed, 51 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-client.yml b/.github/workflows/build-client.yml index 7d114fbe..b8f18897 100644 --- a/.github/workflows/build-client.yml +++ b/.github/workflows/build-client.yml @@ -31,6 +31,7 @@ jobs: uses: actions/setup-node@v4 with: node-version: ${{ env.node-version }} + cache: npm - name: Install run: npm ci @@ -55,9 +56,14 @@ jobs: test: runs-on: ubuntu-latest + needs: + - translations defaults: run: working-directory: client + permissions: + contents: write # For commiting changes back to the current PR. + pull-requests: write # For commenting on the PR. steps: - uses: actions/checkout@v4 @@ -65,12 +71,49 @@ jobs: uses: actions/setup-node@v4 with: node-version: ${{ env.node-version }} + cache: npm - name: Install run: npm ci + # We want to know if this branch has changed the english strings, not + # just if the `translations` job had to update it, so we need this check. + - uses: dorny/paths-filter@v3 + id: changes + with: + filters: | + english: + - client/src/i18n/en.json + - name: Unit tests - run: npm test + env: + update_snapshots: ${{ github.event_name == 'pull_request' && steps.changes.outputs.english == 'true' }} + run: | + if [ "${update_snapshots}" == 'true' ]; then + npm run test:update + else + npm test + fi + + - name: Commit changes to Snapshots + uses: stefanzweifel/git-auto-commit-action@v5 + id: commit + if: github.event_name == 'pull_request' + with: + commit_message: 'Auto-update snapshot tests' + file_pattern: '*.snap' + + - name: Comment on the PR about changes + uses: thollander/actions-comment-pull-request@v3 + if: steps.commit.outputs.changes_detected == 'true' + env: + commit_url: 'https://github.com/${{ github.repository }}/commit/${{ steps.commit.outputs.commit_hash }}' + with: + message: > + 🚨 The "snapshot" tests in your PR have been automatically updated + because you changed some text in the app! **Make sure [the changes + to `.snap` files](${{ env.commit_url }}) are correct** and don’t + include other things that should *not* have changed. lint: runs-on: ubuntu-latest @@ -84,6 +127,7 @@ jobs: uses: actions/setup-node@v4 with: node-version: ${{ env.node-version }} + cache: npm - name: Install run: npm ci @@ -116,6 +160,7 @@ jobs: uses: actions/setup-node@v4 with: node-version: ${{ env.node-version }} + cache: npm - name: Install run: npm ci @@ -124,14 +169,16 @@ jobs: if: github.event_name == 'pull_request' run: npm run intl:extract - - uses: stefanzweifel/git-auto-commit-action@v5 + - name: Commit changes to English strings + uses: stefanzweifel/git-auto-commit-action@v5 id: commit-strings if: github.event_name == 'pull_request' with: commit_message: 'Auto-update en.json from component source code' file_pattern: 'client/src/intl/en.json' - - uses: thollander/actions-comment-pull-request@v3 + - name: Comment on the PR about changes + uses: thollander/actions-comment-pull-request@v3 if: steps.commit-strings.outputs.changes_detected == 'true' with: message: > diff --git a/client/src/data/copy/common.tsx b/client/src/data/copy/common.tsx index 5633b92a..a139d181 100644 --- a/client/src/data/copy/common.tsx +++ b/client/src/data/copy/common.tsx @@ -56,7 +56,7 @@ export const UPDATE_BANNER_CONTENT_LARGE = This is an unofficial copy of the CEJST Tool. We are working on an overhaul, but in the meantime some links and text may incorrectly suggest that this site is affiliated with the US Government.`} + defaultMessage={`This is an unofficial copy of the CEJST Tool!!!! We are working on an overhaul, but in the meantime some links and text may incorrectly suggest that this site is affiliated with the US Government.`} description={`Alert body that appears at the top of pages.`} values={{ bold: boldFn,