Skip to content

New deployment

New deployment #170

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.9, '3.10', '3.11', '3.12' ]
steps:
- name: Checkout Repository
uses: actions/checkout@v4
# - name: Setup Python ${{ matrix.python-version }}
# uses: actions/setup-python@v4
# 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@v4
# 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.10' && 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@v4
- name: Setup Python 3.10
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Package source distribution
run: |
python -m pip install --upgrade pip
pip install -r build-requirements.txt
python setup.py sdist
- name: List items
run: |
echo "Listing dist directory"
ls -R dist
- name: Place distribution in artifacts folder
uses: actions/upload-artifact@v4
with:
name: bdist
path: dist/*.tar.gz
if-no-files-found: error
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@v4
- name: Setup Python 3.10
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Build BDist Package
env:
# specify python environments. Skip 32-bit builds
CIBW_BUILD: cp39-* cp310-* cp311-* cp312-*
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: List items
run: |
echo "Listing dist directory"
ls -R dist
- name: Place wheels in artifacts folder
uses: actions/upload-artifact@v4
with:
name: whl-${{ matrix.os }}
path: dist/*.whl
if-no-files-found: error
# the following step ensures that the package is usable 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.9, '3.10', '3.11', '3.12' ]
ext: [ tar.gz, whl ]
# ext: [ tar.gz ]
steps:
- name: Setup Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Retrieve packages
uses: actions/download-artifact@v4
with:
path: dist
- name: List items
run: |
echo "Listing current directory"
ls -R
- name: Test Package Installation
run: |
pip${{ matrix.python-version }} 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')
filename="copulae-*${version}*${os}*.whl"
else
# Following packages are needed to install copulae from source
pip${{ matrix.python-version }} install numpy wheel cython scipy
filename="copulae-*.tar.gz"
fi;
echo "Looking for file ${filename}"
file=$(find dist -name "${filename}" -type f);
pip${{ matrix.python-version }} list
python${{ matrix.python-version }} -m pip show numpy
echo "Running pip${{ matrix.python-version }} install --user ${file}"
pip${{ matrix.python-version }} install ${file}
# if we can import this, all should be gucci
python${{ matrix.python-version }} -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.10
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Retrieve packages
uses: actions/download-artifact@v4
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/*