New deployment #172
Workflow file for this run
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: 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: [ 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: | |
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/* |