PyPi Release #438
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: "PyPi Release" | |
on: | |
workflow_dispatch: | |
inputs: | |
need_release: | |
description: "Select this for publish. If not selected, it will be a dry run (no uploads)." | |
type: boolean | |
push: | |
tags: | |
- "[0-9]+.*" | |
schedule: | |
# run pypi every day 9 am | |
- cron: '0 9 * * *' | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
PACKAGE_NAME: ast_grep_cli # note: maturin package name only accepts underscore | |
PYTHON_VERSION: "3.8" # to build abi3 wheels | |
CARGO_INCREMENTAL: 0 | |
CARGO_NET_RETRY: 10 | |
CARGO_TERM_COLOR: always | |
RUSTUP_MAX_RETRIES: 10 | |
jobs: | |
sdist: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.PYTHON_VERSION }} | |
- name: "Build sdist" | |
uses: PyO3/maturin-action@v1 | |
with: | |
command: sdist | |
args: --out dist | |
- name: "Test sdist" | |
run: | | |
rustup default $(cat rust-toolchain) | |
pip install dist/${{ env.PACKAGE_NAME }}-*.tar.gz --force-reinstall | |
sg --help | |
- name: "Upload sdist" | |
uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
path: dist | |
macos-x86_64: | |
# use old macos due to https://github.com/actions/setup-python/issues/852 | |
runs-on: macos-13 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.PYTHON_VERSION }} | |
architecture: x64 | |
# https://github.com/actions/runner-images/issues/658#issuecomment-611921753 | |
- name: "Build wheels - x86_64" | |
uses: PyO3/maturin-action@v1 | |
env: | |
# old llvm does not support libc++ by default | |
CXXFLAGS: "-stdlib=libc++" | |
with: | |
target: x86_64 | |
args: --release --out dist | |
- name: "Test wheel - x86_64" | |
run: | | |
pip install dist/${{ env.PACKAGE_NAME }}-*.whl --force-reinstall | |
sg --help | |
- name: "Upload wheels" | |
uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
path: dist | |
macos-universal: | |
# use old macos due to https://github.com/actions/setup-python/issues/852 | |
runs-on: macos-13 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.PYTHON_VERSION }} | |
architecture: x64 | |
- name: "Build wheels - universal2" | |
uses: PyO3/maturin-action@v1 | |
env: | |
# instruct old llvm to support libc++ | |
CXXFLAGS: "-stdlib=libc++" | |
with: | |
args: --release --target universal2-apple-darwin --out dist | |
- name: "Test wheel - universal2" | |
run: | | |
pip install dist/${{ env.PACKAGE_NAME }}-*universal2.whl --force-reinstall | |
sg --help | |
- name: "Upload wheels" | |
uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
path: dist | |
windows: | |
runs-on: windows-latest | |
strategy: | |
matrix: | |
platform: | |
- target: x86_64-pc-windows-msvc | |
arch: x64 | |
- target: i686-pc-windows-msvc | |
arch: x86 | |
- target: aarch64-pc-windows-msvc | |
arch: x64 | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.PYTHON_VERSION }} | |
architecture: ${{ matrix.platform.arch }} | |
- name: "Build wheels" | |
uses: PyO3/maturin-action@v1 | |
with: | |
target: ${{ matrix.platform.target }} | |
args: --release --out dist | |
- name: "Test wheel" | |
if: ${{ !startsWith(matrix.platform.target, 'aarch64') }} | |
shell: bash | |
run: | | |
python -m pip install dist/${{ env.PACKAGE_NAME }}-*.whl --force-reinstall | |
sg --help | |
- name: "Upload wheels" | |
uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
path: dist | |
linux: | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: | |
target: | |
- x86_64-unknown-linux-gnu | |
- aarch64-unknown-linux-gnu | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/setup-python@v5 | |
with: | |
python-version: ${{ env.PYTHON_VERSION }} | |
architecture: x64 | |
- name: "Build wheels" | |
uses: PyO3/maturin-action@v1 | |
env: | |
CFLAGS: "-std=c11" | |
CXXFLAGS: "-std=c++11" | |
with: | |
target: ${{ matrix.target }} | |
manylinux: auto | |
args: --release --out dist | |
- name: "Test wheel" | |
if: ${{ startsWith(matrix.target, 'x86_64') }} | |
run: | | |
pip install dist/${{ env.PACKAGE_NAME }}-*.whl --force-reinstall | |
sg --help | |
- name: "Upload wheels" | |
uses: actions/upload-artifact@v3 | |
with: | |
name: wheels | |
path: dist | |
upload-release: | |
name: Upload to PyPI | |
runs-on: ubuntu-latest | |
needs: | |
- macos-universal | |
- macos-x86_64 | |
- windows | |
- linux | |
# - linux-cross I would want to support linux-cross but it is too hard for me to compile c projects for tree-sitter-languages | |
# If you don't set release flag, it's a dry run (no uploads). | |
if: "startsWith(github.event.ref, 'refs/tags') || inputs.need_release" | |
environment: | |
name: release | |
permissions: | |
# For pypi trusted publishing | |
id-token: write | |
steps: | |
- uses: actions/download-artifact@v3 | |
with: | |
name: wheels | |
path: wheels | |
- name: Publish to PyPi | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
skip-existing: true | |
packages-dir: wheels | |
verbose: true |