From f8f05c805d924b6d261be46f12cb53f66ef6b760 Mon Sep 17 00:00:00 2001 From: Darshan Date: Sun, 16 Nov 2025 13:46:22 +0530 Subject: [PATCH 1/5] add: test stats to post on PR. --- .github/workflows/test.yml | 66 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1ba51aa..e00788a 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -9,6 +9,9 @@ jobs: tests: name: "Unit and E2E Tests" runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write steps: - name: Checkout code uses: actions/checkout@v4 @@ -42,6 +45,69 @@ jobs: docker compose logs exit 1 + - name: Collect Docker stats + if: github.event_name == 'pull_request' + id: docker-stats + run: | + # Get image size + IMAGE_SIZE=$(docker images appwrite-browser --format "{{.Size}}") + IMAGE_SIZE_BYTES=$(docker inspect appwrite-browser --format='{{.Size}}') + IMAGE_SIZE_MB=$(echo "scale=2; $IMAGE_SIZE_BYTES / 1024 / 1024" | bc) + + # Get container stats + CONTAINER_ID=$(docker compose ps -q browser) + MEMORY_USAGE=$(docker stats $CONTAINER_ID --no-stream --format "{{.MemUsage}}") + + # Quick screenshot benchmark (3 runs, average) + TOTAL=0 + for i in {1..3}; do + START=$(date +%s%3N) + curl -s -X POST http://localhost:3000/v1/screenshots \ + -H "Content-Type: application/json" \ + -d '{"url":"https://appwrite.io"}' \ + -o /dev/null + END=$(date +%s%3N) + DURATION=$((END - START)) + TOTAL=$((TOTAL + DURATION)) + done + SCREENSHOT_AVG=$((TOTAL / 3)) + + # Measure fresh startup time + START_TIME=$(date +%s%3N) + docker compose restart browser + for i in {1..30}; do + if curl -f http://localhost:3000/v1/health > /dev/null 2>&1; then + END_TIME=$(date +%s%3N) + STARTUP_TIME=$((END_TIME - START_TIME)) + break + fi + sleep 0.1 + done + + # Store in GitHub output + echo "image_size=$IMAGE_SIZE" >> $GITHUB_OUTPUT + echo "image_size_mb=$IMAGE_SIZE_MB" >> $GITHUB_OUTPUT + echo "memory_usage=$MEMORY_USAGE" >> $GITHUB_OUTPUT + echo "startup_time=$STARTUP_TIME" >> $GITHUB_OUTPUT + echo "screenshot_time=$SCREENSHOT_AVG" >> $GITHUB_OUTPUT + + - name: Comment PR with stats + if: github.event_name == 'pull_request' + uses: peter-evans/create-or-update-comment@v5 + with: + issue-number: ${{ github.event.pull_request.number }} + body: | + ## Docker Image Stats + + | Metric | Value | + |--------|-------| + | Image Size | ${{ steps.docker-stats.outputs.image_size }} (${{ steps.docker-stats.outputs.image_size_mb }} MB) | + | Memory Usage | ${{ steps.docker-stats.outputs.memory_usage }} | + | Startup Time | ${{ steps.docker-stats.outputs.startup_time }}ms | + | Screenshot Time | ${{ steps.docker-stats.outputs.screenshot_time }}ms | + + Benchmark: Average of 3 screenshot runs on https://appwrite.io + - name: Run e2e tests run: bun test:e2e From 7cee01de8c8c488bb12f7ce90f66b6d3516b9e77 Mon Sep 17 00:00:00 2001 From: Darshan Date: Sun, 16 Nov 2025 13:50:41 +0530 Subject: [PATCH 2/5] fix: ci. --- .github/workflows/test.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e00788a..8599fee 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -47,15 +47,16 @@ jobs: - name: Collect Docker stats if: github.event_name == 'pull_request' + continue-on-error: true id: docker-stats run: | # Get image size - IMAGE_SIZE=$(docker images appwrite-browser --format "{{.Size}}") - IMAGE_SIZE_BYTES=$(docker inspect appwrite-browser --format='{{.Size}}') + IMAGE_SIZE=$(docker images appwrite/browser:local --format "{{.Size}}") + IMAGE_SIZE_BYTES=$(docker inspect appwrite/browser:local --format='{{.Size}}') IMAGE_SIZE_MB=$(echo "scale=2; $IMAGE_SIZE_BYTES / 1024 / 1024" | bc) # Get container stats - CONTAINER_ID=$(docker compose ps -q browser) + CONTAINER_ID=$(docker compose ps -q appwrite-browser) MEMORY_USAGE=$(docker stats $CONTAINER_ID --no-stream --format "{{.MemUsage}}") # Quick screenshot benchmark (3 runs, average) @@ -92,7 +93,8 @@ jobs: echo "screenshot_time=$SCREENSHOT_AVG" >> $GITHUB_OUTPUT - name: Comment PR with stats - if: github.event_name == 'pull_request' + if: github.event_name == 'pull_request' && steps.docker-stats.outcome == 'success' + continue-on-error: true uses: peter-evans/create-or-update-comment@v5 with: issue-number: ${{ github.event.pull_request.number }} From 8575c8dc7854c2c514277e8bb9a16fc4d3afaf98 Mon Sep 17 00:00:00 2001 From: Darshan Date: Sun, 16 Nov 2025 13:54:53 +0530 Subject: [PATCH 3/5] fix: ci. --- .github/workflows/test.yml | 2 +- src/utils/clean-modules.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8599fee..8a8d424 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -75,7 +75,7 @@ jobs: # Measure fresh startup time START_TIME=$(date +%s%3N) - docker compose restart browser + docker compose restart appwrite-browser for i in {1..30}; do if curl -f http://localhost:3000/v1/health > /dev/null 2>&1; then END_TIME=$(date +%s%3N) diff --git a/src/utils/clean-modules.ts b/src/utils/clean-modules.ts index 36e14e2..76b14d5 100644 --- a/src/utils/clean-modules.ts +++ b/src/utils/clean-modules.ts @@ -170,6 +170,7 @@ async function removeUnnecessaryFiles(): Promise { ); await deletePath(`${NODE_MODULES}/@sentry`); await deletePath(`${NODE_MODULES}/@opentelemetry`); + await deletePath(`${NODE_MODULES}/axe-core/axe.js`); await deletePath(`${NODE_MODULES}/lighthouse/cli`); await deletePath(`${NODE_MODULES}/lighthouse/build-tracker.config.js`); await deletePath(`${NODE_MODULES}/lighthouse/commitlint.config.js`); From 4204a3c14cef822d08ef0f14c37922950d2d3c87 Mon Sep 17 00:00:00 2001 From: Darshan Date: Sun, 16 Nov 2025 13:59:35 +0530 Subject: [PATCH 4/5] update: ci. --- .github/workflows/test.yml | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8a8d424..d919739 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -52,12 +52,10 @@ jobs: run: | # Get image size IMAGE_SIZE=$(docker images appwrite/browser:local --format "{{.Size}}") - IMAGE_SIZE_BYTES=$(docker inspect appwrite/browser:local --format='{{.Size}}') - IMAGE_SIZE_MB=$(echo "scale=2; $IMAGE_SIZE_BYTES / 1024 / 1024" | bc) # Get container stats CONTAINER_ID=$(docker compose ps -q appwrite-browser) - MEMORY_USAGE=$(docker stats $CONTAINER_ID --no-stream --format "{{.MemUsage}}") + MEMORY_USAGE=$(docker stats $CONTAINER_ID --no-stream --format "{{.MemUsage}}" | cut -d'/' -f1 | xargs) # Quick screenshot benchmark (3 runs, average) TOTAL=0 @@ -71,7 +69,8 @@ jobs: DURATION=$((END - START)) TOTAL=$((TOTAL + DURATION)) done - SCREENSHOT_AVG=$((TOTAL / 3)) + SCREENSHOT_AVG_MS=$((TOTAL / 3)) + SCREENSHOT_AVG=$(echo "scale=2; $SCREENSHOT_AVG_MS / 1000" | bc) # Measure fresh startup time START_TIME=$(date +%s%3N) @@ -79,15 +78,15 @@ jobs: for i in {1..30}; do if curl -f http://localhost:3000/v1/health > /dev/null 2>&1; then END_TIME=$(date +%s%3N) - STARTUP_TIME=$((END_TIME - START_TIME)) + STARTUP_TIME_MS=$((END_TIME - START_TIME)) break fi sleep 0.1 done + STARTUP_TIME=$(echo "scale=2; $STARTUP_TIME_MS / 1000" | bc) # Store in GitHub output echo "image_size=$IMAGE_SIZE" >> $GITHUB_OUTPUT - echo "image_size_mb=$IMAGE_SIZE_MB" >> $GITHUB_OUTPUT echo "memory_usage=$MEMORY_USAGE" >> $GITHUB_OUTPUT echo "startup_time=$STARTUP_TIME" >> $GITHUB_OUTPUT echo "screenshot_time=$SCREENSHOT_AVG" >> $GITHUB_OUTPUT @@ -103,12 +102,12 @@ jobs: | Metric | Value | |--------|-------| - | Image Size | ${{ steps.docker-stats.outputs.image_size }} (${{ steps.docker-stats.outputs.image_size_mb }} MB) | + | Image Size | ${{ steps.docker-stats.outputs.image_size }} | | Memory Usage | ${{ steps.docker-stats.outputs.memory_usage }} | - | Startup Time | ${{ steps.docker-stats.outputs.startup_time }}ms | - | Screenshot Time | ${{ steps.docker-stats.outputs.screenshot_time }}ms | + | Startup Time | ${{ steps.docker-stats.outputs.startup_time }}s | + | Screenshot Time | ${{ steps.docker-stats.outputs.screenshot_time }}s | - Benchmark: Average of 3 screenshot runs on https://appwrite.io + Screenshot benchmark: Average of 3 runs on https://appwrite.io - name: Run e2e tests run: bun test:e2e From 231a696ac30677d7ef7fe3391234ed38a57f6f6b Mon Sep 17 00:00:00 2001 From: Darshan Date: Sun, 16 Nov 2025 14:13:46 +0530 Subject: [PATCH 5/5] update: ci for comment spam. --- .github/workflows/test.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d919739..7ba0aab 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -94,10 +94,11 @@ jobs: - name: Comment PR with stats if: github.event_name == 'pull_request' && steps.docker-stats.outcome == 'success' continue-on-error: true - uses: peter-evans/create-or-update-comment@v5 + uses: marocchino/sticky-pull-request-comment@v2 with: - issue-number: ${{ github.event.pull_request.number }} - body: | + header: docker-image-stats + skip_unchanged: true + message: | ## Docker Image Stats | Metric | Value |