diff --git a/.github/actions/install-cache-deps/action.yml b/.github/actions/install-cache-deps/action.yml index 4857b651a..e309ca41a 100644 --- a/.github/actions/install-cache-deps/action.yml +++ b/.github/actions/install-cache-deps/action.yml @@ -54,7 +54,7 @@ runs: shell: bash working-directory: ${{ inputs.WORKSPACE_ROOT }} id: playwright-version - run: echo 'PLAYWRIGHT_VERSION=$(cat package.json | jq -r '.dependencies.playwright' || 'latest')' >> $GITHUB_ENV + run: echo "PLAYWRIGHT_VERSION=$(cat package.json | jq -r '.dependencies.["@playwright/test"]' || 'latest')" >> $GITHUB_ENV - uses: actions/cache@v4 if: ${{ inputs.BROWSER_BINARIES }} diff --git a/.github/workflows/bdt-fe.yml b/.github/workflows/bdt-fe.yml index ec464b6af..376662212 100644 --- a/.github/workflows/bdt-fe.yml +++ b/.github/workflows/bdt-fe.yml @@ -1,65 +1,17 @@ -name: 🚀 Build & Deploy -run-name: "🚀 ${{ inputs.env == 'prd' && 'PRD' || 'STG' }} - Build & Deploy - ${{ github.event_name == 'pull_request' && format('PR #{0}: {1}', github.event.pull_request.number, github.event.pull_request.title) || format('latest {0}', github.ref_name) }}" +name: 🚜 Build, Deploy, and Test +run-name: "🚜 ${{ github.ref_name == 'main' && 'PRD' || 'STG' }} - Build, Deploy, and Test - ${{ github.event_name == 'pull_request' && format('PR #{0}: {1}', github.event.pull_request.number, github.event.pull_request.title) || format('latest {0}', github.ref_name) }}" on: workflow_dispatch: - workflow_call: - inputs: - env: - description: "Target deployment environment." - type: string - required: true - secrets: - AWS_S3_BUCKET: - required: true - AWS_ACCESS_KEY_ID: - required: true - AWS_SECRET_ACCESS_KEY: - required: true - AWS_REGION: - required: true - PUBLIC_API_URL: - required: true - PUBLIC_API_PATH_NAVIGATION: - required: true - PUBLIC_API_PATH_HOME: - required: true - PUBLIC_API_PATH_FOOTER: - required: true - PUBLIC_API_PATH_PRIVACY: - required: true - PUBLIC_API_PATH_POSTS_PAGE: - required: true - PUBLIC_API_PATH_POSTS: - required: true - PUBLIC_POSTS_PREVIEW_PARAMS: - required: true - PUBLIC_API_PATH_POST: - required: true - PUBLIC_POST_PARAMS: - required: true - PUBLIC_API_PATH_CATEGORY: - required: true - PUBLIC_CATEGORY_PAGE_PARAMS: - required: true - PUBLIC_API_PATH_CV_PAGE: - required: true - PUBLIC_API_LANDING_PAGE_PARTIAL: - required: true - PUBLIC_API_CV_COLLECTION_PARAMS: - required: true - PUBLIC_API_CV_PATH_LANDING_POSITION_LISTING: - required: true - PUBLIC_API_CV_PATH_LANDING_EXPERIENCE_LISTING: - required: true - API_KEY: - required: true - PUBLIC_ENV: - required: true - DISTRIBUTION: - required: true - GH_WORKFLOW_TOKEN: - required: true + + pull_request: + paths: + - "front/**" + branches: [main, develop] + push: + paths: + - "front/**" + branches: [develop] permissions: checks: write @@ -68,119 +20,102 @@ permissions: env: BRANCH_NAME: ${{ github.head_ref || github.ref_name }} - NODE_VERSION: 20 jobs: - build_deploy: - name: ${{ inputs.env == 'prd' && 'PRD' || 'STG' }} Deployment - runs-on: ubuntu-latest - environment: - name: ${{ inputs.env }} - url: "https://${{ vars.WWW_DOMAIN }}" - concurrency: - group: ${{ inputs.env == 'prd' && 'production-build' || 'staging-build'}} - cancel-in-progress: true + lint: + name: 💨 + uses: ./.github/workflows/lint.yml + with: + env: ${{ github.ref_name == 'main' && 'prd' || 'stg' }} - env: - DEPLOY_ENV: "${{ vars.ENV_NAME }}" - - steps: - - name: 𐂷 Checkout - uses: actions/checkout@v4 - with: - repository: dgrebb/dgrebb.com - ref: ${{ github.ref }} - token: ${{ github.token }} - fetch-depth: 1 - sparse-checkout: | - .github/actions - front + build_deploy: + name: 🚀 + needs: lint + uses: ./.github/workflows/bd-fe.yml + with: + env: ${{ github.ref_name == 'main' && 'prd' || 'stg' }} + secrets: + AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_REGION: ${{ secrets.AWS_REGION }} + PUBLIC_API_URL: ${{ secrets.PUBLIC_API_URL }} + PUBLIC_API_PATH_NAVIGATION: ${{ secrets.PUBLIC_API_PATH_NAVIGATION }} + PUBLIC_API_PATH_HOME: ${{ secrets.PUBLIC_API_PATH_HOME }} + PUBLIC_API_PATH_FOOTER: ${{ secrets.PUBLIC_API_PATH_FOOTER }} + PUBLIC_API_PATH_PRIVACY: ${{ secrets.PUBLIC_API_PATH_PRIVACY }} + PUBLIC_API_PATH_POSTS_PAGE: ${{ secrets.PUBLIC_API_PATH_POSTS_PAGE }} + PUBLIC_API_PATH_POSTS: ${{ secrets.PUBLIC_API_PATH_POSTS }} + PUBLIC_POSTS_PREVIEW_PARAMS: ${{ secrets.PUBLIC_POSTS_PREVIEW_PARAMS }} + PUBLIC_API_PATH_POST: ${{ secrets.PUBLIC_API_PATH_POST }} + PUBLIC_POST_PARAMS: ${{ secrets.PUBLIC_POST_PARAMS }} + PUBLIC_API_PATH_CATEGORY: ${{ secrets.PUBLIC_API_PATH_CATEGORY }} + PUBLIC_CATEGORY_PAGE_PARAMS: ${{ secrets.PUBLIC_CATEGORY_PAGE_PARAMS }} + PUBLIC_API_PATH_CV_PAGE: ${{ secrets.PUBLIC_API_PATH_CV_PAGE }} + PUBLIC_API_LANDING_PAGE_PARTIAL: ${{ secrets.PUBLIC_API_LANDING_PAGE_PARTIAL }} + PUBLIC_API_CV_COLLECTION_PARAMS: ${{ secrets.PUBLIC_API_CV_COLLECTION_PARAMS }} + PUBLIC_API_CV_PATH_LANDING_POSITION_LISTING: ${{ secrets.PUBLIC_API_CV_PATH_LANDING_POSITION_LISTING }} + PUBLIC_API_CV_PATH_LANDING_EXPERIENCE_LISTING: ${{ secrets.PUBLIC_API_CV_PATH_LANDING_EXPERIENCE_LISTING }} + API_KEY: ${{ secrets.API_KEY }} + PUBLIC_ENV: ${{ secrets.PUBLIC_ENV }} + DISTRIBUTION: ${{ secrets.DISTRIBUTION }} + GH_WORKFLOW_TOKEN: ${{ secrets.GH_WORKFLOW_TOKEN }} - - name: 🛢 Install Dependencies - uses: ./.github/actions/install-cache-deps - with: - WORKSPACE_ROOT: front + backstop: + name: 👀 + needs: build_deploy + uses: ./.github/workflows/test-backstop.yml + with: + env: ${{ github.ref_name == 'main' && 'prd' || 'stg' }} + secrets: + GH_WORKFLOW_TOKEN: ${{ secrets.GH_WORKFLOW_TOKEN }} + AWS_S3_BUCKET_REPORTS: ${{ secrets.AWS_S3_BUCKET_REPORTS }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_REGION: ${{ secrets.AWS_REGION }} + REPORTS_DISTRIBUTION: ${{ secrets.REPORTS_DISTRIBUTION }} - - name: 🤿 Set Vars - id: vars - env: - name: "${{ env.BRANCH_NAME }}" - RELEASE_SUFFIX: ${{ contains(github.ref, 'main') && '' || contains(github.ref, 'release') && '-RC' || '-alpha.' }} - run: | - if [ ${{ inputs.env }} == 'prd' ]; then - echo "RELEASE_NAME=front@$(cat front/package.json | jq -r '.version')${RELEASE_SUFFIX}" >> $GITHUB_ENV - else - echo "RELEASE_NAME=front@$(cat front/package.json | jq -r '.version')${RELEASE_SUFFIX}${name/\//-}" >> $GITHUB_ENV - fi - echo "DIST=$(date +%y%m%d-%H%M%S)" >> $GITHUB_ENV + lighthouse: + name: 🕯️ + needs: build_deploy + uses: ./.github/workflows/test-lighthouse.yml + with: + env: ${{ github.ref_name == 'main' && 'prd' || 'stg' }} + secrets: + AWS_S3_BUCKET_REPORTS: ${{ secrets.AWS_S3_BUCKET_REPORTS }} + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_REGION: ${{ secrets.AWS_REGION }} + REPORTS_DISTRIBUTION: ${{ secrets.REPORTS_DISTRIBUTION }} + GH_WORKFLOW_TOKEN: ${{ secrets.GH_WORKFLOW_TOKEN }} - - name: 📐 Set Environment - env: - name: "${{ env.BRANCH_NAME }}" - run: | - touch front/.env - echo ORIGIN='${{ vars.WWW_DOMAIN }}' >> front/.env - echo API_URL='${{ secrets.PUBLIC_API_URL }}' >> front/.env - echo API_PATH_NAVIGATION='${{ secrets.PUBLIC_API_PATH_NAVIGATION }}' >> front/.env - echo API_PATH_HOME='${{ secrets.PUBLIC_API_PATH_HOME }}' >> front/.env - echo API_PATH_FOOTER='${{ secrets.PUBLIC_API_PATH_FOOTER }}' >> front/.env - echo API_PATH_PRIVACY='${{ secrets.PUBLIC_API_PATH_PRIVACY }}' >> front/.env - echo API_PATH_POSTS_PAGE='${{ secrets.PUBLIC_API_PATH_POSTS_PAGE }}' >> front/.env - echo API_PATH_POSTS='${{ secrets.PUBLIC_API_PATH_POSTS }}' >> front/.env - echo POSTS_PREVIEW_PARAMS='${{ secrets.PUBLIC_POSTS_PREVIEW_PARAMS }}' >> front/.env - echo API_PATH_POST='${{ secrets.PUBLIC_API_PATH_POST }}' >> front/.env - echo POST_PARAMS='${{ secrets.PUBLIC_POST_PARAMS }}' >> front/.env - echo API_PATH_CATEGORY='${{ secrets.PUBLIC_API_PATH_CATEGORY }}' >> front/.env - echo CATEGORY_PAGE_PARAMS='${{ secrets.PUBLIC_CATEGORY_PAGE_PARAMS }}' >> front/.env - echo API_PATH_CV_PAGE='${{ secrets.PUBLIC_API_PATH_CV_PAGE }}' >> front/.env - echo API_CV_PATH_LANDING_POSITION_LISTING='${{ secrets.PUBLIC_API_CV_PATH_LANDING_POSITION_LISTING }}' >> front/.env - echo API_CV_PATH_LANDING_EXPERIENCE_LISTING='${{ secrets.PUBLIC_API_CV_PATH_LANDING_EXPERIENCE_LISTING }}' >> front/.env - echo API_LANDING_PAGE_PARTIAL='${{ secrets.PUBLIC_API_LANDING_PAGE_PARTIAL }}' >> front/.env - echo API_CV_COLLECTION_PARAMS='${{ secrets.PUBLIC_API_CV_COLLECTION_PARAMS }}' >> front/.env - echo PUBLIC_API_PATH_POSITIONS='${{ secrets.PUBLIC_API_PATH_POSITIONS }}' >> front/.env - echo API_KEY=${{ secrets.API_KEY }} >> front/.env - echo RELEASE="${RELEASE_NAME}" >> front/.env - echo PUBLIC_ENV=${{ secrets.PUBLIC_ENV }} >> front/.env - cat front/.env + pagespeed: + name: 📈 + needs: build_deploy + uses: ./.github/workflows/test-psi.yml + with: + env: ${{ github.ref_name == 'main' && 'prd' || 'stg' }} + secrets: + PSI_APIKEY: ${{ secrets.PSI_APIKEY }} + GH_WORKFLOW_TOKEN: ${{ secrets.GH_WORKFLOW_TOKEN }} - - name: ↻ Build + summarize: + name: ✍ Workflow + needs: [backstop, lighthouse, pagespeed] + runs-on: ubuntu-latest + environment: + name: ${{ github.ref_name == 'main' && 'prd' || 'stg' }} + url: "https://${{ vars.WWW_DOMAIN }}" + steps: + - name: generate run: | - cd front - if [ ${{ inputs.env }} == 'prd' ]; then - e=p - else - e=s + echo '# Summary' >> $GITHUB_STEP_SUMMARY + echo '## Run Initiator' + echo '- Actor: ${{ github.actor }}' >> $GITHUB_STEP_SUMMARY + echo '- Event: ${{ github.event_name }}' >> $GITHUB_STEP_SUMMARY + echo '## Run Details' >> $GITHUB_STEP_SUMMARY + echo '- Branch: [${{ env.BRANCH_NAME }}](https://github.com/dgrebb/dgrebb.com/tree/${{ env.BRANCH_NAME }})' >> $GITHUB_STEP_SUMMARY + if [ "${{ github.event_name }}" = "pull_request" ]; then + echo '- Pull Request: [#${{ github.event.number }}](https://github.com/dgrebb/dgrebb.com/pull/${{ github.event.number }}) ${{ github.event.pull_request.title }}' >> $GITHUB_STEP_SUMMARY + echo '- ${{ github.event.pull_request.changed_files }} Files Changed: [ ${{ github.event.pull_request.commits }} Commits](https://github.com/dgrebb/dgrebb.com/pull/${{ github.event.number }}/commits) | [Diff](https://github.com/dgrebb/dgrebb.com/pull/${{ github.event.number }}/files)' >> $GITHUB_STEP_SUMMARY fi - pnpm run build.${e} - - - name: 🤖 Robots - if: ${{ inputs.env == 'prd' }} - run: | - robots=front/build/robots.txt - sed -i 's/^Disallow\: \/$/Allow\: \//' front/build/robots.txt - echo "" >>$robots - echo "" >>$robots - echo "User-agent: Googlebot" >>$robots - echo "Allow: /s/" >>$robots - echo "" >>$robots - echo "Sitemap: https://www.dgrebb.com/sitemap.xml" >>$robots - - - name: ↕ Sync S3 - uses: jakejarvis/s3-sync-action@master - with: - args: --acl public-read --follow-symlinks --delete --cache-control max-age=8380800,public - env: - AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_REGION: ${{ secrets.AWS_REGION }} - SOURCE_DIR: "front/build" - - - name: ∅ Invalidate CloudFront - uses: chetan/invalidate-cloudfront-action@v2 - env: - DISTRIBUTION: ${{ secrets.DISTRIBUTION }} - PATHS: "/*" - AWS_REGION: ${{ secrets.AWS_REGION }} - AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} - AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} diff --git a/_ci/backstop/package.json b/_ci/backstop/package.json index 497a5b1d0..0c5dfa35d 100644 --- a/_ci/backstop/package.json +++ b/_ci/backstop/package.json @@ -24,10 +24,11 @@ "author": "", "license": "ISC", "dependencies": { - "backstopjs": "github:dgrebb/dg-backstop#1.0.1", + "backstopjs": "github:dgrebb/dg-backstop#1.0.2", "cors": "^2.8.5", "http-server": "^14.1.1", "patch-package": "^8.0.0", + "@playwright/test": "1.42.1", "pm2": "^5.3.1", "super-simple-web-server": "github:dgrebb/super-simple-web-server#0.0.2" }, diff --git a/_ci/backstop/pnpm-lock.yaml b/_ci/backstop/pnpm-lock.yaml index 0ae140798..ad210f5a1 100644 --- a/_ci/backstop/pnpm-lock.yaml +++ b/_ci/backstop/pnpm-lock.yaml @@ -8,9 +8,12 @@ overrides: proxy-agent@<6.4.0: ^6.4.0 dependencies: + '@playwright/test': + specifier: 1.42.1 + version: 1.42.1 backstopjs: - specifier: github:dgrebb/dg-backstop#1.0.1 - version: github.com/dgrebb/dg-backstop/bb533a4fb820e3035e964e3d0204ff066778d0ef + specifier: github:dgrebb/dg-backstop#1.0.2 + version: github.com/dgrebb/dg-backstop/b6b53fbdb16d0dd04d844a9e57fcfe8c33d8f498 cors: specifier: ^2.8.5 version: 2.8.5 @@ -88,6 +91,14 @@ packages: uuid: 3.4.0 dev: false + /@playwright/test@1.42.1: + resolution: {integrity: sha512-Gq9rmS54mjBL/7/MvBaNOBwbfnh7beHvS6oS4srqXFcQHpQCV1+c8JXWE8VLPyRDhgS3H8x8A7hztqI9VnwrAQ==} + engines: {node: '>=16'} + hasBin: true + dependencies: + playwright: 1.42.1 + dev: false + /@pm2/agent@2.0.3: resolution: {integrity: sha512-xkqqCoTf5VsciMqN0vb9jthW7olVAi4KRFNddCc7ZkeJZ3i8QwZANr4NSH2H5DvseRFHq7MiPspRY/EWAFWWTg==} dependencies: @@ -151,8 +162,8 @@ packages: - supports-color dev: false - /@puppeteer/browsers@2.1.0: - resolution: {integrity: sha512-xloWvocjvryHdUjDam/ZuGMh7zn4Sn3ZAaV4Ah2e2EwEt90N3XphZlSsU3n0VDc1F7kggCjMuH0UuxfPQ5mD9w==} + /@puppeteer/browsers@2.2.0: + resolution: {integrity: sha512-MC7LxpcBtdfTbzwARXIkqGZ1Osn3nnZJlm+i0+VqHl72t//Xwl9wICrXT8BwtgC6s1xJNHsxOpvzISUqe92+sw==} engines: {node: '>=18'} hasBin: true dependencies: @@ -486,14 +497,15 @@ packages: fsevents: 2.3.3 dev: false - /chromium-bidi@0.5.9(devtools-protocol@0.0.1249869): - resolution: {integrity: sha512-wOTX3m2zuHX0zRX4h7Ol1DAGz0cqHzo2IrAPvOqBxdd4ZR32vxg4FKNjmBihi1oP9b1QGSBBG5VNUUXUCsxDfg==} + /chromium-bidi@0.5.14(devtools-protocol@0.0.1262051): + resolution: {integrity: sha512-zm4mX61/U4KXs+S/0WIBHpOWqtpW6FPv1i7n4UZqDDc5LOQ9/Y1MAnB95nO7i/lFFuijLjpe1XMdNcqDqwlH5w==} peerDependencies: devtools-protocol: '*' dependencies: - devtools-protocol: 0.0.1249869 + devtools-protocol: 0.0.1262051 mitt: 3.0.1 urlpattern-polyfill: 10.0.0 + zod: 3.22.4 dev: false /ci-info@3.9.0: @@ -611,14 +623,6 @@ packages: resolution: {integrity: sha512-/f6gpQuxDaqXu+1kwQYSckUglPaOrHdbIlBAu0YuW8/Cdb45XwXYNUBXg3r/9Mo6n540Kn/smKcZWko5x99KrQ==} dev: false - /cross-fetch@4.0.0: - resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} - dependencies: - node-fetch: 2.7.0 - transitivePeerDependencies: - - encoding - dev: false - /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -713,8 +717,8 @@ packages: engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dev: false - /devtools-protocol@0.0.1249869: - resolution: {integrity: sha512-Ctp4hInA0BEavlUoRy9mhGq0i+JSo/AwVyX2EFgZmV1kYB+Zq+EMBAn52QWu6FbRr10hRb6pBl420upbp4++vg==} + /devtools-protocol@0.0.1262051: + resolution: {integrity: sha512-YJe4CT5SA8on3Spa+UDtNhEqtuV6Epwz3OZ4HQVLhlRccpZ9/PAYk0/cy/oKxFKRrZPBUPyxympQci4yWNWZ9g==} dev: false /diff@3.5.0: @@ -1572,18 +1576,6 @@ packages: engines: {node: '>= 0.4.0'} dev: false - /node-fetch@2.7.0: - resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} - engines: {node: 4.x || >=6.0.0} - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - dependencies: - whatwg-url: 5.0.0 - dev: false - /normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -1794,18 +1786,18 @@ packages: pngjs: 3.4.0 dev: false - /playwright-core@1.41.2: - resolution: {integrity: sha512-VaTvwCA4Y8kxEe+kfm2+uUUw5Lubf38RxF7FpBxLPmGe5sdNkSg5e3ChEigaGrX7qdqT3pt2m/98LiyvU2x6CA==} + /playwright-core@1.42.1: + resolution: {integrity: sha512-mxz6zclokgrke9p1vtdy/COWBH+eOZgYUVVU34C73M+4j4HLlQJHtfcqiqqxpP0o8HhMkflvfbquLX5dg6wlfA==} engines: {node: '>=16'} hasBin: true dev: false - /playwright@1.41.2: - resolution: {integrity: sha512-v0bOa6H2GJChDL8pAeLa/LZC4feoAMbSQm1/jF/ySsWWoaNItvrMP7GEkvEEFyCTUYKMxjQKaTSg5up7nR6/8A==} + /playwright@1.42.1: + resolution: {integrity: sha512-PgwB03s2DZBcNRoW+1w9E+VkLBxweib6KTXM0M3tkiT4jVxKSi6PmVJ591J+0u10LUrgxB7dLRbiJqO5s2QPMg==} engines: {node: '>=16'} hasBin: true dependencies: - playwright-core: 1.41.2 + playwright-core: 1.42.1 optionalDependencies: fsevents: 2.3.2 dev: false @@ -1973,35 +1965,33 @@ packages: once: 1.4.0 dev: false - /puppeteer-core@22.2.0: - resolution: {integrity: sha512-rxLM860FP05CxCPAn6dwY0KnVhbnogsXu4XORb+2hb/va69v7R1VdJWLMGHd7EE5wfpT8oFZ7Q6NN85OhOtV9Q==} + /puppeteer-core@22.6.1: + resolution: {integrity: sha512-rShSd0xtyDSEJYys5nnzQnnwtrafQWg/lWCppyjZIIbYadWP8B1u0XJD/Oe+Xgw8v1hLHX0loNoA0ItRmNLnBg==} engines: {node: '>=18'} dependencies: - '@puppeteer/browsers': 2.1.0 - chromium-bidi: 0.5.9(devtools-protocol@0.0.1249869) - cross-fetch: 4.0.0 + '@puppeteer/browsers': 2.2.0 + chromium-bidi: 0.5.14(devtools-protocol@0.0.1262051) debug: 4.3.4 - devtools-protocol: 0.0.1249869 + devtools-protocol: 0.0.1262051 ws: 8.16.0 transitivePeerDependencies: - bufferutil - - encoding - supports-color - utf-8-validate dev: false - /puppeteer@22.2.0: - resolution: {integrity: sha512-0Ax7zeqqbQL6Zcpo1WAvrqWQAnGsLB4tmQUUwsb5Cfo05XaQ78LWUUjaO4um7qaddKpZfk0vXlGcRVwtedpWfg==} + /puppeteer@22.6.1: + resolution: {integrity: sha512-736QHNKtPD4tPeFbIn73E4l0CWsLzvRFlm0JsLG/VsyM8Eh0FRFNmMp+M3+GSMwdmYxqOVpTgzB6VQDxWxu8xQ==} engines: {node: '>=18'} hasBin: true requiresBuild: true dependencies: - '@puppeteer/browsers': 2.1.0 + '@puppeteer/browsers': 2.2.0 cosmiconfig: 9.0.0 - puppeteer-core: 22.2.0 + devtools-protocol: 0.0.1262051 + puppeteer-core: 22.6.1 transitivePeerDependencies: - bufferutil - - encoding - supports-color - typescript - utf-8-validate @@ -2400,10 +2390,6 @@ packages: engines: {node: '>=0.6'} dev: false - /tr46@0.0.3: - resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - dev: false - /tslib@1.9.3: resolution: {integrity: sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==} dev: false @@ -2503,10 +2489,6 @@ packages: js-git: 0.7.8 dev: false - /webidl-conversions@3.0.1: - resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - dev: false - /whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} @@ -2514,13 +2496,6 @@ packages: iconv-lite: 0.6.3 dev: false - /whatwg-url@5.0.0: - resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - dependencies: - tr46: 0.0.3 - webidl-conversions: 3.0.1 - dev: false - /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -2633,10 +2608,14 @@ packages: fd-slicer: 1.1.0 dev: false - github.com/dgrebb/dg-backstop/bb533a4fb820e3035e964e3d0204ff066778d0ef: - resolution: {tarball: https://codeload.github.com/dgrebb/dg-backstop/tar.gz/bb533a4fb820e3035e964e3d0204ff066778d0ef} + /zod@3.22.4: + resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} + dev: false + + github.com/dgrebb/dg-backstop/b6b53fbdb16d0dd04d844a9e57fcfe8c33d8f498: + resolution: {tarball: https://codeload.github.com/dgrebb/dg-backstop/tar.gz/b6b53fbdb16d0dd04d844a9e57fcfe8c33d8f498} name: dg-backstopjs - version: 1.0.1 + version: 1.0.2 hasBin: true dependencies: os: 0.1.2 @@ -2652,14 +2631,13 @@ packages: opn: 5.5.0 p-map: 4.0.0 path: 0.12.7 - playwright: 1.41.2 + playwright: 1.42.1 portfinder: 1.0.32 - puppeteer: 22.2.0 + puppeteer: 22.6.1 super-simple-web-server: 1.1.4 temp: 0.9.4 transitivePeerDependencies: - bufferutil - - encoding - supports-color - typescript - utf-8-validate