Skip to content

New deployment

New deployment #145

name: Test, Build and Deploy
on:
push:
branches:
- master
pull_request:
branches:
- master
release:
types: [ published ]
defaults:
run:
shell: bash
jobs:
test:
name: Test Package
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ ubuntu-latest, windows-latest, macos-latest ]
python-version: [ 3.8, 3.9, '3.10', '3.11' ]
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Get pip cache dir
id: pip-cache
run: |
echo "::set-output name=dir::$(pip cache dir)"
- name: pip cache
uses: actions/cache@v2
with:
path: ${{ steps.pip-cache.outputs.dir }}
key: ${{ runner.os }}-pip-${{ hashFiles('build-requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
- name: Install dependencies
if: steps.pip-cache.outputs.cache-hit != 'true'
run: |
python -m pip install --upgrade pip
pip install -r build-requirements.txt
- name: Build Extensions
run: python setup.py build_ext --inplace
- name: Test package
run: python -m pytest tests/
- name: Coveralls
if: matrix.python-version == '3.8' && matrix.os == 'ubuntu-latest' && startsWith(github.ref, 'refs/tags/')
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
pip install wheel coveralls
coveralls --service=github
build-src:
name: Build SDist (Source)
needs: test
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Setup Python 3.8
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Package source distribution
run: |
python -m pip install --upgrade pip
pip install -r build-requirements.txt
python setup.py sdist
- name: Place distribution in artifacts folder
uses: actions/upload-artifact@v2
with:
path: ./dist/*.tar.gz
build-wheel:
name: Build wheels
needs: test
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ ubuntu-latest, macos-latest, windows-latest ]
steps:
- name: Checkout Repository
uses: actions/checkout@v2
- name: Setup Python 3.8
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Build BDist Package
env:
# specify python environments. Skip 32-bit builds
CIBW_BUILD: cp38-* cp39-* cp310-* cp311-*
CIBW_SKIP: "*-win32 *-manylinux_i686 *-musllinux_*"
# install dependencies, these are the minimum dependencies for building the wheels
CIBW_BEFORE_BUILD: pip install numpy cython scipy
CIBW_MANYLINUX_X86_64_IMAGE: manylinux2014
run: |
python -m pip install --upgrade pip
pip install cibuildwheel
python -m cibuildwheel --output-dir dist
- name: Place wheels in artifacts folder
uses: actions/upload-artifact@v2
with:
path: ./dist/*.whl
# the following step ensures that the package is useable after installing the source files/wheels
# by running a mock import of copulae
install-package:
name: Test package installation
needs: [ build-src, build-wheel ]
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ ubuntu-latest, macos-latest, windows-latest ]
python-version: [ 3.8, 3.9, '3.10', '3.11' ]
ext: [ tar.gz, whl ]
steps:
- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Retrieve packages
uses: actions/download-artifact@v2
with:
path: dist
- name: Test Package Installation
run: |
python -m pip install --upgrade pip
# finds path to the right wheel or source file to install later
if [[ "${{ matrix.ext }}" == "whl" ]]; then
os=$(echo ${{ runner.os }} | awk '{print tolower($0)}' | head -c3)
version=$(echo ${{ matrix.python-version }} | sed 's/\.//g')
file=$(find dist -name "copulae-*${version}*${os}*.whl" -type f);
else
# Following packages are needed to install copulae from source
pip install numpy scipy cython
file=$(find dist -name "copulae-*.tar.gz" -type f);
fi;
pip install ${file}
# if we can import this, all should be gucci
python -c "import copulae"
deploy:
name: deploy packages
runs-on: ubuntu-latest
needs: install-package
if: startsWith(github.ref, 'refs/tags/')
steps:
- name: Setup Python 3.8
uses: actions/setup-python@v2
with:
python-version: 3.8
- name: Retrieve packages
uses: actions/download-artifact@v2
with:
name: artifact
path: dist
- name: Install twine
run: pip install twine
- name: Upload packages to testpypi
env:
TWINE_USERNAME: ${{ secrets.PYPI_TEST_UID }}
TWINE_PASSWORD: ${{ secrets.PYPI_TEST_PWD }}
run: python -m twine upload --skip-existing --repository testpypi dist/*
- name: Upload packages to pypi
env:
TWINE_USERNAME: ${{ secrets.PYPI_UID }}
TWINE_PASSWORD: ${{ secrets.PYPI_PWD }}
run: python -m twine upload --skip-existing dist/*