Skip to content

Commit 4d4f96e

Browse files
committed
Add JIT to daily runs and reschedule the upload
1 parent 71dd85d commit 4d4f96e

File tree

5 files changed

+548
-28
lines changed

5 files changed

+548
-28
lines changed

.claude/settings.local.json

Lines changed: 0 additions & 22 deletions
This file was deleted.
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
name: Daily Memory Tracker Benchmark - Debug Build
2+
3+
on:
4+
schedule:
5+
# Run daily at 23:00 UTC (EOD) to pick up all commits from the day
6+
- cron: '0 23 * * *'
7+
workflow_dispatch:
8+
inputs:
9+
target_date:
10+
description: 'Date to get commits from (YYYY-MM-DD, defaults to today)'
11+
required: false
12+
type: string
13+
binary_id:
14+
description: 'Binary ID to use for benchmarking'
15+
required: false
16+
default: 'debug'
17+
environment_id:
18+
description: 'Environment ID'
19+
required: false
20+
default: 'gh_actions'
21+
server_url:
22+
description: 'Memory tracker server URL'
23+
required: false
24+
default: 'https://memory.python.org'
25+
cpython_repo:
26+
description: 'CPython repository URL'
27+
required: false
28+
default: 'https://github.com/python/cpython.git'
29+
30+
jobs:
31+
get-daily-commits:
32+
runs-on: ubuntu-latest
33+
outputs:
34+
commits: ${{ steps.get-commits.outputs.commits }}
35+
commit-count: ${{ steps.get-commits.outputs.commit-count }}
36+
37+
steps:
38+
- name: Clone CPython repository
39+
run: |
40+
git clone ${{ github.event.inputs.cpython_repo || 'https://github.com/python/cpython.git' }} cpython
41+
cd cpython
42+
git fetch --all
43+
44+
- name: Get commits from target date
45+
id: get-commits
46+
run: |
47+
cd cpython
48+
49+
# Determine target date
50+
if [ -n "${{ github.event.inputs.target_date }}" ]; then
51+
TARGET_DATE="${{ github.event.inputs.target_date }}"
52+
else
53+
TARGET_DATE=$(date -u +%Y-%m-%d)
54+
fi
55+
56+
echo "Getting commits from date: $TARGET_DATE"
57+
58+
# Get commits from the target date (00:00 to 23:59 UTC)
59+
COMMITS=$(git log --since="$TARGET_DATE 00:00:00 UTC" --until="$TARGET_DATE 23:59:59 UTC" --pretty=format:"%H" --reverse)
60+
61+
if [ -z "$COMMITS" ]; then
62+
echo "No commits found for date $TARGET_DATE"
63+
echo "commits=" >> $GITHUB_OUTPUT
64+
echo "commit-count=0" >> $GITHUB_OUTPUT
65+
else
66+
# Convert to JSON array format for matrix strategy
67+
COMMITS_JSON=$(echo "$COMMITS" | jq -R -s -c 'split("\n") | map(select(length > 0))')
68+
COMMIT_COUNT=$(echo "$COMMITS" | wc -l)
69+
70+
echo "Found $COMMIT_COUNT commits for date $TARGET_DATE"
71+
echo "commits=$COMMITS_JSON" >> $GITHUB_OUTPUT
72+
echo "commit-count=$COMMIT_COUNT" >> $GITHUB_OUTPUT
73+
74+
echo "Commits to benchmark:"
75+
echo "$COMMITS"
76+
fi
77+
78+
benchmark-commits:
79+
needs: get-daily-commits
80+
if: needs.get-daily-commits.outputs.commit-count > 0
81+
runs-on: ubuntu-latest
82+
strategy:
83+
matrix:
84+
commit: ${{ fromJson(needs.get-daily-commits.outputs.commits) }}
85+
fail-fast: false
86+
max-parallel: 5
87+
88+
steps:
89+
- name: Checkout memory tracker
90+
uses: actions/checkout@v4
91+
92+
- name: Set up Python
93+
uses: actions/setup-python@v4
94+
with:
95+
python-version: '3.11'
96+
97+
- name: Clone CPython repository
98+
run: |
99+
git clone ${{ github.event.inputs.cpython_repo || 'https://github.com/python/cpython.git' }} cpython
100+
cd cpython
101+
git fetch --depth=200
102+
103+
- name: Install memory tracker worker
104+
run: |
105+
cd worker
106+
pip install -e .
107+
108+
- name: Install build dependencies
109+
run: |
110+
# Install CPython dependencies using their script
111+
cd cpython
112+
sudo .github/workflows/posix-deps-apt.sh
113+
114+
# Install Memray dependencies
115+
sudo apt-get install -y \
116+
python3-dev \
117+
libdebuginfod-dev \
118+
libunwind-dev \
119+
liblz4-dev
120+
121+
- name: Run memory benchmark for commit
122+
env:
123+
MEMORY_TRACKER_TOKEN: ${{ secrets.MEMORY_TRACKER_TOKEN }}
124+
run: |
125+
COMMIT="${{ matrix.commit }}"
126+
127+
# Build command for single commit
128+
CMD="memory-tracker benchmark '$COMMIT'"
129+
CMD="$CMD --repo-path ./cpython"
130+
CMD="$CMD --binary-id '${{ github.event.inputs.binary_id || 'debug' }}'"
131+
CMD="$CMD --environment-id '${{ github.event.inputs.environment_id || 'gh_actions' }}'"
132+
CMD="$CMD --api-base '${{ github.event.inputs.server_url || 'https://memory.python.org' }}'"
133+
CMD="$CMD --output-dir ./benchmark_results"
134+
CMD="$CMD --force"
135+
CMD="$CMD -vv"
136+
137+
echo "Running benchmark for commit: $COMMIT"
138+
echo "Command: $CMD"
139+
eval $CMD
140+
141+
- name: Upload benchmark results (if failed)
142+
if: failure()
143+
uses: actions/upload-artifact@v4
144+
with:
145+
name: benchmark-logs-${{ matrix.commit }}
146+
path: |
147+
*.log
148+
./benchmark_results/
149+
retention-days: 7
150+
151+
- name: Upload benchmark results (on success)
152+
if: success()
153+
uses: actions/upload-artifact@v4
154+
with:
155+
name: benchmark-results-${{ matrix.commit }}
156+
path: ./benchmark_results/
157+
retention-days: 30
158+
159+
summary:
160+
needs: [get-daily-commits, benchmark-commits]
161+
if: always()
162+
runs-on: ubuntu-latest
163+
164+
steps:
165+
- name: Print summary
166+
run: |
167+
echo "Daily benchmark run completed"
168+
echo "Total commits processed: ${{ needs.get-daily-commits.outputs.commit-count }}"
169+
170+
if [ "${{ needs.get-daily-commits.outputs.commit-count }}" = "0" ]; then
171+
echo "No commits found for the target date"
172+
else
173+
echo "Benchmark jobs completed with status: ${{ needs.benchmark-commits.result }}"
174+
fi
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
name: Daily Memory Tracker Benchmark - Free-threaded Build
2+
3+
on:
4+
schedule:
5+
# Run daily at 23:00 UTC (EOD) to pick up all commits from the day
6+
- cron: '0 23 * * *'
7+
workflow_dispatch:
8+
inputs:
9+
target_date:
10+
description: 'Date to get commits from (YYYY-MM-DD, defaults to today)'
11+
required: false
12+
type: string
13+
binary_id:
14+
description: 'Binary ID to use for benchmarking'
15+
required: false
16+
default: 'freethreaded'
17+
environment_id:
18+
description: 'Environment ID'
19+
required: false
20+
default: 'gh_actions'
21+
server_url:
22+
description: 'Memory tracker server URL'
23+
required: false
24+
default: 'https://memory.python.org'
25+
cpython_repo:
26+
description: 'CPython repository URL'
27+
required: false
28+
default: 'https://github.com/python/cpython.git'
29+
30+
jobs:
31+
get-daily-commits:
32+
runs-on: ubuntu-latest
33+
outputs:
34+
commits: ${{ steps.get-commits.outputs.commits }}
35+
commit-count: ${{ steps.get-commits.outputs.commit-count }}
36+
37+
steps:
38+
- name: Clone CPython repository
39+
run: |
40+
git clone ${{ github.event.inputs.cpython_repo || 'https://github.com/python/cpython.git' }} cpython
41+
cd cpython
42+
git fetch --all
43+
44+
- name: Get commits from target date
45+
id: get-commits
46+
run: |
47+
cd cpython
48+
49+
# Determine target date
50+
if [ -n "${{ github.event.inputs.target_date }}" ]; then
51+
TARGET_DATE="${{ github.event.inputs.target_date }}"
52+
else
53+
TARGET_DATE=$(date -u +%Y-%m-%d)
54+
fi
55+
56+
echo "Getting commits from date: $TARGET_DATE"
57+
58+
# Get commits from the target date (00:00 to 23:59 UTC)
59+
COMMITS=$(git log --since="$TARGET_DATE 00:00:00 UTC" --until="$TARGET_DATE 23:59:59 UTC" --pretty=format:"%H" --reverse)
60+
61+
if [ -z "$COMMITS" ]; then
62+
echo "No commits found for date $TARGET_DATE"
63+
echo "commits=" >> $GITHUB_OUTPUT
64+
echo "commit-count=0" >> $GITHUB_OUTPUT
65+
else
66+
# Convert to JSON array format for matrix strategy
67+
COMMITS_JSON=$(echo "$COMMITS" | jq -R -s -c 'split("\n") | map(select(length > 0))')
68+
COMMIT_COUNT=$(echo "$COMMITS" | wc -l)
69+
70+
echo "Found $COMMIT_COUNT commits for date $TARGET_DATE"
71+
echo "commits=$COMMITS_JSON" >> $GITHUB_OUTPUT
72+
echo "commit-count=$COMMIT_COUNT" >> $GITHUB_OUTPUT
73+
74+
echo "Commits to benchmark:"
75+
echo "$COMMITS"
76+
fi
77+
78+
benchmark-commits:
79+
needs: get-daily-commits
80+
if: needs.get-daily-commits.outputs.commit-count > 0
81+
runs-on: ubuntu-latest
82+
strategy:
83+
matrix:
84+
commit: ${{ fromJson(needs.get-daily-commits.outputs.commits) }}
85+
fail-fast: false
86+
max-parallel: 5
87+
88+
steps:
89+
- name: Checkout memory tracker
90+
uses: actions/checkout@v4
91+
92+
- name: Set up Python
93+
uses: actions/setup-python@v4
94+
with:
95+
python-version: '3.11'
96+
97+
- name: Clone CPython repository
98+
run: |
99+
git clone ${{ github.event.inputs.cpython_repo || 'https://github.com/python/cpython.git' }} cpython
100+
cd cpython
101+
git fetch --depth=200
102+
103+
- name: Install memory tracker worker
104+
run: |
105+
cd worker
106+
pip install -e .
107+
108+
- name: Install build dependencies
109+
run: |
110+
# Install CPython dependencies using their script
111+
cd cpython
112+
sudo .github/workflows/posix-deps-apt.sh
113+
114+
# Install Memray dependencies
115+
sudo apt-get install -y \
116+
python3-dev \
117+
libdebuginfod-dev \
118+
libunwind-dev \
119+
liblz4-dev
120+
121+
- name: Run memory benchmark for commit
122+
env:
123+
MEMORY_TRACKER_TOKEN: ${{ secrets.MEMORY_TRACKER_TOKEN }}
124+
run: |
125+
COMMIT="${{ matrix.commit }}"
126+
127+
# Build command for single commit
128+
CMD="memory-tracker benchmark '$COMMIT'"
129+
CMD="$CMD --repo-path ./cpython"
130+
CMD="$CMD --binary-id '${{ github.event.inputs.binary_id || 'freethreaded' }}'"
131+
CMD="$CMD --environment-id '${{ github.event.inputs.environment_id || 'gh_actions' }}'"
132+
CMD="$CMD --api-base '${{ github.event.inputs.server_url || 'https://memory.python.org' }}'"
133+
CMD="$CMD --output-dir ./benchmark_results"
134+
CMD="$CMD --force"
135+
CMD="$CMD -vv"
136+
137+
echo "Running benchmark for commit: $COMMIT"
138+
echo "Command: $CMD"
139+
eval $CMD
140+
141+
- name: Upload benchmark results (if failed)
142+
if: failure()
143+
uses: actions/upload-artifact@v4
144+
with:
145+
name: benchmark-logs-${{ matrix.commit }}
146+
path: |
147+
*.log
148+
./benchmark_results/
149+
retention-days: 7
150+
151+
- name: Upload benchmark results (on success)
152+
if: success()
153+
uses: actions/upload-artifact@v4
154+
with:
155+
name: benchmark-results-${{ matrix.commit }}
156+
path: ./benchmark_results/
157+
retention-days: 30
158+
159+
summary:
160+
needs: [get-daily-commits, benchmark-commits]
161+
if: always()
162+
runs-on: ubuntu-latest
163+
164+
steps:
165+
- name: Print summary
166+
run: |
167+
echo "Daily benchmark run completed"
168+
echo "Total commits processed: ${{ needs.get-daily-commits.outputs.commit-count }}"
169+
170+
if [ "${{ needs.get-daily-commits.outputs.commit-count }}" = "0" ]; then
171+
echo "No commits found for the target date"
172+
else
173+
echo "Benchmark jobs completed with status: ${{ needs.benchmark-commits.result }}"
174+
fi

0 commit comments

Comments
 (0)