benchmarking python/main #139
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Generated file: !!! DO NOT EDIT !!! | |
--- | |
env: | |
PYPERFORMANCE_HASH: ebb37f3583e26ea22cee34126b3b8a815112370b | |
PYSTON_BENCHMARKS_HASH: 004743ccbd9e54598c543d7eb71fd3b8e10d5750 | |
name: benchmark | |
run-name: benchmarking ${{ inputs.fork }}/${{ inputs.ref }} ${{ inputs.tier2 == true | |
&& 'T2' || '' }} ${{ inputs.jit == true && 'JIT' || '' }} ${{ inputs.nogil == true | |
&& 'NOGIL' || '' }} | |
on: | |
workflow_dispatch: | |
inputs: | |
fork: | |
description: Fork of cpython to benchmark | |
default: python | |
ref: | |
description: Branch, tag or (full) SHA commit to benchmark | |
default: main | |
machine: | |
description: Machine to run on | |
default: linux-amd64 | |
type: choice | |
options: | |
- linux-x86_64-linux | |
- linux-x86_64-vultr | |
- all | |
benchmarks: | |
description: Benchmarks to run (comma-separated; empty runs all benchmarks) | |
type: string | |
benchmark_base: | |
description: Also benchmark the base of this commit | |
type: boolean | |
default: false | |
pystats: | |
description: Also collect pystats for this commit | |
type: boolean | |
default: false | |
tier2: | |
description: tier 2 interpreter | |
type: boolean | |
default: false | |
jit: | |
description: JIT | |
type: boolean | |
default: false | |
nogil: | |
description: free threading | |
type: boolean | |
default: false | |
jobs: | |
# Determine the base commit of the selected commit. The output is passed to | |
# the `base` job below. If the data already exists for this commit, it will be | |
# skipped. | |
determine_base: | |
runs-on: ubuntu-latest | |
outputs: | |
head: ${{ steps.base.outputs.head }} | |
date: ${{ steps.base.outputs.date }} | |
version: ${{ steps.base.outputs.version }} | |
ref: ${{ steps.base.outputs.ref }} | |
need_to_run: ${{ steps.base.outputs.need_to_run }} | |
steps: | |
- name: Checkout benchmarking | |
uses: actions/checkout@v4 | |
- name: Setup system Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.11' | |
cache: pip | |
- name: Checkout CPython | |
uses: actions/checkout@v4 | |
with: | |
repository: ${{ inputs.fork }}/cpython | |
path: cpython | |
ref: ${{ inputs.ref }} | |
fetch-depth: 0 | |
- name: Install dependencies from PyPI | |
run: | | |
pip install -r requirements.txt | |
- name: Determine base | |
id: base | |
run: | | |
python -m bench_runner get_merge_base ${{ inputs.benchmark_base }} ${{ inputs.machine }} ${{ inputs.pystats }} ${{ inputs.tier2 == true && 'tier2' || '' }},${{ inputs.jit == true && 'jit' || '' }},${{ inputs.nogil == true && 'nogil' || '' }} >> $GITHUB_OUTPUT | |
cat $GITHUB_OUTPUT | |
env: | |
flags: ${{ inputs.tier2 == true && 'tier2' || '' }},${{ inputs.jit == true && | |
'jit' || '' }},${{ inputs.nogil == true && 'nogil' || '' }} | |
head: | |
uses: ./.github/workflows/_benchmark.yml | |
with: | |
fork: ${{ inputs.fork }} | |
ref: ${{ inputs.ref }} | |
machine: ${{ inputs.machine }} | |
benchmarks: ${{ inputs.benchmarks }} | |
pgo: true | |
perf: false | |
force: true | |
tier2: ${{ inputs.tier2 }} | |
jit: ${{ inputs.jit }} | |
nogil: ${{ inputs.nogil }} | |
secrets: inherit | |
base: | |
uses: ./.github/workflows/_benchmark.yml | |
needs: determine_base | |
if: ${{ needs.determine_base.outputs.need_to_run != 'false' }} | |
with: | |
fork: python | |
ref: ${{ needs.determine_base.outputs.ref }} | |
machine: ${{ inputs.machine }} | |
benchmarks: ${{ inputs.benchmarks }} | |
pgo: true | |
perf: false | |
force: false | |
tier2: ${{ inputs.tier2 }} | |
jit: ${{ inputs.jit }} | |
nogil: ${{ inputs.nogil }} | |
secrets: inherit | |
pystats-head: | |
uses: ./.github/workflows/_pystats.yml | |
if: ${{ inputs.pystats }} | |
with: | |
fork: ${{ inputs.fork }} | |
ref: ${{ inputs.ref }} | |
benchmarks: ${{ inputs.benchmarks }} | |
individual: true | |
force: true | |
tier2: ${{ inputs.tier2 }} | |
jit: ${{ inputs.jit }} | |
nogil: ${{ inputs.nogil }} | |
secrets: inherit | |
pystats-base: | |
uses: ./.github/workflows/_pystats.yml | |
needs: determine_base | |
if: ${{ inputs.pystats && needs.determine_base.outputs.need_to_run != 'false' | |
}} | |
with: | |
fork: python | |
ref: ${{ needs.determine_base.outputs.ref }} | |
benchmarks: ${{ inputs.benchmarks }} | |
individual: true | |
force: false | |
tier2: ${{ inputs.tier2 }} | |
jit: ${{ inputs.jit }} | |
nogil: ${{ inputs.nogil }} | |
secrets: inherit | |
generate: | |
uses: ./.github/workflows/_generate.yml | |
with: | |
force: false | |
if: ${{ always() }} | |
needs: [head, base, pystats-head, pystats-base] | |
secrets: inherit | |
notify: | |
uses: ./.github/workflows/_notify.yml | |
if: ${{ always() }} | |
needs: | |
- generate | |
- determine_base | |
with: | |
fork: ${{ inputs.fork }} | |
ref: ${{ inputs.ref }} | |
head: ${{ needs.determine_base.outputs.head }} | |
date: ${{ needs.determine_base.outputs.date }} | |
version: ${{ needs.determine_base.outputs.version }} | |
tier2: ${{ inputs.tier2 }} | |
jit: ${{ inputs.jit }} | |
nogil: ${{ inputs.nogil }} | |
secrets: inherit |