Sc/hier shrinkage #295
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: Python package | |
on: | |
workflow_dispatch: | |
push: | |
paths: | |
- "Python/**" | |
- "src/**" | |
- ".github/workflows/python.yaml" | |
branches: | |
- master | |
tags: | |
- "[0-9]+.[0-9]+.[0-9]+" | |
- "[0-9]+.[0-9]+.[0-9]+-rc[1-9]+" | |
- "[0-9]+.[0-9]+.[0-9]+rc[1-9]+" | |
- "[0-9]+.[0-9]+.[0-9]+-b[1-9]+" | |
- "[0-9]+.[0-9]+.[0-9]+b[1-9]+" | |
pull_request: | |
paths: | |
- "Python/**" | |
- "src/**" | |
- ".github/workflows/python.yaml" | |
jobs: | |
build_sdist: | |
name: sdist build | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Set up Python 3.9 | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.9 | |
cache: pip | |
cache-dependency-path: Python/ci-requirements.txt | |
- name: Install CI dependencies | |
working-directory: Python/ | |
run: pip install -r ci-requirements.txt | |
- name: flake8 | |
working-directory: Python/ | |
run: | | |
python3 -m flake8 | |
- name: bandit | |
working-directory: Python/ | |
run: | | |
python3 -m bandit -r . | |
- name: isort | |
working-directory: Python/ | |
run: | | |
python3 -m isort . --diff --check --color | |
- name: black | |
working-directory: Python/ | |
run: | | |
python3 -m black . --check --diff --exclude extension | |
- name: Build | |
working-directory: Python/ | |
run: | | |
python -m build --sdist | |
# Ensure exactly one artifact was produced. | |
[[ $(shopt -s nullglob; ls dist/*.tar.gz | wc -w) == 1 ]] || { | |
echo "Unexpected content in dist dir: '$(ls dist/*.tar.gz)'." | |
exit 1 | |
} | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: sdist | |
path: Python/dist/*.tar.gz | |
build_linux_wheels: | |
name: linux wheels build | |
runs-on: ubuntu-latest | |
permissions: | |
packages: read | |
pull-requests: write | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Log in to the Container registry | |
uses: docker/login-action@v2 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build wheels | |
uses: pypa/[email protected] | |
env: | |
CIBW_ARCHS: x86_64 | |
CIBW_MANYLINUX_X86_64_IMAGE: ghcr.io/forestry-labs/rforestry/python_build_env:latest | |
CIBW_BUILD: cp38-manylinux* cp39-manylinux* cp310-manylinux* cp311-manylinux* | |
CIBW_TEST_EXTRAS: test | |
CIBW_TEST_COMMAND: pytest /project/Python/tests --cov-report xml:/host/coverage.xml | |
with: | |
package-dir: Python/ | |
output-dir: Python/dist | |
- name: Get Coverage | |
if: github.event_name == 'pull_request' | |
uses: petrovicboban/[email protected] | |
with: | |
coverageFile: /coverage.xml | |
thresholdAll: 0.60 | |
thresholdModified: 0.60 | |
thresholdNew: 0.60 | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: linux_wheels | |
path: Python/dist/*.whl | |
build_macos_wheels: | |
name: macos wheels build for ${{ matrix.config.arch }} | |
runs-on: macos-11 | |
permissions: | |
packages: read | |
strategy: | |
fail-fast: false | |
matrix: | |
config: | |
- { arch: x86_64 } | |
- { arch: arm64 } | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
submodules: recursive | |
- name: Build wheels | |
uses: pypa/[email protected] | |
env: | |
CIBW_ARCHS: ${{ matrix.config.arch }} | |
CIBW_BUILD: cp38-* cp39-* cp310-* cp311-* | |
CIBW_TEST_EXTRAS: test | |
CIBW_TEST_COMMAND: pytest work/Rforestry/Rforestry/Python/tests -v --color=yes | |
with: | |
package-dir: Python/ | |
output-dir: Python/dist | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: macos_${{ matrix.config.arch }}_wheels | |
path: Python/dist/*.whl | |
release: | |
needs: [build_sdist, build_linux_wheels, build_macos_wheels] | |
if: github.event_name == 'push' && github.ref_type == 'tag' | |
runs-on: ubuntu-22.04 | |
permissions: | |
contents: write | |
steps: | |
- uses: actions/download-artifact@v3 | |
with: | |
name: sdist | |
path: packages | |
- uses: actions/download-artifact@v3 | |
with: | |
name: linux_wheels | |
path: packages | |
- uses: actions/download-artifact@v3 | |
with: | |
name: macos_x86_64_wheels | |
path: packages | |
- uses: actions/download-artifact@v3 | |
with: | |
name: macos_arm64_wheels | |
path: packages | |
- name: List | |
run: | | |
ls -alh packages | |
- name: Extract Tag | |
id: tag | |
uses: aaronbarnaby/[email protected] | |
- name: Parse tag | |
id: version | |
uses: akshens/semver-tag@v4 | |
with: | |
version: ${{ steps.tag.outputs.tag }} | |
- name: Publish prerelease packages to Test PyPI | |
if: steps.version.outputs.is-prerelease == 'true' | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
password: ${{ secrets.TEST_PYPI_API_TOKEN }} | |
packages-dir: packages/ | |
repository-url: https://test.pypi.org/legacy/ | |
- name: Publish packages to PyPI | |
if: steps.version.outputs.is-prerelease == 'false' | |
uses: pypa/gh-action-pypi-publish@release/v1 | |
with: | |
password: ${{ secrets.PYPI_API_TOKEN }} | |
packages-dir: packages/ | |
- name: Create Release | |
uses: softprops/action-gh-release@v1 | |
with: | |
generate_release_notes: true | |
files: | | |
packages/* | |