blob: 213ddb3728a879cd4afce4ac9e0ba06f00f81727 [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
name: PR validation
on:
pull_request:
branches: ['main']
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
check-and-lint:
name: Lint and check code
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: 3.x
- name: Install deps
run: pip install -U pydoctor
- name: Check docs syntax
run: |
pydoctor --make-html \
--html-viewsource-base=https://github.com/apache/pulsar-client-python/tree/main \
--docformat=numpy --theme=readthedocs \
--intersphinx=https://docs.python.org/3/objects.inv \
--html-output=apidocs \
pulsar
unit-tests:
name: Run unit tests for Python ${{matrix.version}}
runs-on: ubuntu-22.04
timeout-minutes: 120
strategy:
fail-fast: false
matrix:
version: ['3.8', '3.12']
steps:
- name: checkout
uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: "${{matrix.version}}"
- name: Install Pulsar C++ client
run: build-support/install-dependencies.sh
- name: CMake
run: cmake .
- name: Build
run: make -j8
- name: Python install
run: |
python3 -m pip install -U pip setuptools wheel requests
python3 setup.py bdist_wheel
WHEEL=$(find dist -name '*.whl')
pip3 install ${WHEEL}[avro]
- name: Run Oauth2 tests
run: |
docker compose -f ./build-support/docker-compose-pulsar-oauth2.yml up -d
# Wait until the namespace is created, currently there is no good way to check it via CLI
sleep 10
python3 tests/oauth2_test.py
docker compose -f ./build-support/docker-compose-pulsar-oauth2.yml down
- name: Start Pulsar service
run: ./build-support/pulsar-test-service-start.sh
- name: Run unit tests
run: ./tests/run-unit-tests.sh
- name: Stop Pulsar service
run: ./build-support/pulsar-test-service-stop.sh
- name: Test functions install
run: |
WHEEL=$(find dist -name '*.whl')
pip3 install ${WHEEL}[all] --force-reinstall
linux-wheel:
name: Wheel ${{matrix.image.name}} - Py ${{matrix.python.version}} - ${{matrix.cpu.platform}}
needs: unit-tests
runs-on: ubuntu-22.04
timeout-minutes: 300
strategy:
fail-fast: false
matrix:
image:
- {name: 'manylinux2014', py_suffix: ''}
- {name: 'manylinux_musl', py_suffix: '-alpine'}
python:
- {version: '3.12', spec: 'cp312-cp312'}
cpu:
- {arch: 'x86_64', platform: 'x86_64'}
steps:
- name: checkout
uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- uses: docker/setup-buildx-action@v2
- run: build-support/copy-deps-versionfile.sh
- name: Build Manylinux Docker image
uses: docker/build-push-action@v3
with:
context: ./pkg/${{matrix.image.name}}
load: true
tags: build:latest
platforms: linux/${{matrix.cpu.arch}}
build-args: |
PLATFORM=${{matrix.cpu.platform}}
ARCH=${{matrix.cpu.arch}}
PYTHON_VERSION=${{matrix.python.version}}
PYTHON_SPEC=${{matrix.python.spec}}
cache-from: type=gha
cache-to: type=gha,mode=max
- name: Build wheel file
run: |
docker run -i -v $PWD:/pulsar-client-python build:latest \
/pulsar-client-python/pkg/build-wheel-inside-docker.sh
- name: Test wheel file
run: |
docker run -i -v $PWD:/pulsar-client-python python:${{matrix.python.version}}${{matrix.image.py_suffix}} \
/pulsar-client-python/pkg/test-wheel.sh
mac-wheels:
name: Wheel MacOS Universal2 - Py ${{matrix.py.version}}
needs: unit-tests
runs-on: macos-12
timeout-minutes: 300
strategy:
matrix:
py:
- {version: '3.12', version_long: '3.12.0'}
steps:
- name: checkout
uses: actions/checkout@v3
- name: Dependencies cache
uses: actions/cache@v3
id: cache-deps
with:
path: .pulsar-mac-build/deps/install
key: ${{matrix.py.version_long}}-${{ hashFiles('dependencies.yaml') }}-${{ hashFiles('pkg/mac/*') }}
- name: Install Python deps
run: pip3 install -U pyyaml
- name: Build dependencies
if: steps.cache-deps.outputs.cache-hit != 'true'
run: pkg/mac/build-dependencies.sh ${{matrix.py.version}} ${{matrix.py.version_long}}
- name: Pulsar C++ cache
uses: actions/cache@v3
id: cache-cpp
with:
path: .pulsar-mac-build/cpp/install
key: ${{ hashFiles('dependencies.yaml') }}-${{ hashFiles('pulsar-client-cpp-version.txt') }}-${{ hashFiles('pkg/mac/*') }}
- name: Build Pulsar C++ client
if: steps.cache-cpp.outputs.cache-hit != 'true'
run: pkg/mac/build-pulsar-cpp.sh
- name: Build and test Mac wheels
run: pkg/mac/build-mac-wheels.sh ${{matrix.py.version}}
windows-wheels:
name: "Python ${{ matrix.python.version }} Wheel on Windows x64"
needs: unit-tests
runs-on: windows-2019
timeout-minutes: 120
env:
PULSAR_CPP_DIR: 'C:\\pulsar-cpp'
strategy:
fail-fast: false
matrix:
python:
- version: '3.12'
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python.version }}
- name: Download Pulsar C++ client on Windows
shell: bash
run: |
source ./build-support/dep-url.sh
BASE_URL=$(pulsar_cpp_base_url $(grep pulsar-cpp dependencies.yaml | awk '{print $2}'))
mkdir -p ${{ env.PULSAR_CPP_DIR }}
cd ${{ env.PULSAR_CPP_DIR }}
curl -O -L ${BASE_URL}/x64-windows-static.tar.gz
tar zxf x64-windows-static.tar.gz
mv x64-windows-static/* .
ls -l ${{ env.PULSAR_CPP_DIR }}
- name: Configure CMake
shell: bash
run: |
pip3 install pyyaml
export PYBIND11_VERSION=$(./build-support/dep-version.py pybind11)
curl -L -O https://github.com/pybind/pybind11/archive/refs/tags/v${PYBIND11_VERSION}.tar.gz
tar zxf v${PYBIND11_VERSION}.tar.gz
rm -rf pybind11
mv pybind11-${PYBIND11_VERSION} pybind11
cmake -B build -A x64 \
-DCMAKE_PREFIX_PATH=${{ env.PULSAR_CPP_DIR }} \
-DLINK_STATIC=ON
- name: Build Python wheel
shell: bash
run: |
cmake --build build --config Release --target install
python -m pip install wheel setuptools
python setup.py bdist_wheel
python -m pip install ./dist/*.whl
python -c 'import pulsar; c = pulsar.Client("pulsar://localhost:6650"); c.close()'
check-completion:
name: Check Completion
runs-on: ubuntu-latest
if: ${{ always() }}
needs: [
check-and-lint,
unit-tests,
linux-wheel,
mac-wheels,
windows-wheels
]
steps:
- run: |
if [[ ! ( \
"${{ needs.check-and-lint.result }}" == "success" \
&& "${{ needs.unit-tests.result }}" == "success" \
&& "${{ needs.linux-wheel.result }}" == "success" \
&& "${{ needs.mac-wheels.result }}" == "success" \
&& "${{ needs.windows-wheels.result }}" == "success" \
) ]]; then
echo "Required jobs haven't been completed successfully."
exit 1
fi