name: "Benchmarks" concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true on: [ pull_request ] jobs: benchmarking: name: Benchmark runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 - name: Install Oha run: | echo "deb [signed-by=/usr/share/keyrings/azlux-archive-keyring.gpg] http://packages.azlux.fr/debian/ stable main" | sudo tee /etc/apt/sources.list.d/azlux.list sudo wget -O /usr/share/keyrings/azlux-archive-keyring.gpg https://azlux.fr/repo.gpg sudo apt update sudo apt install oha - name: Prepare environment run: | sed -i 's/traefik/localhost/g' .env docker compose up -d sleep 10 - name: Benchmark PR run: oha -z 10s http://localhost/v1/health/version -j > benchmark.json - name: Cleaning run: docker compose down -v - name: Installing latest version run: | rm docker-compose.yml rm .env curl https://appwrite.io/install/compose -o docker-compose.yml curl https://appwrite.io/install/env -o .env sed -i 's/_APP_OPTIONS_ABUSE=enabled/_APP_OPTIONS_ABUSE=disabled/g' .env docker compose up -d sleep 10 - name: Benchmark Latest run: oha -z 10s http://localhost/v1/health/version -j > benchmark-latest.json - name: Prepare comment run: | echo '## :sparkles: Benchmark results' > benchmark.txt echo ' ' >> benchmark.txt echo "- Requests per second: $(jq -r '.summary.requestsPerSec|tonumber?|floor' benchmark.json)" >> benchmark.txt echo "- Total 200 requests: $(jq -r '.statusCodeDistribution."200"' benchmark.json)" >> benchmark.txt echo "- 99 latency: $(jq -r '.latencyPercentiles.p99' benchmark.json )" >> benchmark.txt echo " " >> benchmark.txt echo " " >> benchmark.txt echo "## :zap: Benchmark results" >> benchmark.txt echo " " >> benchmark.txt echo "| Metric | PR | Latest version | " >> benchmark.txt echo "| --- | --- | --- | " >> benchmark.txt echo "| RPS | $(jq -r '.summary.requestsPerSec|tonumber?|floor' benchmark.json) | $(jq -r '.summary.requestsPerSec|tonumber|floor' benchmark-latest.json) | " >> benchmark.txt echo "| 200 | $(jq -r '.statusCodeDistribution."200"' benchmark.json) | $(jq -r '.statusCodeDistribution."200"' benchmark-latest.json) | " >> benchmark.txt echo "| P99 | $(jq -r '.latencyPercentiles.p99' benchmark.json ) | $(jq -r '.latencyPercentiles.p99' benchmark-latest.json ) | " >> benchmark.txt - name: Save results uses: actions/upload-artifact@v4 if: ${{ !cancelled() }} with: name: benchmark.json path: benchmark.json retention-days: 7 - name: Comment on PR uses: thollander/actions-comment-pull-request@v2 with: filePath: benchmark.txt