⬆️ Bump orjson from 3.9.15 to 3.10.6 #3595
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 | |
on: # yamllint disable-line rule:truthy | |
push: | |
branches: | |
- master | |
workflow_dispatch: | |
pull_request: | |
jobs: | |
# Shared tag & version number info ---------------------- | |
get-tag-xor-dev-version: | |
name: Get tags and version numbers | |
runs-on: ubuntu-latest | |
outputs: | |
tag: ${{ steps.detect-new-version-tag.outputs.tag }} | |
dev-version: ${{ steps.bump-dev-version.outputs.version }} | |
steps: | |
- name: Check out the repository | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 2 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
- name: Upgrade pip | |
run: | | |
pip install --constraint=.github/workflows/constraints.txt pip | |
pip --version | |
- name: Install Poetry | |
run: | | |
pip install --constraint=.github/workflows/constraints.txt poetry | |
poetry --version | |
- name: Check if there is a parent commit | |
id: check-parent-commit | |
run: | | |
echo "sha=$(git rev-parse --verify --quiet HEAD^)" >> $GITHUB_OUTPUT | |
- name: Detect new version tag | |
id: detect-new-version-tag | |
if: "steps.check-parent-commit.outputs.sha" | |
run: | | |
BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD) | |
git checkout HEAD~ | |
PARENT_COMMIT_VER=$(make get-project-version-number) | |
git checkout "${BRANCH_NAME}" | |
CURRENT_COMMIT_VER=$(make get-project-version-number) | |
if [[ "${PARENT_COMMIT_VER}" != "${CURRENT_COMMIT_VER}" ]]; then | |
echo "tag=${CURRENT_COMMIT_VER}" >> $GITHUB_OUTPUT | |
fi | |
- name: Bump version for developmental release | |
id: bump-dev-version | |
if: "! steps.detect-new-version-tag.outputs.tag" | |
run: | | |
poetry version patch && | |
VERSION=$(make get-project-version-number) && | |
DEV_VERSION="${VERSION}.dev.$(date +%s)" && | |
poetry version "${DEV_VERSION}" && | |
echo "version=${DEV_VERSION}" >> $GITHUB_OUTPUT | |
# Package build ---------------------- | |
package-build: | |
strategy: | |
matrix: | |
# Parallelize all MacOS CPython wheel builds | |
os: ["macos-latest"] | |
cibw_archs_macos: ["x86_64", "universal2", "arm64"] | |
# For broader MacOS major version compatibility, | |
# build all wheels against the below deployment targets | |
macosx_deployment_target: ["10.9", "11.0", "12.0"] | |
include: | |
# Parallelize all Linux aarch64 CPython wheel builds across major versions | |
# 3.8 | |
- os: "ubuntu-latest" | |
cibw_archs_linux: "aarch64" | |
cibw_skip_linux_aarch64_cpython_versions: "cp3{9,10,11}-*" | |
# 3.9 | |
- os: "ubuntu-latest" | |
cibw_archs_linux: "aarch64" | |
cibw_skip_linux_aarch64_cpython_versions: "cp3{8,10,11}-*" | |
# 3.10 | |
- os: "ubuntu-latest" | |
cibw_archs_linux: "aarch64" | |
cibw_skip_linux_aarch64_cpython_versions: "cp3{8,9,11}-*" | |
# 3.11 | |
- os: "ubuntu-latest" | |
cibw_archs_linux: "aarch64" | |
cibw_skip_linux_aarch64_cpython_versions: "cp3{8,9,10}-*" | |
# All Linux x86_64 CPython wheel builds | |
- os: "ubuntu-latest" | |
cibw_archs_linux: "auto64" | |
# All Windows AMD64 CPython wheel builds | |
- os: "windows-2019" | |
cibw_archs_windows: "auto64" | |
name: Package build via CI buildwheel | |
runs-on: ${{ matrix.os }} | |
needs: get-tag-xor-dev-version | |
outputs: | |
is-test-package: ${{ steps.use-dev-version-for-testing.outputs.is_testing }} | |
package-version: ${{ steps.log-package-version.outputs.version }} | |
steps: | |
- name: Check out the repository | |
uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
- name: Upgrade pip | |
run: | | |
pip install --constraint=.github/workflows/constraints.txt pip | |
pip --version | |
- name: Install Poetry | |
run: | | |
pip install --constraint=.github/workflows/constraints.txt poetry | |
poetry --version | |
# Update the project version number to the dev version that was | |
# generated upstream (only used in non-release builds; else project | |
# already set to the correct version number) | |
- name: Use dev project version for testing | |
id: use-dev-version-for-testing | |
if: "needs.get-tag-xor-dev-version.outputs.dev-version" | |
run: | | |
VERSION="${{ needs.get-tag-xor-dev-version.outputs.dev-version }}" | |
poetry version "${VERSION}" | |
echo "is_testing=true" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Log package version | |
id: log-package-version | |
run: | | |
VERSION=$(make get-project-version-number) | |
echo "version=${VERSION}" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Setup QEMU | |
if: ${{ runner.os == 'Linux' }} | |
uses: docker/setup-qemu-action@v3 | |
- name: Log wheel filename-safe MacOS deployment target identifier | |
if: "startsWith(matrix.os, 'macos')" | |
run: | | |
echo "macosx_deployment_target_wheel_string=$(echo ${{ matrix.macosx_deployment_target }} | sed 's/\./_/g')" >> $GITHUB_ENV | |
- name: Build wheels | |
uses: pypa/cibuildwheel@v2.17.0 | |
env: | |
CIBW_PROJECT_REQUIRES_PYTHON: ">=3.8,<3.12" | |
# Disable building | |
# - PyPy wheels on all platforms due to orjson maturin wheel build incompatibility | |
# see: https://github.com/ijl/orjson/issues/177 | |
# - redundant Linux aarch64 builds (already handled by other jobs) | |
CIBW_SKIP: "pp* ${{ matrix.cibw_skip_linux_aarch64_cpython_versions }}" | |
# On a Windows runner only build 64-bit wheels | |
CIBW_ARCHS_WINDOWS: ${{ matrix.cibw_archs_windows }} | |
# Install rust on Linux runners for orjson wheel builds which use maturin | |
# https://github.com/Daggy1234/polaroid/blob/ace9a6eee74ee9c30edd0d350d65e2f3b4d8430c/.github/workflows/publish.yml#L29 | |
CIBW_BEFORE_ALL_LINUX: > | |
curl https://sh.rustup.rs -sSf | sh -s -- --default-toolchain stable -y && | |
yum install -y openssl-devel || apk add openssl-dev | |
CIBW_ENVIRONMENT_LINUX: > | |
PATH="$PATH:$HOME/.cargo/bin" | |
CARGO_NET_GIT_FETCH_WITH_CLI="true" | |
# Pass orjson build args to maturin | |
# | |
# Note: this is global to *all* maturin wheel builds which may be | |
# problematic if, in the future, multiple build dependencies use | |
# maturin and must be built from source | |
MATURIN_PEP517_ARGS: "--strip --out dist --features=unstable-simd,yyjson" | |
# On a Linux Intel runner with qemu installed, | |
# build 64-bit Intel and ARM wheels | |
CIBW_ARCHS_LINUX: ${{ matrix.cibw_archs_linux }} | |
# On MacOS, explicitly specify (a) target architectures for correct | |
# wheel builds (metadata & file names use x86_64 by default otherwise) | |
# and (b) minimum target OS versions for broader compatibility with | |
# different OS versions | |
CIBW_ENVIRONMENT_MACOS: > | |
MACOSX_DEPLOYMENT_TARGET="${{ matrix.macosx_deployment_target }}" | |
CMAKE_OSX_DEPLOYMENT_TARGET="${{ matrix.macosx_deployment_target }}" | |
CMAKE_OSX_ARCHITECTURES="${{ matrix.cibw_archs_macos }}" | |
# Build `universal2` and `arm64` wheels on an Intel runner. | |
# Note that the `arm64` wheel and the `arm64` part of the `universal2` | |
# wheel cannot be tested in this configuration. | |
CIBW_ARCHS_MACOS: ${{ matrix.cibw_archs_macos }} | |
CIBW_BUILD_VERBOSITY_MACOS: 1 | |
# Skip trying to test arm64 builds on Intel Macs | |
CIBW_TEST_SKIP: "*-macosx_arm64 *-macosx_universal2:arm64" | |
# Correctly rename MacOS wheels to fix user installs (due to bug w/ cibuildwheel) | |
# - arm64/universal2 builds are incorrectly given the x86_64 suffix | |
# - MACOSX_DEPLOYMENT_TARGET builds are incorrectly given the default | |
# 10_16 & 11_0 platform specifiers | |
CIBW_REPAIR_WHEEL_COMMAND_MACOS: > | |
delocate-listdeps {wheel} && | |
delocate-wheel --require-archs {delocate_archs} -w {dest_dir} {wheel} && | |
find {dest_dir} -type f -name '*.whl' -exec bash -c 'mv "$1" "${1//x86_64/${{ matrix.cibw_archs_macos }}}"' bash {} \; && | |
find {dest_dir} -type f -name '*.whl' -exec bash -c 'mv "$1" "${1//10_16/${{ env.macosx_deployment_target_wheel_string }}}"' bash {} \; && | |
find {dest_dir} -type f -name '*.whl' -exec bash -c 'mv "$1" "${1//11_0/${{ env.macosx_deployment_target_wheel_string }}}"' bash {} \; && | |
find {dest_dir} -type f -name '*.whl' -exec bash -c 'mv "$1" "${1//12_0/${{ env.macosx_deployment_target_wheel_string }}}"' bash {} \; | |
- name: Log unique benchmark file suffix (MacOS) | |
if: "startsWith(matrix.os, 'macos')" | |
run: | | |
echo "benchmark_file_suffix=$(echo ${{ matrix.cibw_archs_macos }}-${{ matrix.macosx_deployment_target }} )" >> $GITHUB_ENV | |
- name: Log unique benchmark file suffix (Ubuntu) | |
if: "startsWith(matrix.os, 'ubuntu')" | |
run: | | |
echo "benchmark_file_suffix=$(echo ${{ matrix.cibw_archs_linux }}-skip-versions-${{ matrix.cibw_skip_linux_aarch64_cpython_versions }} | sed 's/\*\s\{0,1\}//g' )" >> $GITHUB_ENV | |
- name: Log unique benchmark file suffix (Windows) | |
if: "startsWith(matrix.os, 'windows')" | |
run: | | |
echo "benchmark_file_suffix=$(echo ${{ matrix.cibw_archs_windows }} )" >> $GITHUB_ENV | |
- name: Store the binary wheel | |
uses: actions/upload-artifact@v4 | |
with: | |
name: python-package-distributions-${{ matrix.os }}-${{ env.benchmark_file_suffix }} | |
path: ./wheelhouse/*.whl | |
# PyPI/TestPyPI package upload ---------------------- | |
pypi-packages-upload: | |
name: PyPI/TestPyPI package upload | |
runs-on: ubuntu-latest | |
needs: | |
- package-build | |
outputs: | |
package-version: ${{ needs.package-build.outputs.package-version }} | |
steps: | |
- name: Check out the repository | |
uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.11" | |
- name: Upgrade pip | |
run: | | |
pip install --constraint=.github/workflows/constraints.txt pip | |
pip --version | |
- name: Download the ci build wheel binary wheels | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: python-package-distributions* | |
path: dist | |
merge-multiple: true | |
- name: Publish packages on PyPI | |
if: "! needs.package-build.outputs.is-test-package" | |
uses: pypa/gh-action-pypi-publish@v1.8.14 | |
with: | |
user: __token__ | |
password: ${{ secrets.PYPI_TOKEN }} # pragma: allowlist secret | |
# # FIXME(teo): Re-enable this step once the following issue is resolved: | |
# # https://github.com/pypi/warehouse/issues/15149 | |
# - name: Publish packages on TestPyPI | |
# if: "needs.package-build.outputs.is-test-package" | |
# uses: pypa/gh-action-pypi-publish@v1.8.14 | |
# with: | |
# user: __token__ | |
# password: ${{ secrets.TEST_PYPI_TOKEN }} # pragma: allowlist secret | |
# repository_url: https://test.pypi.org/legacy/ | |
# Install Verification ---------------------- | |
verify-user-install: | |
strategy: | |
matrix: | |
os: ["ubuntu-latest", "windows-latest", "macos-latest"] | |
python-version: ["3.8", "3.9", "3.10", "3.11"] | |
name: Verify package install as user | |
# FIXME(teo): Remove this conditional once the following issue is resolved: | |
# https://github.com/pypi/warehouse/issues/15149 | |
if: "! needs.package-build.outputs.is-test-package" | |
# end FIXME(teo) | |
runs-on: ${{ matrix.os }} | |
needs: pypi-packages-upload | |
steps: | |
- name: Check out the repository | |
uses: actions/checkout@v4 | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install package-under-test | |
run: | | |
PYPI_PACKAGE="structlog-sentry-logger==${PACKAGE_VERSION}" | |
TEST_PYPI_PACKAGE="${PYPI_PACKAGE} --index-url https://test.pypi.org/simple/" | |
function install_test_pypi() { pip install ${TEST_PYPI_PACKAGE} --no-deps && install_pypi; } | |
function install_pypi() { pip install --upgrade ${PYPI_PACKAGE}; } | |
until (install_test_pypi || install_pypi) | |
do | |
echo "Waiting for Python Package Index to serve current package-under-test: ${PYPI_PACKAGE}" | |
sleep 10 | |
done | |
pip list -v | |
env: | |
PACKAGE_VERSION: ${{ needs.pypi-packages-upload.outputs.package-version }} | |
shell: bash | |
- name: Run example script with both logging configurations | |
run: | | |
echo "Default output (JSON)" | |
python ./docs_src/pure_structlog_logging_without_sentry.py | |
echo "Cloud Logging compatibility mode (JSON)" | |
export STRUCTLOG_SENTRY_LOGGER_CLOUD_LOGGING_COMPATIBILITY_MODE_ON= | |
python ./docs_src/pure_structlog_logging_without_sentry.py | |
echo "Local development mode output (formatted) \ | |
(with Cloud Logging compatibility mode still activated)" | |
export STRUCTLOG_SENTRY_LOGGER_LOCAL_DEVELOPMENT_LOGGING_MODE_ON= | |
python ./docs_src/pure_structlog_logging_without_sentry.py | |
shell: bash | |
# Release notes publication ---------------------- | |
publish-release-notes: | |
name: Publish release notes | |
runs-on: ubuntu-latest | |
needs: | |
- get-tag-xor-dev-version | |
- verify-user-install | |
permissions: | |
pull-requests: write | |
contents: write | |
steps: | |
- name: Check out the repository | |
uses: actions/checkout@v4 | |
- name: Publish the release notes | |
uses: release-drafter/release-drafter@v6.0.0 | |
with: | |
publish: ${{ needs.get-tag-xor-dev-version.outputs.tag != '' }} | |
# Annotated tag to associate with the current commit | |
tag: ${{ needs.get-tag-xor-dev-version.outputs.tag }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |