Skip to content
Snippets Groups Projects
package.yml 7.90 KiB
name: Package

on:
  push:
    tags:
      - v*.*.*

jobs:

  wheel-linux-aarch64:
    name: Build Linux wheels (Aarch64)
    runs-on: ubuntu-20.04
    strategy:
      matrix:
        python-tag:
        - cp36-manylinux_aarch64
        - cp37-manylinux_aarch64
        - cp38-manylinux_aarch64
        - cp39-manylinux_aarch64
        - cp310-manylinux_aarch64
        - cp311-manylinux_aarch64
        - cp312-manylinux_aarch64
        # - pp37-manylinux_aarch64
        # - pp38-manylinux_aarch64
        # - pp39-manylinux_aarch64
        # - pp310-manylinux_aarch64
    steps:
    - uses: actions/checkout@v3
      with:
        submodules: true
    - name: Set up QEMU
      id: qemu
      uses: docker/setup-qemu-action@v3
      with:
        platforms: arm64
    - name: Build manylinux wheels
      uses: pypa/cibuildwheel@v2.16.5
      env:
        CIBW_ARCHS: aarch64
        CIBW_BUILD: ${{ matrix.python-tag }}
        CIBW_BEFORE_BUILD: pip install cython
        CIBW_BUILD_VERBOSITY: 2
        CIBW_TEST_COMMAND: python -m unittest pyhmmer.tests -vv
        CIBW_TEST_REQUIRES: importlib-resources
      with:
        output-dir: dist
    - uses: actions/upload-artifact@v4
      with:
        name: wheels-${{ matrix.python-tag }}
        path: dist/*

  wheel-linux-x86_64:
    name: Build Linux wheels (x86-64)
    runs-on: ubuntu-20.04
    strategy:
      matrix:
        python-tag:
        - cp36-manylinux_x86_64
        - cp37-manylinux_x86_64
        - cp38-manylinux_x86_64
        - cp39-manylinux_x86_64
        - cp310-manylinux_x86_64
        - cp311-manylinux_x86_64
        - cp312-manylinux_x86_64
        # - pp37-manylinux_x86_64
        # - pp38-manylinux_x86_64
        # - pp39-manylinux_x86_64
        # - pp310-manylinux_x86_64
    steps:
    - uses: actions/checkout@v4
      with:
        submodules: true
    - name: Build manylinux wheels
      uses: pypa/cibuildwheel@v2.16.5
      env:
        CIBW_ARCHS: x86_64
        CIBW_BUILD: ${{ matrix.python-tag }}
        CIBW_BEFORE_BUILD: pip install cython
        CIBW_BUILD_VERBOSITY: 2
        CIBW_TEST_COMMAND: python -m unittest pyhmmer.tests -vv
        CIBW_TEST_REQUIRES: importlib-resources
      with:
        output-dir: dist
    - uses: actions/upload-artifact@v4
      with:
        name: wheels-${{ matrix.python-tag }}
        path: dist/*

  wheel-macos-x86_64:
    name: Build MacOS wheels (x86-64)
    runs-on: macOS-11
    strategy:
      matrix:
        python-tag:
        - cp36-macosx_x86_64
        - cp37-macosx_x86_64
        - cp38-macosx_x86_64
        - cp39-macosx_x86_64
        - cp310-macosx_x86_64
        - cp311-macosx_x86_64
        - cp312-macosx_x86_64
        # - pp37-macosx_x86_64
        # - pp38-macosx_x86_64
        # - pp39-macosx_x86_64
        # - pp310-macosx_x86_64
    steps:
    - uses: actions/checkout@v4
      with:
        submodules: true
    - name: Build manylinux wheels
      uses: pypa/cibuildwheel@v2.16.5
      env:
        CIBW_ARCHS: x86_64
        CIBW_BUILD: ${{ matrix.python-tag }}
        CIBW_BEFORE_BUILD: pip install cython
        CIBW_BUILD_VERBOSITY: 2
        CIBW_TEST_COMMAND: python -m unittest pyhmmer.tests -vv
        CIBW_TEST_REQUIRES: importlib-resources
      with:
        output-dir: dist
    - uses: actions/upload-artifact@v4
      with:
        name: wheels-${{ matrix.python-tag }}
        path: dist/*

  wheel-macos-aarch64:
    name: Build MacOS wheels (Aarch64)
    runs-on: macOS-11
    strategy:
      matrix:
        python-tag:
        - cp38-macosx_arm64
        - cp39-macosx_arm64
        - cp310-macosx_arm64
        - cp311-macosx_arm64
        - cp312-macosx_arm64
    steps:
    - uses: actions/checkout@v4
      with:
        submodules: true
    - name: Build manylinux wheels
      uses: pypa/cibuildwheel@v2.16.5
      env:
        CIBW_ARCHS: arm64
        CIBW_BUILD: ${{ matrix.python-tag }}
        CIBW_BEFORE_BUILD: pip install cython
        CIBW_BUILD_VERBOSITY: 2
        CIBW_TEST_COMMAND: python -m unittest pyhmmer.tests -vv
        CIBW_TEST_REQUIRES: importlib-resources
      with:
        output-dir: dist
    - uses: actions/upload-artifact@v4
      with:
        name: wheels-${{ matrix.python-tag }}
        path: dist/*

  sdist:
    runs-on: ubuntu-latest
    name: Build source distribution
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
      with:
        submodules: true
    - name: Set up Python 3.11
      uses: actions/setup-python@v5
      with:
        python-version: 3.11
    - name: Install build requirements
      run: python -m pip install -r .github/workflows/requirements.txt
    - name: Build wheel distribution
      run: python setup.py sdist
    - name: Store built wheels
      uses: actions/upload-artifact@v4
      with:
        name: sdist
        path: dist/*

  test-sdist:
    runs-on: ubuntu-latest
    name: Test source distribution
    needs:
    - sdist
    steps:
    - name: Setup Python 3.11
      uses: actions/setup-python@v5
      with:
        python-version: '3.11'
    - name: Download source distribution
      uses: actions/download-artifact@v4
      with:
        name: sdist
        path: dist/
    - name: Update pip to latest version
      run: python -m pip install -U pip setuptools wheel
    - name: Install built wheel
      run: python -m pip install --no-binary pyhmmer --find-links=dist pyhmmer
    - name: Run tests without coverage
      run: python -m unittest pyhmmer.tests -vv

  upload:
    environment: PyPI
    runs-on: ubuntu-latest
    name: Upload
    permissions:
      id-token: write
    needs:
    - sdist
    - test-sdist
    - wheel-linux-aarch64
    - wheel-linux-x86_64
    - wheel-macos-x86_64
    - wheel-macos-aarch64
    steps:
    - name: Download source distribution
      uses: actions/download-artifact@v4
      with:
        name: sdist
        path: dist/
        merge-multiple: true
    - name: Download wheel distributions
      uses: actions/download-artifact@v4
      with:
        pattern: wheels-*
        path: dist/
        merge-multiple: true
    - name: Publish distributions to PyPI
      if: startsWith(github.ref, 'refs/tags/v')
      uses: pypa/gh-action-pypi-publish@release/v1

  release:
    environment: GitHub Releases
    runs-on: ubuntu-latest
    if: "startsWith(github.ref, 'refs/tags/v')"
    name: Release
    needs: upload
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
    - name: Release a Changelog
      uses: rasmus-saks/release-a-changelog-action@v1.0.1
      with:
        github-token: '${{ secrets.GITHUB_TOKEN }}'

  aur:
    environment: Arch Linux User Repository
    runs-on: ubuntu-latest
    if: "!contains(github.ref, 'rc') && !contains(github.ref, 'alpha') && !contains(github.ref, 'post')"
    name: Update AUR package
    needs:
    - sdist
    - upload
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
      with:
        submodules: true
    - name: Set up Python 3.10
      uses: actions/setup-python@v5
      with:
        python-version: '3.10'
    - name: Download source distribution
      uses: actions/download-artifact@v4
      with:
        name: sdist
        path: dist/
        merge-multiple: true
    - name: Extract package version
      run: "echo PKGVER=$(python setup.py --version) >> $GITHUB_ENV"
    - name: Compute SHA256 of source distribution
      run: "echo SHA256=$(sha256sum dist/pyhmmer-${{ env.PKGVER }}.tar.gz | cut -f1 -d' ') >> $GITHUB_ENV"
    - name: Generate PKGBUILD
      run: 'sed -e "s/%pkgver/${{ env.PKGVER }}/g" -e "s/%sha256sum/${{ env.SHA256 }}/g" pkg/aur/PKGBUILD.in > pkg/aur/PKGBUILD'
    - name: Update package
      uses: KSXGitHub/github-actions-deploy-aur@v2.2.5
      with:
        pkgname: python-pyhmmer
        pkgbuild: pkg/aur/PKGBUILD
        commit_username: ${{ secrets.AUR_USER }}
        commit_email: ${{ secrets.AUR_EMAIL }}
        ssh_private_key: ${{ secrets.AUR_SSH_PRIVATE_KEY }}
        commit_message: ${{ github.event.head_commit.message }}
        ssh_keyscan_types: rsa,dsa,ecdsa,ed25519