Skip to content

Allow TSMs to start upstream if enabled. #256

Allow TSMs to start upstream if enabled.

Allow TSMs to start upstream if enabled. #256

Workflow file for this run

name: Build (and publish) python wheels
on:
push:
workflow_dispatch:
permissions:
contents: read
jobs:
check_skip:
runs-on: ubuntu-latest
outputs:
skip: ${{ steps.check_skip.outputs.skip }}
steps:
- name: Checkout pushed code
uses: actions/checkout@v4
- name: Check if workflow should be skipped
id: check_skip
run: |
git fetch --tags
TAG=$(git tag -l 'py_lib_tsalign-v*' | sort -V | tail -n 1 || true)
if [ -z "$TAG" ]; then
echo "No matching release tag found."
echo "skip=true" >> $GITHUB_OUTPUT
else
TAG_COMMIT=$(git rev-list -n 1 "$TAG")
echo "Latest tag: $TAG at commit $TAG_COMMIT"
CURRENT_COMMIT=$(git rev-parse HEAD)
echo "Current commit: $CURRENT_COMMIT"
if [ "$TAG_COMMIT" = "$CURRENT_COMMIT" ]; then
echo "This is a release tag, continuing."
echo "skip=false" >> $GITHUB_OUTPUT
else
echo "Not a release tag, skipping."
echo "skip=true" >> $GITHUB_OUTPUT
fi
fi
linux:
runs-on: ${{ matrix.platform.runner }}
needs: check_skip
if: ${{ needs.check_skip.outputs.skip != 'true' }}
strategy:
matrix:
platform:
- runner: ubuntu-22.04
target: x86_64
- runner: ubuntu-22.04
target: aarch64
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: 3.x
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
working-directory: python_bindings
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
manylinux: auto
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-linux-${{ matrix.platform.target }}
path: python_bindings/dist
windows:
runs-on: ${{ matrix.platform.runner }}
needs: check_skip
if: ${{ needs.check_skip.outputs.skip != 'true' }}
strategy:
matrix:
platform:
- runner: windows-latest
target: x64
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: 3.x
architecture: ${{ matrix.platform.target }}
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
working-directory: python_bindings
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-windows-${{ matrix.platform.target }}
path: python_bindings/dist
macos:
runs-on: ${{ matrix.platform.runner }}
needs: check_skip
if: ${{ needs.check_skip.outputs.skip != 'true' }}
strategy:
matrix:
platform:
- runner: macos-latest
target: x86_64
- runner: macos-latest
target: aarch64
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: 3.x
- name: Build wheels
uses: PyO3/maturin-action@v1
with:
working-directory: python_bindings
target: ${{ matrix.platform.target }}
args: --release --out dist --find-interpreter
sccache: ${{ !startsWith(github.ref, 'refs/tags/') }}
- name: Upload wheels
uses: actions/upload-artifact@v4
with:
name: wheels-macos-${{ matrix.platform.target }}
path: python_bindings/dist
sources:
runs-on: ubuntu-latest
needs: check_skip
if: ${{ needs.check_skip.outputs.skip != 'true' }}
steps:
- uses: actions/checkout@v4
- name: Build sdist
uses: PyO3/maturin-action@v1
with:
working-directory: python_bindings
command: sdist
args: --out dist
- name: Upload sdist
uses: actions/upload-artifact@v4
with:
name: wheels-sdist
path: python_bindings/dist
release:
name: Release
needs: [check_skip, linux, windows, macos, sources]
if: ${{ needs.check_skip.outputs.skip == 'false' }}
runs-on: ubuntu-latest
permissions:
id-token: write
contents: write
attestations: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Check Versions
id: versions
shell: bash
run: |
git fetch --tags
TAG=$(git tag -l 'py_lib_tsalign-v*' | sort -V | tail -n 1)
tag_version="${TAG#*-v}"
echo "Tag is $TAG with version $tag_version"
cargo_version=$(grep '^version' python_bindings/Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/')
echo "Cargo.toml version is $cargo_version"
if [ "$cargo_version" != "$tag_version" ]; then
echo "Versions mismatch: tag specifies $tag_version, but crate has version $cargo_version"
exit 1
fi
- name: Get artifacts
uses: actions/download-artifact@v4
- name: Generate artifact attestation
uses: actions/attest-build-provenance@v2
with:
subject-path: 'wheels-*/*'
- name: Publish to PyPI
env:
TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
run: |
pip install twine
twine upload \
--non-interactive \
--username __token__ \
--repository pypi \
wheels-*/*