name: Python
on:
workflow_call:
inputs:
release:
description: GitHub release tag to download binaries from and publish to PyPI
required: true
type: string
jobs:
publish:
name: Publish Python wheels
runs-on: ubuntu-latest
environment: pypi
permissions:
contents: write
id-token: write
defaults:
run:
working-directory: python
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
sparse-checkout: python
- name: Install uv
uses: astral-sh/setup-uv@v5
- name: Download binaries from release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh release download ${{ inputs.release }} \
--pattern 'mdlint-linux-x86_64' \
--pattern 'mdlint-linux-x86_64-musl' \
--pattern 'mdlint-linux-aarch64' \
--pattern 'mdlint-linux-aarch64-musl' \
--pattern 'mdlint-macos-x86_64' \
--pattern 'mdlint-macos-aarch64' \
--pattern 'mdlint-windows-x86_64.exe' \
--dir /tmp/binaries \
--repo "${{ github.repository }}"
- name: Build wheels
run: |
declare -A platforms=(
[mdlint-linux-x86_64]="manylinux_2_17_x86_64.manylinux2014_x86_64"
[mdlint-linux-x86_64-musl]="musllinux_1_2_x86_64"
[mdlint-linux-aarch64]="manylinux_2_17_aarch64.manylinux2014_aarch64"
[mdlint-linux-aarch64-musl]="musllinux_1_2_aarch64"
[mdlint-macos-x86_64]="macosx_10_12_x86_64"
[mdlint-macos-aarch64]="macosx_11_0_arm64"
[mdlint-windows-x86_64.exe]="win_amd64"
)
for asset in "${!platforms[@]}"; do
binary="mdlint$([[ $asset == *.exe ]] && echo .exe || echo '')"
cp "/tmp/binaries/$asset" "mdlint/$binary"
chmod +x "mdlint/$binary"
MDLINT_PLATFORM_TAG="${platforms[$asset]}" uv build --wheel
rm "mdlint/$binary"
done
- name: Publish to PyPI
run: uv publish dist/*.whl
- name: Upload wheels to GitHub release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload "${{ inputs.release }}" dist/*.whl --repo "${{ github.repository }}"