Skip to content

New deployment

New deployment #186

name: Test, Build and Deploy
on:
push:
branches:
- master
pull_request:
branches:
- master
release:
types: [ published ]
defaults:
run:
shell: bash
jobs:
test-code:
name: Test Code
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-code
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-code
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: [ whl ]
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 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 install numpy wheel cython scipy
# filename="copulae-*.tar.gz"
# fi;
#
# echo "Looking for file ${filename}"
# file=$(find dist -name "${filename}" -type f);
#
# pip list
# pip install ${file}
#
# # if we can import this, all should be gucci
# python -c "import copulae"
deploy-test:
name: Deploy packages to TestPyPI
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: Install twine
run: pip install twine
- name: Checkout utilities
uses: actions/checkout@v4
with:
sparse-checkout: |
.github/utils
sparse-checkout-cone-mode: false
- name: Retrieve packages
uses: actions/download-artifact@v4
with:
path: dist
- name: Find and copy packages to files/
run: |
mkdir files
ls -ltR
python .github/utils/find.py -from dist -to files -pattern "(.tar.gz|.whl)$"
- name: Upload packages to testpypi
env:
TWINE_USERNAME: ${{ secrets.PYPI_TEST_TOKEN_NAME }}
TWINE_PASSWORD: ${{ secrets.PYPI_TEST_API_TOKEN }}
run: python -m twine upload --skip-existing --repository testpypi files/* --verbose
deploy:
name: Deploy packages to PyPI
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: Install twine
run: pip install twine
- name: Checkout utilities
uses: actions/checkout@v4
with:
sparse-checkout: |
.github/utils
sparse-checkout-cone-mode: false
- name: Retrieve packages
uses: actions/download-artifact@v4
with:
path: dist
- name: Find and copy packages to files/
run: |
mkdir files
ls -ltR
python .github/utils/find.py -from dist -to files -pattern "(.tar.gz|.whl)$"
- name: Upload packages to pypi
env:
TWINE_USERNAME: ${{ secrets.PYPI_UID }}
TWINE_PASSWORD: ${{ secrets.PYPI_PWD }}
run: python -m twine upload --skip-existing dist/* --verbose