2023-10-13 15:58:08 +02:00
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
2023-10-23 12:34:04 +02:00
if : github.repository == 'PostHog/posthog'
2023-10-13 15:58:08 +02:00
runs-on : ubuntu-22.04
outputs :
2023-10-27 14:06:31 +02:00
parser-release-needed : ${{ steps.version.outputs.parser-release-needed }}
2023-10-13 15:58:08 +02:00
steps :
- uses : actions/checkout@v4
with :
fetch-depth : 0 # Fetching all for comparison since last push (not just last commit)
- name : Check if hogql_parser/ has changed
2023-10-27 14:06:31 +02:00
id : changed-files
2024-03-18 10:52:11 +01:00
uses : tj-actions/changed-files@v43
2023-10-13 15:58:08 +02:00
with :
since_last_remote_commit : true
files_yaml : |
parser :
- hogql_parser/**
2023-10-27 14:06:31 +02:00
- name : Check if version was bumped
2023-10-13 15:58:08 +02:00
shell : bash
2023-10-27 14:06:31 +02:00
id : version
2023-10-13 15:58:08 +02:00
run : |
2023-10-27 14:06:31 +02:00
parser_release_needed='false'
if [[ ${{ steps.changed-files.outputs.parser_any_changed }} == 'true' ]]; then
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
parser_release_needed='true'
else
message_body="It looks like the code of \`hogql-parser\` has changed since last push, but its version stayed the same at $local. 👀\nMake sure to resolve this in \`hogql_parser/setup.py\` before merging!"
curl -s -u posthog-bot:${{ secrets.POSTHOG_BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} -X POST -d "{ \"body\": \"$message_body\" }" "https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.pull_request.number }}/comments"
fi
2023-10-13 15:58:08 +02:00
fi
2024-01-12 10:28:08 +01:00
echo "parser-release-needed=$parser_release_needed" >> $GITHUB_OUTPUT
2023-10-13 15:58:08 +02:00
build-wheels :
name : Build wheels on ${{ matrix.os }}
needs : check-version
runs-on : ${{ matrix.os }}
timeout-minutes : 30
2023-10-27 14:06:31 +02:00
if : ${{ needs.check-version.outputs.parser-release-needed == 'true' }}
2023-10-13 15:58:08 +02:00
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/action@v3.0.1 # 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
- uses : actions/checkout@v4
with :
token : ${{ secrets.POSTHOG_BOT_GITHUB_TOKEN }}
ref : ${{ github.event.pull_request.head.ref }}
- name : Update hogql-parser in requirements
shell : bash
run : |
local=$(python hogql_parser/setup.py --version)
sed -i "s/hogql-parser==.*/hogql-parser==${local}/g" requirements.in
sed -i "s/hogql-parser==.*/hogql-parser==${local}/g" requirements.txt
- uses : EndBug/add-and-commit@v9
with :
add : '["requirements.in", "requirements.txt"]'
message : 'Use new hogql-parser version'
default_author : github_actions
github_token : ${{ secrets.POSTHOG_BOT_GITHUB_TOKEN }}