Compare commits
	
		
			9 Commits
		
	
	
		
			pierremtb/
			...
			pierremtb/
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 7c935741e4 | |||
| 87e299e0bb | |||
| 465e71c12f | |||
| 824669a1c2 | |||
| ba8f8a1722 | |||
| f4a4e6c5be | |||
| 0d148e80aa | |||
| 3300993ac8 | |||
| 033eaed32e | 
| @ -1,4 +1,4 @@ | ||||
| name: E2E Tests | ||||
| name: E2E Flow Tests | ||||
| on: | ||||
|   push: | ||||
|     branches: [ main ] | ||||
| @ -33,7 +33,7 @@ jobs: | ||||
|             rust: | ||||
|               - 'src/wasm-lib/**' | ||||
| 
 | ||||
|   electron: | ||||
|   flow-tests: | ||||
|     timeout-minutes: 60 | ||||
|     name: playwright:electron:${{ matrix.os }} ${{ matrix.shardIndex }} ${{ matrix.shardTotal }} | ||||
|     strategy: | ||||
| @ -46,32 +46,30 @@ jobs: | ||||
|     runs-on: ${{ matrix.os }} | ||||
|     needs: check-rust-changes | ||||
|     steps: | ||||
|     - uses: actions/create-github-app-token@v1 | ||||
|       id: app-token | ||||
|       with: | ||||
|         app-id: ${{ secrets.MODELING_APP_GH_APP_ID }} | ||||
|         private-key: ${{ secrets.MODELING_APP_GH_APP_PRIVATE_KEY }} | ||||
|         owner: ${{ github.repository_owner }} | ||||
|     - uses: actions/checkout@v4 | ||||
|       with: | ||||
|         token: ${{ steps.app-token.outputs.token }} | ||||
| 
 | ||||
|     - uses: actions/setup-node@v4 | ||||
|       with: | ||||
|         node-version-file: '.nvmrc' | ||||
|         cache: 'yarn' | ||||
| 
 | ||||
|     - uses: KittyCAD/action-install-cli@main | ||||
| 
 | ||||
|     - name: Install dependencies | ||||
|       shell: bash | ||||
|       run: yarn | ||||
| 
 | ||||
|     - name: Cache Playwright Browsers | ||||
|       uses: actions/cache@v4 | ||||
|       with: | ||||
|         path: | | ||||
|           ~/.cache/ms-playwright/ | ||||
|         key: ${{ runner.os }}-playwright-${{ hashFiles('yarn.lock') }} | ||||
| 
 | ||||
|     - name: Install Playwright Browsers | ||||
|       shell: bash | ||||
|       run: yarn playwright install --with-deps | ||||
| 
 | ||||
|     - name: Download Wasm Cache | ||||
|       id: download-wasm | ||||
|       if: needs.check-rust-changes.outputs.rust-changed == 'false' | ||||
| @ -83,29 +81,35 @@ jobs: | ||||
|         workflow: build-and-store-wasm.yml | ||||
|         branch: main | ||||
|         path: src/wasm-lib/pkg | ||||
| 
 | ||||
|     - name: copy wasm blob | ||||
|       if: needs.check-rust-changes.outputs.rust-changed == 'false' | ||||
|       shell: bash | ||||
|       run: cp src/wasm-lib/pkg/wasm_lib_bg.wasm public | ||||
|       continue-on-error: true | ||||
| 
 | ||||
|     - name: Setup Rust | ||||
|       uses: dtolnay/rust-toolchain@stable | ||||
| 
 | ||||
|     - name: Cache Wasm (because rust diff) | ||||
|       if: needs.check-rust-changes.outputs.rust-changed == 'true' | ||||
|       uses: Swatinem/rust-cache@v2 | ||||
|       with: | ||||
|         workspaces: './src/wasm-lib' | ||||
| 
 | ||||
|     - name: OR Cache Wasm (because wasm cache failed) | ||||
|       if: steps.download-wasm.outcome == 'failure' | ||||
|       uses: Swatinem/rust-cache@v2 | ||||
|       with: | ||||
|         workspaces: './src/wasm-lib' | ||||
| 
 | ||||
|     - name: install good sed | ||||
|       if:  ${{ startsWith(matrix.os, 'macos') }} | ||||
|       shell: bash | ||||
|       run: | | ||||
|         brew install gnu-sed | ||||
|         echo "/opt/homebrew/opt/gnu-sed/libexec/gnubin" >> $GITHUB_PATH | ||||
| 
 | ||||
|     - name: Install vector | ||||
|       shell: bash | ||||
|       # TODO: figure out what to do with this, it's failing | ||||
| @ -123,81 +127,33 @@ jobs: | ||||
|         sed -i "s#GH_ACTIONS_AXIOM_TOKEN#${{secrets.GH_ACTIONS_AXIOM_TOKEN}}#g" /tmp/vector.toml | ||||
|         cat /tmp/vector.toml | ||||
|         ${HOME}/.vector/bin/vector --config /tmp/vector.toml & | ||||
| 
 | ||||
|     - name: Build Wasm (because rust diff) | ||||
|       if: needs.check-rust-changes.outputs.rust-changed == 'true' | ||||
|       shell: bash | ||||
|       run: yarn build:wasm | ||||
| 
 | ||||
|     - name: OR Build Wasm (because wasm cache failed) | ||||
|       if: steps.download-wasm.outcome == 'failure' | ||||
|       shell: bash | ||||
|       run: yarn build:wasm | ||||
| 
 | ||||
|     - name: build web | ||||
|       shell: bash | ||||
|       run: yarn tronb:vite:dev | ||||
|     - name: Run ubuntu/chrome snapshots | ||||
|       if: ${{ matrix.os == 'namespace-profile-ubuntu-8-cores' && matrix.shardIndex == 1 }} | ||||
|       shell: bash | ||||
|       # TODO: break this in its own job, for now it's not slowing down the overall execution as ubuntu is the quickest, | ||||
|       # but we could do better. This forces a large 1/1 shard of all 20 snapshot tests that runs in about 3 minutes. | ||||
|       run: | | ||||
|         PLATFORM=web yarn playwright test --config=playwright.config.ts --retries="3" --update-snapshots --grep=@snapshot  --shard=1/1 | ||||
|       env: | ||||
|         CI: true | ||||
|         NODE_ENV: development | ||||
|         VITE_KC_DEV_TOKEN: ${{ secrets.KITTYCAD_API_TOKEN_DEV }} | ||||
|         VITE_KC_SKIP_AUTH: true | ||||
|         token: ${{ secrets.KITTYCAD_API_TOKEN_DEV }} | ||||
|         snapshottoken: ${{ secrets.KITTYCAD_API_TOKEN }} | ||||
|     - uses: actions/upload-artifact@v4 | ||||
|       if: ${{ !cancelled() && (success() || failure()) }} | ||||
|       with: | ||||
|         name: playwright-report-${{ matrix.os }}-snapshot-${{ matrix.shardIndex }}-${{ github.sha }} | ||||
|         path: playwright-report/ | ||||
|         include-hidden-files: true | ||||
|         retention-days: 30 | ||||
|         overwrite: true | ||||
| 
 | ||||
|     - name: Clean up test-results | ||||
|       if: ${{ !cancelled() && (success() || failure()) }} | ||||
|       continue-on-error: true | ||||
|       run: rm -r test-results | ||||
|     - name: check for changes | ||||
|       if: ${{ matrix.os == 'namespace-profile-ubuntu-8-cores' && matrix.shardIndex == 1 && github.ref != 'refs/heads/main' }} | ||||
|       shell: bash | ||||
|       id: git-check | ||||
|       run: | | ||||
|           git add e2e/playwright/snapshot-tests.spec.ts-snapshots | ||||
|           if git status | grep -q "Changes to be committed" | ||||
|           then echo "modified=true" >> $GITHUB_OUTPUT | ||||
|           else echo "modified=false" >> $GITHUB_OUTPUT | ||||
|           fi | ||||
|     - name: Commit changes, if any | ||||
|       if: steps.git-check.outputs.modified == 'true' | ||||
|       shell: bash | ||||
|       run: | | ||||
|         git add e2e/playwright/snapshot-tests.spec.ts-snapshots | ||||
|         git config --local user.email "github-actions[bot]@users.noreply.github.com" | ||||
|         git config --local user.name "github-actions[bot]" | ||||
|         git remote set-url origin https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}.git | ||||
|         git fetch origin | ||||
|         echo ${{ github.head_ref }} | ||||
|         git checkout ${{ github.head_ref }} | ||||
|         git commit -m "A snapshot a day keeps the bugs away! 📷🐛 (OS: ${{matrix.os}})" || true | ||||
|         git push | ||||
|         git push origin ${{ github.head_ref }} | ||||
|     # only upload artifacts if there's actually changes | ||||
|     - uses: actions/upload-artifact@v4 | ||||
|       if: steps.git-check.outputs.modified == 'true' | ||||
|       with: | ||||
|         name: playwright-report-${{ matrix.os }}-${{ matrix.shardIndex }}-${{ github.sha }} | ||||
|         path: playwright-report/ | ||||
|         include-hidden-files: true | ||||
|         retention-days: 30 | ||||
| 
 | ||||
|     - uses: actions/download-artifact@v4 | ||||
|       if: ${{ !cancelled() && (success() || failure()) }} | ||||
|       continue-on-error: true | ||||
|       with: | ||||
|         name: test-results-${{ matrix.os }}-${{ matrix.shardIndex }}-${{ github.sha }} | ||||
|         path: test-results/ | ||||
| 
 | ||||
|     - name: Run playwright/electron flow (with retries) | ||||
|       id: retry | ||||
|       if: ${{ !cancelled() && (success() || failure()) }} | ||||
| @ -211,6 +167,7 @@ jobs: | ||||
|         VITE_KC_DEV_TOKEN: ${{ secrets.KITTYCAD_API_TOKEN_DEV }} | ||||
|         VITE_KC_SKIP_AUTH: true | ||||
|         token: ${{ secrets.KITTYCAD_API_TOKEN_DEV }} | ||||
| 
 | ||||
|     - uses: actions/upload-artifact@v4 | ||||
|       if: always() | ||||
|       with: | ||||
| @ -219,6 +176,7 @@ jobs: | ||||
|         include-hidden-files: true | ||||
|         retention-days: 30 | ||||
|         overwrite: true | ||||
| 
 | ||||
|     - uses: actions/upload-artifact@v4 | ||||
|       if: always() | ||||
|       with: | ||||
| @ -227,4 +185,3 @@ jobs: | ||||
|         include-hidden-files: true | ||||
|         retention-days: 30 | ||||
|         overwrite: true | ||||
| 
 | ||||
							
								
								
									
										145
									
								
								.github/workflows/e2e-snapshot-tests.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,145 @@ | ||||
| name: E2E Snapshot Tests | ||||
| on: | ||||
|   push: | ||||
|     branches: [ main ] | ||||
|   pull_request: | ||||
|     branches: [ main ] | ||||
|  | ||||
| concurrency: | ||||
|   group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | ||||
|   cancel-in-progress: true | ||||
|  | ||||
| permissions: | ||||
|   contents: write | ||||
|   pull-requests: write | ||||
|   actions: read | ||||
|  | ||||
|  | ||||
| jobs: | ||||
|  | ||||
|   check-rust-changes: | ||||
|     runs-on: ubuntu-latest | ||||
|     outputs: | ||||
|       rust-changed: ${{ steps.filter.outputs.rust }} | ||||
|  | ||||
|     steps: | ||||
|       - uses: actions/checkout@v4 | ||||
|  | ||||
|       - id: filter | ||||
|         name: Check for Rust changes | ||||
|         uses: dorny/paths-filter@v3 | ||||
|         with: | ||||
|           filters: | | ||||
|             rust: | ||||
|               - 'src/wasm-lib/**' | ||||
|  | ||||
|   snapshot-tests: | ||||
|     runs-on: ubuntu-22.04 | ||||
|     needs: check-rust-changes | ||||
|     steps: | ||||
|     - uses: actions/checkout@v4 | ||||
|  | ||||
|     - uses: actions/setup-node@v4 | ||||
|       with: | ||||
|         node-version-file: '.nvmrc' | ||||
|         cache: 'yarn' | ||||
|  | ||||
|     - name: Install dependencies | ||||
|       run: yarn | ||||
|  | ||||
|     - name: Cache Playwright Browsers | ||||
|       uses: actions/cache@v4 | ||||
|       with: | ||||
|         path: | | ||||
|           ~/.cache/ms-playwright/ | ||||
|         key: ${{ runner.os }}-playwright-${{ hashFiles('yarn.lock') }} | ||||
|  | ||||
|     - name: Install Playwright Browsers | ||||
|       run: yarn playwright install --with-deps | ||||
|  | ||||
|     - name: Download Wasm Cache | ||||
|       id: download-wasm | ||||
|       if: needs.check-rust-changes.outputs.rust-changed == 'false' | ||||
|       uses: dawidd6/action-download-artifact@v7 | ||||
|       continue-on-error: true | ||||
|       with: | ||||
|         github_token: ${{secrets.GITHUB_TOKEN}} | ||||
|         name: wasm-bundle | ||||
|         workflow: build-and-store-wasm.yml | ||||
|         branch: main | ||||
|         path: src/wasm-lib/pkg | ||||
|  | ||||
|     - name: copy wasm blob | ||||
|       if: needs.check-rust-changes.outputs.rust-changed == 'false' | ||||
|       run: cp src/wasm-lib/pkg/wasm_lib_bg.wasm public | ||||
|       continue-on-error: true | ||||
|  | ||||
|     - name: Setup Rust | ||||
|       if: needs.check-rust-changes.outputs.rust-changed == 'true' | ||||
|       uses: dtolnay/rust-toolchain@stable | ||||
|  | ||||
|     - name: Cache Wasm (because rust diff) | ||||
|       if: needs.check-rust-changes.outputs.rust-changed == 'true' | ||||
|       uses: Swatinem/rust-cache@v2 | ||||
|       with: | ||||
|         workspaces: './src/wasm-lib' | ||||
|  | ||||
|     - name: OR Cache Wasm (because wasm cache failed) | ||||
|       if: steps.download-wasm.outcome == 'failure' | ||||
|       uses: Swatinem/rust-cache@v2 | ||||
|       with: | ||||
|         workspaces: './src/wasm-lib' | ||||
|  | ||||
|     - name: Build Wasm (because rust diff) | ||||
|       if: needs.check-rust-changes.outputs.rust-changed == 'true' | ||||
|       run: yarn build:wasm | ||||
|  | ||||
|     - name: OR Build Wasm (because wasm cache failed) | ||||
|       if: steps.download-wasm.outcome == 'failure' | ||||
|       run: yarn build:wasm | ||||
|  | ||||
|     - name: build web | ||||
|       run: yarn tronb:vite:dev | ||||
|  | ||||
|     - name: Run chrome snapshots | ||||
|       run: | | ||||
|         PLATFORM=web yarn playwright test --config=playwright.config.ts --retries="3" --update-snapshots --grep=@snapshot | ||||
|       env: | ||||
|         CI: true | ||||
|         NODE_ENV: development | ||||
|         VITE_KC_DEV_TOKEN: ${{ secrets.KITTYCAD_API_TOKEN_DEV }} | ||||
|         VITE_KC_SKIP_AUTH: true | ||||
|         token: ${{ secrets.KITTYCAD_API_TOKEN_DEV }} | ||||
|         snapshottoken: ${{ secrets.KITTYCAD_API_TOKEN }} | ||||
|  | ||||
|     - name: check for changes | ||||
|       id: git-check | ||||
|       run: | | ||||
|         { | ||||
|           echo 'changes<<EOF' | ||||
|           git diff --name-only e2e/playwright/snapshot-tests.spec.ts-snapshots | ||||
|           echo EOF | ||||
|         } >> "$GITHUB_OUTPUT" | ||||
|  | ||||
|     # only upload artifacts if there's actually changes | ||||
|     - name: Upload changes, if any | ||||
|       if: steps.git-check.outputs.changes != '' | ||||
|       uses: actions/upload-artifact@v4 | ||||
|       with: | ||||
|         name: playwright-snapshots-${{ runner.os }}-${{ github.sha }} | ||||
|         path: ${{ steps.git-check.outputs.changes }} | ||||
|  | ||||
|     - name: Upload report, if any | ||||
|       uses: actions/upload-artifact@v4 | ||||
|       if: steps.git-check.outputs.changes != '' | ||||
|       with: | ||||
|         name: playwright-report-${{ runner.os }}-${{ github.sha }} | ||||
|         path: playwright-report/ | ||||
|         include-hidden-files: true | ||||
|         retention-days: 30 | ||||
|  | ||||
|     - name: Fail the run if we have snapshot updates | ||||
|       if: steps.git-check.outputs.changes != '' | ||||
|       run: exit 1 | ||||
|  | ||||
|     # TODO: check if we could comment on the PR as well | ||||
| Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 49 KiB | 
| Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 55 KiB | 
| Before Width: | Height: | Size: 48 KiB After Width: | Height: | Size: 49 KiB | 
| Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 53 KiB | 
| Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 54 KiB | 
| Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 49 KiB | 
