From 201de8bbf369867f9b7da653cc13d0a9f0320c73 Mon Sep 17 00:00:00 2001 From: clever-agent Date: Tue, 14 Apr 2026 01:00:46 -0400 Subject: [PATCH] Build: Added back the benchmark tests but made them so they only run after pull requests into master --- .forgejo/workflows/master.yml | 126 ++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 .forgejo/workflows/master.yml diff --git a/.forgejo/workflows/master.yml b/.forgejo/workflows/master.yml new file mode 100644 index 000000000..cdd699abc --- /dev/null +++ b/.forgejo/workflows/master.yml @@ -0,0 +1,126 @@ +name: CI + +on: + push: + branches: [master, develop] + +env: + UV_VERSION: "0.8.0" + PYTHON_VERSION: "3.13" + NOX_DEFAULT_VENV_BACKEND: "uv" + +jobs: + benchmark-regression: + if: forgejo.event_name == 'pull_request' + runs-on: docker-benchmark + container: + image: python:3.13-slim + needs: [lint, typecheck, security, quality] + steps: + - name: Install system dependencies (nodejs for checkout, git for merge tests) + run: | + apt-get update && apt-get install -y -qq nodejs git && rm -rf /var/lib/apt/lists/* + + - name: Checkout full history + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Compute base commit + id: hash + run: | + git fetch origin "${{ forgejo.base_ref }}" --depth=200 + BASE_SHA=$(git merge-base HEAD "origin/${{ forgejo.base_ref }}") + echo "ASV_BASE_SHA=${BASE_SHA}" >> $FORGEJO_OUTPUT + + - name: Install dependencies + run: | + python -m pip install -U pip + python -m pip install asv virtualenv uv==${{ env.UV_VERSION }} nox + + - name: Restore prior ASV benchmarks + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }} + ASV_S3_BUCKET: ${{ secrets.ASV_S3_BUCKET }} + run: | + python -m pip install awscli + mkdir -p build/asv/results + aws s3 sync "s3://${ASV_S3_BUCKET}/asv/results" build/asv/results --delete || true + + - name: Run asv continuous via nox + env: + ASV_BASE_SHA: ${{ steps.hash.outputs.ASV_BASE_SHA }} + run: | + nox -s benchmark_regression + + - name: Archive the results + run: | + tar cf /tmp/asv-results.tar build/asv/results build/asv/html + + - name: Upload benchmark artifacts + if: always() + uses: actions/upload-artifact@v3 + with: + name: asv-results-pr + path: /tmp/asv-results.tar + rentention-days: 30 + + benchmark-publish: + if: forgejo.event_name == 'push' && ( forgejo.ref == 'refs/heads/master' || forgejo.ref == 'refs/heads/develop' ) + runs-on: docker-benchmark + container: python:3.13-slim + steps: + - name: Install system dependencies (nodejs for checkout, git for merge tests) + run: | + apt-get update && apt-get install -y -qq nodejs git && rm -rf /var/lib/apt/lists/* + + - name: Checkout full history + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Install dependencies + run: | + python -m pip install -U pip + python -m pip install asv virtualenv uv==${{ env.UV_VERSION }} nox + + - name: Restore prior ASV benchmarks + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }} + ASV_S3_BUCKET: ${{ secrets.ASV_S3_BUCKET }} + run: | + python -m pip install awscli + mkdir -p build/asv/results + aws s3 sync "s3://${ASV_S3_BUCKET}/asv/results" build/asv/results --delete || true + + - name: Run asv via nox + run: | + nox -s benchmark + + - name: Upload updated benchmarks and website to S3 + env: + AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} + AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + AWS_DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }} + ASV_S3_BUCKET: ${{ secrets.ASV_S3_BUCKET }} + run: | + python -m pip install awscli + aws s3 sync build/asv/results "s3://${ASV_S3_BUCKET}/asv/results" --delete + aws s3 sync build/asv/html "s3://${ASV_S3_BUCKET}/asv/html" --delete + + - name: Archive the results + run: | + tar cf /tmp/asv-results.tar build/asv/results build/asv/html + + - name: Upload benchmark artifacts + if: always() + uses: actions/upload-artifact@v3 + with: + name: asv-results-pr + path: /tmp/asv-results.tar + rentention-days: 30 + -- 2.52.0