perf: Parse HogQL with C++ for a huge speedup #45
Workflow file for this run
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
name: Release hogql-parser | |
on: | |
push: | |
branches: | |
- master | |
paths: | |
- hogql_parser/** | |
- .github/workflows/build-hogql-parser.yml | |
pull_request: | |
paths: | |
- hogql_parser/** | |
- .github/workflows/build-hogql-parser.yml | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
jobs: | |
check-version: | |
name: Check version legitimacy | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Compare versions | |
shell: bash | |
run: | | |
published=$(curl -fSsl https://pypi.org/pypi/hogql-parser/json | jq -r '.info.version') | |
local=$(python hogql_parser/setup.py --version) | |
if [[ "$published" == "$local" ]]; then | |
echo "Version $local is already published on PyPI - update hogql_parser/setup.py" | |
exit 1 | |
fi | |
build-wheels: | |
name: Build wheels on ${{ matrix.os }} | |
needs: check-version | |
runs-on: ${{ matrix.os }} | |
timeout-minutes: 30 | |
strategy: | |
matrix: | |
# As of October 2023, GitHub doesn't have ARM Actions runners… and ARM emulation is insanely slow | |
# (20x longer) on the Linux runners (while being reasonable on the macOS runners). Hence, we use | |
# BuildJet as a provider of ARM runners - this solution saves a lot of time and consequently some money. | |
os: [ubuntu-22.04, buildjet-2vcpu-ubuntu-2204-arm, macos-12] | |
steps: | |
- uses: actions/checkout@v4 | |
- if: ${{ !endsWith(matrix.os, '-arm') }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.11' | |
- if: ${{ endsWith(matrix.os, '-arm') }} | |
uses: deadsnakes/[email protected] # Unfortunately actions/setup-python@v4 just doesn't work on ARM! This does | |
with: | |
python-version: '3.11' | |
- name: Build sdist | |
if: matrix.os == 'ubuntu-22.04' # Only build the sdist once | |
run: cd hogql_parser && python setup.py sdist | |
- name: Install cibuildwheel | |
run: python -m pip install cibuildwheel==2.16.* | |
- name: Build wheels | |
run: cd hogql_parser && python -m cibuildwheel --output-dir dist | |
env: | |
MACOSX_DEPLOYMENT_TARGET: '12' # A modern target allows us to use C++20 | |
- uses: actions/upload-artifact@v3 | |
with: | |
path: | | |
hogql_parser/dist/*.whl | |
hogql_parser/dist/*.tar.gz | |
if-no-files-found: error | |
publish: | |
name: Publish on PyPI | |
needs: build-wheels | |
environment: pypi-hogql-parser | |
permissions: | |
id-token: write | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Fetch wheels | |
uses: actions/download-artifact@v3 | |
with: | |
name: artifact | |
path: dist/ | |
- name: Publish package to PyPI | |
uses: pypa/gh-action-pypi-publish@release/v1 |