perf: faster reading of files with many branches (#1448) #4497
This file contains hidden or 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
name: Test build | |
on: | |
workflow_dispatch: | |
pull_request: | |
push: | |
branches: [main] | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
jobs: | |
build: | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [windows-latest, macos-latest, ubuntu-latest] | |
python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] | |
runs-on: ${{ matrix.platform }} | |
timeout-minutes: 30 | |
# Required for miniconda to activate conda | |
defaults: | |
run: | |
shell: bash -l {0} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Get micromamba | |
uses: mamba-org/setup-micromamba@v2 | |
with: | |
environment-name: test-env | |
init-shell: bash | |
create-args: >- | |
python=${{ matrix.python-version }} | |
- uses: astral-sh/setup-uv@v6 | |
- name: Check active Python version | |
run: python -c "import sys; assert '.'.join(str(s) for s in sys.version_info[:2]) == '${{ matrix.python-version }}', f'{version} incorrect!'" | |
- name: Install ROOT | |
if: matrix.python-version == 3.9 && runner.os == 'Linux' | |
run: | | |
micromamba env list | |
micromamba install root | |
micromamba list | |
- name: Install sshd for fsspec ssh tests | |
if: runner.os == 'Linux' | |
run: | | |
sudo apt-get install -y openssh-server | |
sudo service ssh restart | |
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa | |
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys | |
chmod og-wx ~/.ssh/authorized_keys | |
ssh-keyscan -H localhost >> ~/.ssh/known_hosts | |
ssh -o StrictHostKeyChecking=no localhost echo "ssh connection successful" | |
- name: Install XRootD | |
if: runner.os != 'Windows' | |
run: | | |
micromamba env list | |
micromamba install xrootd | |
micromamba list | |
- name: Pip install the package | |
run: uv pip install --system -e. --group=dev | |
- name: Run pytest | |
run: | | |
python -m pytest -vv tests --reruns 10 --reruns-delay 30 --only-rerun "(?i)http|ssl|timeout|expired|connection|socket" | |
vanilla-build: | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [windows-latest, ubuntu-latest, macos-latest] | |
python-version: ['3.13'] | |
runs-on: ${{ matrix.platform }} | |
timeout-minutes: 30 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
allow-prereleases: true | |
- uses: astral-sh/setup-uv@v6 | |
- name: Pip install the package | |
run: uv pip install --system -e. --group=dev | |
- name: Run pytest | |
run: | | |
python -m pytest -vv tests --reruns 10 --reruns-delay 30 --only-rerun "(?i)http|ssl|timeout|expired|connection|socket" | |
numpy1-build: | |
strategy: | |
fail-fast: false | |
matrix: | |
platform: [windows-latest, ubuntu-latest, macos-latest] | |
python-version: ['3.11'] | |
runs-on: ${{ matrix.platform }} | |
timeout-minutes: 30 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- uses: astral-sh/setup-uv@v6 | |
- name: Pip install the package | |
run: | | |
uv venv | |
uv pip install -e. 'numpy<2' --group test | |
- name: Run pytest | |
run: | | |
uv run --no-sync pytest -vv tests --reruns 10 --reruns-delay 30 --only-rerun "(?i)http|ssl|timeout|expired|connection|socket" | |
pyodide-build: | |
runs-on: ubuntu-latest | |
timeout-minutes: 30 | |
env: | |
PYODIDE_VERSION: 0.27.5 | |
PYODIDE_BUILD_VERSION: 0.30.0 | |
AWKWARD_VERSION: v2.7.4 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
- name: Setup Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.12' | |
- uses: astral-sh/setup-uv@v6 | |
- name: Install pyodide-build | |
run: python3 -m pip install pyodide-build==$PYODIDE_BUILD_VERSION | |
- name: Determine EMSDK version | |
id: compute-emsdk-version | |
run: | | |
pyodide config list | |
# Save EMSDK version | |
EMSCRIPTEN_VERSION=$(pyodide config get emscripten_version) | |
echo "emsdk-version=$EMSCRIPTEN_VERSION" >> $GITHUB_OUTPUT | |
- name: Install EMSDK | |
uses: mymindstorm/setup-emsdk@v14 | |
with: | |
version: ${{ steps.compute-emsdk-version.outputs.emsdk-version }} | |
- name: Build the package | |
run: pyodide build | |
- name: Build an awkward wheel compatible with the awkward-cpp version in pyodide | |
run: | | |
git clone --depth 1 --branch $AWKWARD_VERSION https://github.com/scikit-hep/awkward.git dependencies/awkward | |
pyodide build dependencies/awkward | |
rm -rf dependencies/ | |
- name: Download Pyodide | |
uses: pyodide/pyodide-actions/download-pyodide@v2 | |
with: | |
version: ${{ env.PYODIDE_VERSION }} | |
to: pyodide-dist | |
- name: Install browser | |
uses: pyodide/pyodide-actions/install-browser@v2 | |
with: | |
runner: selenium | |
browser: chrome | |
browser-version: 1446681 | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install dependencies | |
run: uv pip install --system -e. --group=test-pyodide pyodide-py==$PYODIDE_VERSION | |
- name: Run pytest | |
run: | | |
pytest -vv --dist-dir=./pyodide-dist/ --runner=selenium --runtime=chrome tests-wasm | |
pass: | |
if: always() | |
needs: [build, vanilla-build, numpy1-build, pyodide-build] | |
runs-on: ubuntu-latest | |
timeout-minutes: 2 | |
steps: | |
- name: Decide whether the needed jobs succeeded or failed | |
uses: re-actors/alls-green@release/v1 | |
with: | |
jobs: ${{ toJSON(needs) }} |