1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
---
name: Deploy
on:
push:
branches:
- main
pull_request:
paths:
- ".github/workflows/deploy.yml"
release:
types:
- published
workflow_dispatch:
permissions: {}
env:
FORCE_COLOR: 1
jobs:
build-wheels:
name: "${{ matrix.os }}: ${{ matrix.cibw_arch }}"
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
cibw_arch: "auto"
- os: windows-11-arm
cibw_arch: "ARM64"
- os: macos-latest
cibw_arch: "x86_64 arm64"
- os: ubuntu-latest
cibw_arch: "x86_64 i686"
- os: ubuntu-24.04-arm
cibw_arch: aarch64
steps:
- uses: actions/checkout@v5
- run: git fetch --prune --unshallow
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.x"
# https://github.com/pypa/cibuildwheel
- name: Build wheels
uses: pypa/cibuildwheel@v3.1.4
with:
output-dir: dist
# Options are supplied via environment variables:
env:
# Build wheels for the currently selected architecture.
CIBW_ARCHS: ${{ matrix.cibw_arch }}
# Include latest Python beta.
CIBW_ENABLE: cpython-prerelease pypy
# Skip EOL Python versions.
CIBW_SKIP: "pp310*"
# Run the test suite after each build.
CIBW_TEST_REQUIRES: "pytest"
CIBW_TEST_COMMAND: pytest {package}/tests
- name: Upload as build artifacts
uses: actions/upload-artifact@v4
with:
name: wheels-${{ matrix.os }}
path: dist/*.whl
build-sdist-and-upload:
runs-on: ubuntu-latest
needs: ['build-wheels']
permissions:
# IMPORTANT: this permission is mandatory for trusted publishing
id-token: write
steps:
- uses: actions/checkout@v5
- run: |
git fetch --prune --unshallow
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.x"
- name: Install dependencies
run: |
python -m pip install -U pip
python -m pip install -U build twine
- name: Download wheels from build artifacts
uses: actions/download-artifact@v5
with:
pattern: wheels-*
merge-multiple: true
path: dist-wheels/
- name: Build package
run: |
git tag
python -m build --sdist
twine check --strict dist/*
twine check --strict dist-wheels/*
- name: Publish wheels to PyPI
if: github.event.action == 'published'
uses: pypa/gh-action-pypi-publish@release/v1
with:
packages-dir: dist-wheels/
- name: Publish sdist to PyPI
if: github.event.action == 'published'
uses: pypa/gh-action-pypi-publish@release/v1
- name: Publish wheels to TestPyPI
if: |
github.repository == 'ultrajson/ultrajson' &&
github.ref == 'refs/heads/main'
uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/
packages-dir: dist-wheels/
- name: Publish sdist to TestPyPI
if: |
github.repository == 'ultrajson/ultrajson' &&
github.ref == 'refs/heads/main'
uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/
|