diff --git a/.github/workflows/github-actions.yml b/.github/workflows/github-actions.yml new file mode 100644 index 00000000..2c2166a5 --- /dev/null +++ b/.github/workflows/github-actions.yml @@ -0,0 +1,151 @@ +name: MongoengineCI +on: + # All PR + pull_request: + # master branch merge + push: + branches: + - master + # release tags + create: + tags: + - 'v[0-9]+\.[0-9]+\.[0-9]+*' +env: + MONGODB_3_4: 3.4.19 + MONGODB_3_6: 3.6.13 + MONGODB_4_0: 4.0.13 + + PYMONGO_3_4: 3.4 + PYMONGO_3_6: 3.6 + PYMONGO_3_9: 3.9 + PYMONGO_3_11: 3.11 + + MAIN_PYTHON_VERSION: 3.7 + +jobs: + linting: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up Python 3.7 + uses: actions/setup-python@v2 + with: + python-version: 3.7 + - run: bash .github/workflows/install_ci_python_dep.sh + - run: pre-commit run -a + + test: + # Test suite run against recent python versions + # and against a few combination of MongoDB and pymongo + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + python-version: [3.6, 3.7, 3.8, 3.9, pypy3] + MONGODB: [$MONGODB_4_0] + PYMONGO: [$PYMONGO_3_11] + include: + - python-version: 3.7 + MONGODB: $MONGODB_3_4 + PYMONGO: $PYMONGO_3_6 + - python-version: 3.7 + MONGODB: $MONGODB_3_6 + PYMONGO: $PYMONGO_3_9 + - python-version: 3.7 + MONGODB: $MONGODB_3_6 + PYMONGO: $PYMONGO_3_11 + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + - name: install mongo and ci dependencies + run: | + bash .github/workflows/install_mongo.sh ${{ matrix.MONGODB }} + bash .github/workflows/install_ci_python_dep.sh + bash .github/workflows/start_mongo.sh ${{ matrix.MONGODB }} + - name: tox dry-run (to pre-install venv) + run: tox -e $(echo py${{ matrix.python-version }}-mg${{ matrix.PYMONGO }} | tr -d . | sed -e 's/pypypy/pypy/') -- -a "-k=test_ci_placeholder" + - name: Run test suite + run: tox -e $(echo py${{ matrix.python-version }}-mg${{ matrix.PYMONGO }} | tr -d . | sed -e 's/pypypy/pypy/') -- -a "--cov=mongoengine" + - name: Send coverage to Coveralls + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + if: ${{ matrix.python-version == env.MAIN_PYTHON_VERSION }} + run: coveralls + + build_doc_dryrun: + # ensures that readthedocs can be built continuously + # to avoid that it breaks when new releases are being created + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: 3.7 + - name: install python dep + run: | + pip install -e . + pip install -r docs/requirements.txt + - name: build doc + run: | + cd docs + make html-readthedocs + + irc_notification: + runs-on: ubuntu-latest + needs: [linting, test] + steps: + - uses: rectalogic/notify-irc@v1 + if: success() + with: + channel: "irc.freenode.org#mongoengine" + nickname: github-notifier + message: | + Build ${{ job.status }} - ${{ github.actor }} ${{ github.event_name }} ${{ github.event.ref }} + + build-n-publish-dummy: + runs-on: ubuntu-latest + needs: [linting, test] + steps: + - uses: actions/checkout@master + - name: Set up Python 3.7 + uses: actions/setup-python@v1 + with: + python-version: 3.7 + - name: build dummy wheel for test-pypi + run: | + pip install wheel + python setup.py egg_info -b ".dev`date '+%Y%m%d%H%M%S'`" build sdist bdist_wheel +# - name: publish test-pypi +# # Although working and recommended, test-pypi has a limit +# # in the size of projects so it's better to avoid publishing +# # until there is a way to garbage collect these dummy releases +# if: github.event_name != 'pull_request' +# uses: pypa/gh-action-pypi-publish@master +# with: +# password: ${{ secrets.test_pypi_token }} +# repository_url: https://test.pypi.org/legacy/ + + build-n-publish: + runs-on: ubuntu-latest + needs: [linting, test] + if: github.event_name == 'create' && startsWith(github.ref, 'refs/tags/v') + steps: + - uses: actions/checkout@master + - name: Set up Python 3.7 + uses: actions/setup-python@v1 + with: + python-version: 3.7 + # todo separate build from publish + # https://stackoverflow.com/questions/59349905/which-properties-does-github-event-in-a-github-workflow-have + - name: build dummy wheel for test-pypi + run: | + pip install wheel + python setup.py sdist bdist_wheel + - name: publish pypi + uses: pypa/gh-action-pypi-publish@master + with: + password: ${{ secrets.pypi_token }} \ No newline at end of file diff --git a/.github/workflows/install_ci_python_dep.sh b/.github/workflows/install_ci_python_dep.sh new file mode 100644 index 00000000..48b04e9d --- /dev/null +++ b/.github/workflows/install_ci_python_dep.sh @@ -0,0 +1,5 @@ +#!/bin/bash +pip install --upgrade pip +pip install coveralls +pip install pre-commit +pip install tox diff --git a/.github/workflows/install_mongo.sh b/.github/workflows/install_mongo.sh new file mode 100644 index 00000000..a98440a8 --- /dev/null +++ b/.github/workflows/install_mongo.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +MONGODB=$1 + +mongo_build=mongodb-linux-x86_64-${MONGODB} +wget http://fastdl.mongodb.org/linux/$mongo_build.tgz +tar xzf $mongo_build.tgz +${PWD}/$mongo_build/bin/mongod --version diff --git a/.github/workflows/start_mongo.sh b/.github/workflows/start_mongo.sh new file mode 100644 index 00000000..dc844dbd --- /dev/null +++ b/.github/workflows/start_mongo.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +MONGODB=$1 + +mongodb_dir=${PWD}/mongodb-linux-x86_64-${MONGODB} +mkdir $mongodb_dir/data +$mongodb_dir/bin/mongod --dbpath $mongodb_dir/data --logpath $mongodb_dir/mongodb.log --fork +mongo --eval 'db.version();' # Make sure mongo is awake diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index b29dab33..00000000 --- a/.travis.yml +++ /dev/null @@ -1,107 +0,0 @@ -# For full coverage, we'd have to test all supported Python, MongoDB, and -# PyMongo combinations. However, that would result in an overly long build -# with a very large number of jobs, hence we only test a subset of all the -# combinations. -# * Python3.7, MongoDB v3.4 & the latest PyMongo v3.x is currently the "main" setup, -# Other combinations are tested. See below for the details or check the travis jobs - -# We should periodically check MongoDB Server versions supported by MongoDB -# Inc., add newly released versions to the test matrix, and remove versions -# which have reached their End of Life. See: -# 1. https://www.mongodb.com/support-policy. -# 2. https://docs.mongodb.com/ecosystem/drivers/driver-compatibility-reference/#python-driver-compatibility -# -# Reminder: Update README.rst if you change MongoDB versions we test. - -language: python -dist: xenial -python: - - 3.6 - - 3.7 - - 3.8 - - 3.9 - - pypy3 - -env: - global: - - MONGODB_3_4=3.4.19 - - MONGODB_3_6=3.6.13 - - MONGODB_4_0=4.0.13 - - - PYMONGO_3_4=3.4 - - PYMONGO_3_6=3.6 - - PYMONGO_3_9=3.9 - - PYMONGO_3_11=3.11 - - - MAIN_PYTHON_VERSION=3.7 - matrix: - - MONGODB=${MONGODB_3_4} PYMONGO=${PYMONGO_3_11} - -matrix: - # Finish the build as soon as one job fails - fast_finish: true - - include: - - python: 3.7 - env: MONGODB=${MONGODB_3_6} PYMONGO=${PYMONGO_3_6} - - python: 3.7 - env: MONGODB=${MONGODB_3_6} PYMONGO=${PYMONGO_3_9} - - python: 3.7 - env: MONGODB=${MONGODB_3_6} PYMONGO=${PYMONGO_3_11} - - python: 3.8 - env: MONGODB=${MONGODB_4_0} PYMONGO=${PYMONGO_3_11} - -install: - # Install Mongo - - wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-${MONGODB}.tgz - - tar xzf mongodb-linux-x86_64-${MONGODB}.tgz - - ${PWD}/mongodb-linux-x86_64-${MONGODB}/bin/mongod --version - # Install Python dependencies. - - pip install --upgrade pip - - pip install coveralls - - pip install pre-commit - - pip install tox - # tox dryrun to setup the tox venv (we run a mock test). - - tox -e $(echo py$TRAVIS_PYTHON_VERSION-mg$PYMONGO | tr -d . | sed -e 's/pypypy/pypy/') -- -a "-k=test_ci_placeholder" - -before_script: - - mkdir ${PWD}/mongodb-linux-x86_64-${MONGODB}/data - - ${PWD}/mongodb-linux-x86_64-${MONGODB}/bin/mongod --dbpath ${PWD}/mongodb-linux-x86_64-${MONGODB}/data --logpath ${PWD}/mongodb-linux-x86_64-${MONGODB}/mongodb.log --fork - # Run pre-commit hooks (black, flake8, etc) on entire codebase - - if [[ $TRAVIS_PYTHON_VERSION == $MAIN_PYTHON_VERSION ]]; then pre-commit run -a; else echo "pre-commit checks only runs on py37"; fi - - mongo --eval 'db.version();' # Make sure mongo is awake - -script: - - tox -e $(echo py$TRAVIS_PYTHON_VERSION-mg$PYMONGO | tr -d . | sed -e 's/pypypy/pypy/') -- -a "--cov=mongoengine" - -after_success: - - if [[ $TRAVIS_PYTHON_VERSION == $MAIN_PYTHON_VERSION ]]; then coveralls --verbose; else echo "coveralls only sent for py37"; fi - -notifications: - irc: irc.freenode.org#mongoengine - -# Only run builds on the master branch and GitHub releases (tagged as vX.Y.Z) -branches: - only: - - master - - /^v.*$/ - -# Whenever a new release is created via GitHub, publish it on PyPI. -deploy: - provider: pypi - user: the_drow - password: - secure: QMyatmWBnC6ZN3XLW2+fTBDU4LQcp1m/LjR2/0uamyeUzWKdlOoh/Wx5elOgLwt/8N9ppdPeG83ose1jOz69l5G0MUMjv8n/RIcMFSpCT59tGYqn3kh55b0cIZXFT9ar+5cxlif6a5rS72IHm5li7QQyxexJIII6Uxp0kpvUmek= - - # Create a source distribution and a pure python wheel for faster installs. - distributions: "sdist bdist_wheel" - - # Only deploy on tagged commits (aka GitHub releases) and only for the parent - # repo's builds running Python v3.7 along with PyMongo v3.x and MongoDB v3.4. - # We run Travis against many different Python, PyMongo, and MongoDB versions - # and we don't want the deploy to occur multiple times). - on: - tags: true - repo: MongoEngine/mongoengine - condition: ($PYMONGO = ${PYMONGO_3_11}) && ($MONGODB = ${MONGODB_3_4}) - python: 3.7 diff --git a/.travis_.yml b/.travis_.yml new file mode 100644 index 00000000..114fd76f --- /dev/null +++ b/.travis_.yml @@ -0,0 +1,108 @@ +## For full coverage, we'd have to test all supported Python, MongoDB, and +## PyMongo combinations. However, that would result in an overly long build +## with a very large number of jobs, hence we only test a subset of all the +## combinations. +## * Python3.7, MongoDB v3.4 & the latest PyMongo v3.x is currently the "main" setup, +## Other combinations are tested. See below for the details or check the travis jobs +# +## We should periodically check MongoDB Server versions supported by MongoDB +## Inc., add newly released versions to the test matrix, and remove versions +## which have reached their End of Life. See: +## 1. https://www.mongodb.com/support-policy. +## 2. https://docs.mongodb.com/ecosystem/drivers/driver-compatibility-reference/#python-driver-compatibility +## +## Reminder: Update README.rst if you change MongoDB versions we test. +# +#language: python +#dist: xenial +#python: +# - 3.6 +# - 3.7 +# - 3.8 +# - 3.9 +# - pypy3 +# +#env: +# global: +# - MONGODB_3_4=3.4.19 +# - MONGODB_3_6=3.6.13 +# - MONGODB_4_0=4.0.13 +# +# - PYMONGO_3_4=3.4 +# - PYMONGO_3_6=3.6 +# - PYMONGO_3_9=3.9 +# - PYMONGO_3_11=3.11 +# +# - MAIN_PYTHON_VERSION=3.7 +# matrix: +# - MONGODB=${MONGODB_3_4} PYMONGO=${PYMONGO_3_11} +# +#matrix: +# # Finish the build as soon as one job fails +# fast_finish: true +# +# include: +# - python: 3.7 +# env: MONGODB=${MONGODB_3_6} PYMONGO=${PYMONGO_3_6} +# - python: 3.7 +# env: MONGODB=${MONGODB_3_6} PYMONGO=${PYMONGO_3_9} +# - python: 3.7 +# env: MONGODB=${MONGODB_3_6} PYMONGO=${PYMONGO_3_11} +# - python: 3.8 +# env: MONGODB=${MONGODB_4_0} PYMONGO=${PYMONGO_3_11} +# +#install: +# # Install Mongo +# - wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-${MONGODB}.tgz +# - tar xzf mongodb-linux-x86_64-${MONGODB}.tgz +# - ${PWD}/mongodb-linux-x86_64-${MONGODB}/bin/mongod --version +# # Install Python dependencies. +# - pip install --upgrade pip +# - pip install coveralls +# - pip install pre-commit +# - pip install tox +# # tox dryrun to setup the tox venv (we run a mock test). +# - tox -e $(echo py$TRAVIS_PYTHON_VERSION-mg$PYMONGO | tr -d . | sed -e 's/pypypy/pypy/') -- -a "-k=test_ci_placeholder" +# +#before_script: +# - mkdir ${PWD}/mongodb-linux-x86_64-${MONGODB}/data +# - ${PWD}/mongodb-linux-x86_64-${MONGODB}/bin/mongod --dbpath ${PWD}/mongodb-linux-x86_64-${MONGODB}/data --logpath ${PWD}/mongodb-linux-x86_64-${MONGODB}/mongodb.log --fork +# # Run pre-commit hooks (black, flake8, etc) on entire codebase +# - if [[ $TRAVIS_PYTHON_VERSION == $MAIN_PYTHON_VERSION ]]; then pre-commit run -a; else echo "pre-commit checks only runs on py37"; fi +# - mongo --eval 'db.version();' # Make sure mongo is awake +# +#script: +# - tox -e $(echo py$TRAVIS_PYTHON_VERSION-mg$PYMONGO | tr -d . | sed -e 's/pypypy/pypy/') -- -a "--cov=mongoengine" +# +#after_success: +# - if [[ $TRAVIS_PYTHON_VERSION == $MAIN_PYTHON_VERSION ]]; then coveralls --verbose; else echo "coveralls only sent for py37"; fi +# +#notifications: +# irc: irc.freenode.org#mongoengine +# +## Only run builds on the master branch and GitHub releases (tagged as vX.Y.Z) +#branches: +# # Only run builds on the master branch and GitHub releases (tagged as vX.Y.Z) +# only: +# - master +# - /^v.*$/ +# +## Whenever a new release is created via GitHub, publish it on PyPI. +#deploy: +# provider: pypi +# user: the_drow +# password: +# secure: QMyatmWBnC6ZN3XLW2+fTBDU4LQcp1m/LjR2/0uamyeUzWKdlOoh/Wx5elOgLwt/8N9ppdPeG83ose1jOz69l5G0MUMjv8n/RIcMFSpCT59tGYqn3kh55b0cIZXFT9ar+5cxlif6a5rS72IHm5li7QQyxexJIII6Uxp0kpvUmek= +# +# # Create a source distribution and a pure python wheel for faster installs. +# distributions: "sdist bdist_wheel" +# +# # Only deploy on tagged commits (aka GitHub releases) and only for the parent +# # repo's builds running Python v3.7 along with PyMongo v3.x and MongoDB v3.4. +# # We run Travis against many different Python, PyMongo, and MongoDB versions +# # and we don't want the deploy to occur multiple times). +# on: +# tags: true +# repo: MongoEngine/mongoengine +# condition: ($PYMONGO = ${PYMONGO_3_11}) && ($MONGODB = ${MONGODB_3_4}) +# python: 3.7 diff --git a/docs/Makefile b/docs/Makefile index cdc77c36..0bf35356 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -35,6 +35,12 @@ html: @echo @echo "Build finished. Check $(BUILDDIR)/html/index.html" +html-readthedocs: + $(SPHINXBUILD) -T -E -b readthedocs $(ALLSPHINXOPTS) $(BUILDDIR)/html + @echo + @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." + + dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo diff --git a/docs/conf.py b/docs/conf.py index f8a4999a..808deaa8 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -26,7 +26,7 @@ sys.path.insert(0, os.path.abspath("..")) # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ["sphinx.ext.autodoc", "sphinx.ext.todo"] +extensions = ["sphinx.ext.autodoc", "sphinx.ext.todo", "readthedocs_ext.readthedocs"] # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] diff --git a/docs/requirements.txt b/docs/requirements.txt index abd12629..dfda6a70 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,3 +1,3 @@ -pymongo>=3.11 -Sphinx==3.2.1 +Sphinx==3.3.0 sphinx-rtd-theme==0.5.0 +readthedocs-sphinx-ext==2.1.1 diff --git a/setup.py b/setup.py index ffc35743..37b95e37 100644 --- a/setup.py +++ b/setup.py @@ -112,7 +112,7 @@ extra_opts = { "tests_require": [ "pytest<5.0", "pytest-cov", - "coverage<5.0", # recent coverage switched to sqlite format for the .coverage file which isn't handled properly by coveralls + "coverage", "blinker", "Pillow>=7.0.0", ],