diff --git a/.circleci/config.yml b/.circleci/config.yml new file mode 100644 index 0000000..fdcc1c6 --- /dev/null +++ b/.circleci/config.yml @@ -0,0 +1,176 @@ +version: 2 + +references: + + ci_steps: &ci_steps + steps: + - checkout + - run: + name: Run CI + command: | + # + # Set UPLOAD_SDIST environment variable + # + export UPLOAD_SDIST=$(echo ${CIRCLE_JOB} | cut -d"_" -f3) + echo "UPLOAD_SDIST [${UPLOAD_SDIST}]" + # + # Run CI + # + export MANYLINUX_PYTHON=$(echo ${CIRCLE_JOB} | cut -d"_" -f2) + echo "MANYLINUX_PYTHON [${MANYLINUX_PYTHON}]" + /opt/python/${MANYLINUX_PYTHON}/bin/pip install scikit-ci + /opt/python/${MANYLINUX_PYTHON}/bin/ci + - persist_to_workspace: + root: ./ + paths: + - dist + + x64_build_job: &x64_build_job + working_directory: /work + docker: + - image: dockcross/manylinux-x64 + <<: *ci_steps + + x86_build_job: &x86_build_job + working_directory: /work + docker: + - image: dockcross/manylinux-x86 + <<: *ci_steps + + no_filters: &no_filters + filters: + tags: + only: /.*/ + +jobs: + + # x64 + manylinux-x64_cp27-cp27m: + <<: *x64_build_job + manylinux-x64_cp27-cp27mu: + <<: *x64_build_job + manylinux-x64_cp34-cp34m: + <<: *x64_build_job + manylinux-x64_cp35-cp35m: + <<: *x64_build_job + manylinux-x64_cp36-cp36m: + <<: *x64_build_job + manylinux-x64_cp37-cp37m_upload-sdist: + <<: *x64_build_job + + # x86 + manylinux-x86_cp27-cp27m: + <<: *x86_build_job + manylinux-x86_cp27-cp27mu: + <<: *x86_build_job + manylinux-x86_cp34-cp34m: + <<: *x86_build_job + manylinux-x86_cp35-cp35m: + <<: *x86_build_job + manylinux-x86_cp36-cp36m: + <<: *x86_build_job + manylinux-x86_cp37-cp37m: + <<: *x86_build_job + + deploy-master: + docker: + - image: circleci/python:3.7.0-stretch + steps: + - attach_workspace: + at: ./ + - run: + name: Deploy master + command: | + echo "Deploy master" + python -m venv ../venv + . ../venv/bin/activate + pip install scikit-ci-addons + ls dist + ci_addons publish_github_release ${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME} \ + --prerelease-sha "master-with-ci" \ + --prerelease-packages "dist/*.whl" "dist/*.tar.gz" --re-upload + + deploy-release: + docker: + - image: circleci/python:3.7.0-stretch + steps: + - attach_workspace: + at: ./ + - run: + name: Deploy release + command: | + echo "Deploy release" + python -m venv ../venv + . ../venv/bin/activate + pip install twine + ls dist + twine upload --repository-url https://test.pypi.org/legacy/ dist/* + +workflows: + version: 2 + build-test-deploy: + jobs: + - manylinux-x64_cp27-cp27m: + <<: *no_filters + - manylinux-x64_cp27-cp27mu: + <<: *no_filters + - manylinux-x64_cp34-cp34m: + <<: *no_filters + - manylinux-x64_cp35-cp35m: + <<: *no_filters + - manylinux-x64_cp36-cp36m: + <<: *no_filters + - manylinux-x64_cp37-cp37m_upload-sdist: + <<: *no_filters + - manylinux-x86_cp27-cp27m: + <<: *no_filters + - manylinux-x86_cp27-cp27mu: + <<: *no_filters + - manylinux-x86_cp34-cp34m: + <<: *no_filters + - manylinux-x86_cp35-cp35m: + <<: *no_filters + - manylinux-x86_cp36-cp36m: + <<: *no_filters + - manylinux-x86_cp37-cp37m: + <<: *no_filters + - deploy-master: + requires: + # x64 + - manylinux-x64_cp27-cp27m + - manylinux-x64_cp27-cp27mu + - manylinux-x64_cp34-cp34m + - manylinux-x64_cp35-cp35m + - manylinux-x64_cp36-cp36m + - manylinux-x64_cp37-cp37m_upload-sdist + # x86 + - manylinux-x86_cp27-cp27m + - manylinux-x86_cp27-cp27mu + - manylinux-x86_cp34-cp34m + - manylinux-x86_cp35-cp35m + - manylinux-x86_cp36-cp36m + - manylinux-x86_cp37-cp37m + filters: + branches: + only: master-with-ci + - deploy-release: + requires: + # x64 + - manylinux-x64_cp27-cp27m + - manylinux-x64_cp27-cp27mu + - manylinux-x64_cp34-cp34m + - manylinux-x64_cp35-cp35m + - manylinux-x64_cp36-cp36m + - manylinux-x64_cp37-cp37m_upload-sdist + # x86 + - manylinux-x86_cp27-cp27m + - manylinux-x86_cp27-cp27mu + - manylinux-x86_cp34-cp34m + - manylinux-x86_cp35-cp35m + - manylinux-x86_cp36-cp36m + - manylinux-x86_cp37-cp37m + filters: + tags: + only: /^v[0-9]+(\.[0-9]+)*/ + branches: + ignore: /.*/ diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..89d3879 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,82 @@ + +branches: + only: + - master-with-ci + +language: python + +matrix: + include: + + - os: osx + language: generic + env: + - PYTHON_VERSION=3.7.0 + + - os: osx + language: generic + env: + - PYTHON_VERSION=3.6.5 + + - os: osx + language: generic + env: + - PYTHON_VERSION=3.5.5 + + - os: osx + language: generic + env: + - PYTHON_VERSION=3.4.8 + + - os: osx + language: generic + env: + - PYTHON_VERSION=2.7.15 + +cache: + directories: + - $HOME/.pyenv/versions/3.7.0 + - $HOME/.pyenv/versions/3.6.5 + - $HOME/.pyenv/versions/3.5.5 + - $HOME/.pyenv/versions/3.4.8 + - $HOME/.pyenv/versions/2.7.15 + - $HOME/downloads + +before_install: + - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then mkdir $HOME/bin; ln -s $(which pip2) $HOME/bin/pip; fi + - pip install -U scikit-ci scikit-ci-addons + - ci_addons --install ../addons + +install: + - ci install + +script: + - ci test + +after_success: + - ci after_test + +deploy: + # deploy-release + - provider: script + script: pwd && ls dist;echo "deploy-release" && pip install twine && twine upload --repository-url https://test.pypi.org/legacy/ dist/* + skip_cleanup: true + on: + repo: ${TRAVIS_REPO_SLUG} + tags: true + # deploy-master + - provider: script + script: pwd && ls dist;echo "deploy-master" && ci_addons publish_github_release ${TRAVIS_REPO_SLUG} --prerelease-sha "master-with-ci" --prerelease-packages "dist/*.whl" --re-upload + skip_cleanup: true + on: + repo: ${TRAVIS_REPO_SLUG} + branch: master-with-ci + +env: + global: + # GITHUB_TOKEN + - secure: "YGbQpqZvUBh1zW8i876Xce6o+neH6JO4epjOCsVIa+9bWVSZD59woH/iyn6mXy9Y3fPqwuAerVjR+Ch6ETxAwZM+PBO+MY8O6JXZtvV1GpJkZOOE4SZav8C5t4MsqqsgyU4EsQSefg+R3CM2z6k8G1NrtLb6t/tLrfVLphesbXGj7AxeJz4UQfiIQa9JQBB12rYByjnOJzloVV+V3FW2VKOe6k8KUky9FRSxUKiQQQHRbunEufyucFjRtE39gbsvC47NlIZ0YfQrhQsSmcOJXUCh9dFttz6x/QTIeBvALZ4PJuz8Vu25b3azCaQVNOP46uGyjk0V5BVLaBQA7DxGMlnKXPkP+gtzTvvKN9CkmCOPg2u0A0xc2R1PVbw+mrBHX02ZtnmG9HpaanqKXzoeQwmAPLx81dehBY+dQYbWUDgCGdis7+5hzqlwM+I5XhuMFM8dfQ4fN9j9QiygJpn0cuCchf22KBosUousAQlMlzvVimIoU1FG5NQsfW/tGzBrXz2x3aQg6xgIxH0/vOd49Y3yllzoFklTE2eC9paVNsBcM9gOLpdCtO/lHJbv2EX4gQZLal/Ic+1UPwGTi3L3HkbTkK7/7TU+oFSr4qTeHteEPumnbskXo3v6qMJ6gcd3D0bmZdWzikTh4n88AcGnrqOIVozUmk7tZWgQgQdhCxY=" + # PYPI_USER + - secure: "PB/PL0INcMiFDRRQAbmNdrNqXGSHM3fg2eeblXqlHEkk+vPO7DftXoPh7Uc+NT+pVBegq78F0wtAqLttYx0gnCVgzJeaiz7UvD+I1q4S9aUrrmgzNgbeuJOF0Yq7gWmdPWiFgSxs69zinl7klodL2hihGlsJuudRKZKivNqNUNsOO22divvlpIUafmysZgX8CkVNwYA9Rs53Udfq7giqm/4SoD/KziFM0sXz+TuzEPOSwyTG41IW15qsmOwmhdAMRai+y2uuV49iWfS75nDOgxSp6sVrUgHhNuxlVZMpCxF7Ta5knHdWvv7CpFT3yxqGhGPrw8tNAnjAoIV0W9XpeLmeotQweAPKFCq5Dlkv7DJQH0amC7q8PKgNDEyBJ6+UwuUSnr4p2yvUdb6zJxiC6tsAxAkx6dcKcRrvqyYIFkyFD4OHKOLx+6XHw5e043hHhIz6K8XcWxj1wC0fTkiMhyaiUqiw5YImZRRQasVzF8uN6aySv2diMD0I9rvJWJoIy+pIIP5gWwFqiF/90OBBoONFmGMNtcTmgLGu2tZU0oHAWH/NoIhUztf25RRgR6FePisSVoPFk3PPmDUvGAtsSGoUcbLU2xxFY9e5aDavYUSsU43OI506PXnnXlTq9Deh6GUNf+IpVMdoGmusBb07S9BhbV9aEDOvRvXcrPIlXpw=" + # PYPI_PASSWORD + - secure: "EJZF4WXZhbKFVytkjEnv9gqHMCr9ldDox9v+lOIMkb8pprDEbRFuyi9xEQtJCvnRs2FMoonvX0j4hwd646wwQEfKvIQvVUXTAoikLWnQac+qbR/eMeuBAjrszQ6TvwxNM0aLP6Xkn8hwq8kkiA75Rh8Hnom3zKZWbU2p3jqbUV7ep/nP4ncpDxdmYPn/bv82ZYyHVCqJ9Nz5ni30lUxcNCab8zvwQSM7ZrpJCsjM8+hnRtidWLMyykGWJ8Ga1XX6G37VNWEUR5828Hn0Ky77vFrMkITOWqpM4TvtJseAmPpWRlT+pWvXzhLRmRYfmBcW8twqocMFvX8Ryu6NMxgdUq2sy7vJJYjuxBYZWM+N457706p8IE/GT2Ev2bCwjHFmXB1vYzFV93fMo+WzzcGlUSC6Zh33QN8UWVobEtA5YVxrwY0JsTz0h4zegsS7XHbmuntS9U0gpY11Z0YWNL7CFVi74pz62QgPWChrZjkK9iriFfuAsxauHFB5DH9WRntQGepJZWCokr+qbvIokEGZqZwJKVf9h3b3xucJG/gsLkaKXw/8lbcQiw0fXm3sGI3/V1HMmZ64e1vMj7R9IsXOee+fdLKO8iXGPZXtTs4SAeUgIwEmqB1DwXV1Yo9dsa7PCREt8YFV4schRzmdyup+sAX8FXDcPOUcFv84AvASgck=" diff --git a/README.md b/README.md index f6763fa..1ed3e78 100644 --- a/README.md +++ b/README.md @@ -8,3 +8,18 @@ Build with ``` pip wheel -w dist --verbose . ``` + +## Build Status + +| Linux | macOS | Windows | +|----------------------------------------------|----------------------------------------------|----------------------------------------------| +| [![CircleCI][circleci_image]][circleci_link] | [![TravisCI][travisci_image]][travisci_link] | [![AppVeyor][appveyor_image]][appveyor_link] | + +[circleci_image]: https://circleci.com/gh/python-packaging-tutorial/hello-cpp/tree/master-with-ci.svg?style=svg +[circleci_link]: https://circleci.com/gh/python-packaging-tutorial/hello-cpp/tree/master-with-ci + +[travisci_image]: https://travis-ci.com/python-packaging-tutorial/hello-cpp.svg?branch=master-with-ci +[travisci_link]: https://travis-ci.com/python-packaging-tutorial/hello-cpp + +[appveyor_image]: https://ci.appveyor.com/api/projects/status/5720yfkd6yn4nfs3/branch/master-with-ci?svg=true +[appveyor_link]: https://ci.appveyor.com/project/python-packaging-tutorial/hello-cpp/branch/master-with-ci diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 0000000..5a88019 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,111 @@ + +branches: + only: + - master-with-ci + +version: "0.0.1.{build}" + +environment: + matrix: + + # Visual Studio (Python 2 & 3, 32 & 64 bit) + - PYTHON_DIR: "C:\\Python27" + PYTHON_VERSION: "2.7.x" + PYTHON_ARCH: "32" + BLOCK: "0" + + - PYTHON_DIR: "C:\\Python27-x64" + PYTHON_VERSION: "2.7.x" + PYTHON_ARCH: "64" + BLOCK: "0" + + - PYTHON_DIR: "C:\\Python34" + PYTHON_VERSION: "3.4.x" + PYTHON_ARCH: "32" + BLOCK: "0" + + - PYTHON_DIR: "C:\\Python34-x64" + PYTHON_VERSION: "3.4.x" + PYTHON_ARCH: "64" + BLOCK: "0" + + - PYTHON_DIR: "C:\\Python35" + PYTHON_VERSION: "3.5.x" + PYTHON_ARCH: "32" + BLOCK: "0" + + - PYTHON_DIR: "C:\\Python35-x64" + PYTHON_VERSION: "3.5.x" + PYTHON_ARCH: "64" + BLOCK: "0" + + - PYTHON_DIR: "C:\\Python36" + PYTHON_VERSION: "3.6.x" + PYTHON_ARCH: "32" + BLOCK: "0" + + - PYTHON_DIR: "C:\\Python36-x64" + PYTHON_VERSION: "3.6.x" + PYTHON_ARCH: "64" + BLOCK: "0" + +# - PYTHON_DIR: "C:\\Python37" +# PYTHON_VERSION: "3.7.x" +# PYTHON_ARCH: "32" +# BLOCK: "0" +# +# - PYTHON_DIR: "C:\\Python37-x64" +# PYTHON_VERSION: "3.7.x" +# PYTHON_ARCH: "64" +# BLOCK: "0" + + GITHUB_TOKEN: + secure: 0AQn9ahwWioFTIZE5Ft+6OnGuj6kgCdLtzdyiDCOrmAHxGh/Hl5erpU6dPF4YyQz + PYPI_USER: + secure: FSD2hc+aSqlOLncSKl12Dw== + PYPI_PASSWORD: + secure: Njw5/Y55cp561BNOqvff/amo5ZeHTMggWoSaVpvE51c= + + # Needed by "publish_github_release" add-on to workaround issue appveyor/ci#1493 + APPVEYOR_API_TOKEN: + secure: hrNo4O4PKuIZ5I4ESgDrDxdJcIDMpN+kB0J6PHQKOgY= + +init: + - python -m pip install -U scikit-ci scikit-ci-addons + - python -m ci_addons --install ../addons + + - ps: ../addons/appveyor/rolling-build.ps1 + +install: + - python -m ci install + +build_script: + - python -m ci build + +test_script: + - python -m ci test + +after_test: + - python -m ci after_test + +on_finish: + - ps: ../addons/appveyor/enable-worker-remote-access.ps1 -check_for_block + +deploy_script: + - ps: | + if ($env:appveyor_repo_tag -eq $true -and $env:appveyor_repo_tag_name –match "^v[0-9]+(\.[0-9]+)*") { + Write-Host "deploy release" + pip install twine + twine upload --repository-url https://test.pypi.org/legacy/ dist/* + } elseif ($env:appveyor_repo_branch -eq "master-with-ci") { + Write-Host "deploy master" + ci_addons publish_github_release $env:appveyor_repo_name ` + --prerelease-sha "master-with-ci" ` + --prerelease-packages "dist/*.whl" --re-upload + } else { + Write-Host "nothing to deploy" + } + +matrix: + fast_finish: false + diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..9468d50 --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,3 @@ +coverage +flake8 +scikit-build diff --git a/scikit-ci.yml b/scikit-ci.yml new file mode 100644 index 0000000..39a12ee --- /dev/null +++ b/scikit-ci.yml @@ -0,0 +1,64 @@ +schema_version: "0.5.0" + +before_install: + + appveyor: + environment: + PATH: $;$\\Scripts;$ + RUN_ENV: .\\..\\addons\\appveyor\\run-with-visual-studio.cmd + commands: + - python ../addons/appveyor/patch_vs2008.py + + circle: + environment: + PATH: /opt/python/$/bin:$ + + travis: + osx: + environment: + PATH: $/.pyenv/versions/$/bin:$ + SETUP_BDIST_WHEEL_ARGS: --plat-name macosx-10.6-x86_64 + commands: + - python ../addons/travis/install_pyenv.py + +install: + commands: + - python --version + - python -m pip install --disable-pip-version-check --upgrade pip + - pip install -U setuptools + - $ pip install -U -r requirements-dev.txt + +before_build: + commands: + - flake8 + +build: + commands: + - python setup.py sdist + - python: | + import glob, os + if os.environ.get("UPLOAD_SDIST", "") == "": + sdist=(glob.glob("dist/*.tar.gz") + glob.glob("dist/*.zip"))[0] + print("Deleting [%s]" % sdist) + os.remove(sdist) + - $ python setup.py bdist_wheel $ + + circle: + commands: + - | + # Since there are no external shared libraries to bundle into the wheels + # this step will fixup the wheel switching from 'linux' to 'manylinux1' tag + for whl in dist/*$(python -c "import wheel.pep425tags as w; print(w.get_platform())").whl; do + auditwheel repair $whl -w ./dist/ + rm $whl + done + +test: + commands: + - python setup.py test + +after_test: + commands: + #- codecov -X gcov --required --file ./tests/coverage.xml + - python setup.py clean +