diff --git a/.ci/make.sh b/.ci/make.sh new file mode 100755 index 00000000..c516ec69 --- /dev/null +++ b/.ci/make.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +set -eo pipefail + +BASE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" +BASE_DIR="$( dirname "$BASE_DIR" )" + +if [[ "$1" != "release" ]]; then + echo "Must be called ./.ci/make.sh release [version]" + exit 1 +fi + +python $BASE_DIR/utils/build_dists.py +mkdir -p $BASE_DIR/.ci/output +cp $BASE_DIR/dist/* $BASE_DIR/.ci/output/ diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 157becc3..7585bcfa 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,7 +18,7 @@ jobs: python3.7 -m pip install setuptools wheel twine - name: Build packages run: | - python3.7 setup.py sdist bdist_wheel + python3.7 utils/build_dists.py - name: Check packages run: | set -exo pipefail; diff --git a/.gitignore b/.gitignore index 6208cd68..1fbd7806 100644 --- a/.gitignore +++ b/.gitignore @@ -142,4 +142,5 @@ cython_debug/ # elasticsearch files test_elasticsearch/cover -test_elasticsearch/local.py \ No newline at end of file +test_elasticsearch/local.py +.ci/output diff --git a/elasticsearch/__init__.py b/elasticsearch/__init__.py index 3a33eb79..575df552 100644 --- a/elasticsearch/__init__.py +++ b/elasticsearch/__init__.py @@ -18,14 +18,18 @@ # flake8: noqa from __future__ import absolute_import -VERSION = (7, 10, 0) -__version__ = VERSION -__versionstr__ = "7.10.0.dev0" +__versionstr__ = "7.10.0+dev" +import re import sys import logging import warnings +_major, _minor, _patch = [ + int(x) for x in re.search(r"^(\d+)\.(\d+)\.(\d+)", __versionstr__).groups() +] +VERSION = __version__ = (_major, _minor, _patch) + logger = logging.getLogger("elasticsearch") logger.addHandler(logging.NullHandler()) diff --git a/setup.py b/setup.py index 5549a010..5abb6e3b 100644 --- a/setup.py +++ b/setup.py @@ -16,16 +16,27 @@ # specific language governing permissions and limitations # under the License. -from os.path import join, dirname +import re +from os.path import abspath, join, dirname from setuptools import setup, find_packages -VERSION = (7, 10, 0) -__version__ = VERSION -__versionstr__ = "7.10.0.dev0" +package_name = "elasticsearch" +base_dir = abspath(dirname(__file__)) -with open(join(dirname(__file__), "README")) as f: +with open(join(base_dir, package_name, "__init__.py")) as f: + package_version = re.search( + r"__versionstr__\s+=\s+[\"\']([^\"\']+)[\"\']", f.read() + ).group(1) + +with open(join(base_dir, "README")) as f: long_description = f.read().strip() +packages = [ + package + for package in find_packages(where=".", exclude=("test_elasticsearch*",)) + if package == package_name or package.startswith(package_name + ".") +] + install_requires = [ "urllib3>=1.21.1", "certifi", @@ -44,13 +55,13 @@ docs_require = ["sphinx<1.7", "sphinx_rtd_theme"] generate_require = ["black", "jinja2"] setup( - name="elasticsearch", + name=package_name, description="Python client for Elasticsearch", license="Apache-2.0", url="https://github.com/elastic/elasticsearch-py", long_description=long_description, long_description_content_type="text/x-rst", - version=__versionstr__, + version=package_version, author="Honza Král, Nick Lang", author_email="honza.kral@gmail.com, nick@nicklang.com", maintainer="Seth Michael Larson", @@ -60,7 +71,7 @@ setup( "Source Code": "https://github.com/elastic/elasticsearch-py", "Issue Tracker": "https://github.com/elastic/elasticsearch-py/issues", }, - packages=find_packages(where=".", exclude=("test_elasticsearch*",)), + packages=packages, package_data={"elasticsearch": ["py.typed"]}, include_package_data=True, zip_safe=False, diff --git a/utils/build_dists.py b/utils/build_dists.py index ff794055..b91ea187 100644 --- a/utils/build_dists.py +++ b/utils/build_dists.py @@ -127,12 +127,15 @@ def test_dist(dist): def main(): + run("git", "checkout", "--", "setup.py", "elasticsearch/") run("rm", "-rf", "build/", "dist/", "*.egg-info", ".eggs") # Grab the major version to be used as a suffix. setup_py_path = os.path.join(base_dir, "setup.py") - with open(setup_py_path) as f: - major_version = re.search(r"^VERSION = \((\d+),", f.read(), re.M).group(1) + with open(os.path.join(base_dir, "elasticsearch/__init__.py")) as f: + major_version = re.search( + r"^__versionstr__\s+=\s+[\"\'](\d+)\.", f.read(), re.M + ).group(1) for suffix in ("", major_version): run("rm", "-rf", "build/", "*.egg-info", ".eggs") @@ -148,9 +151,11 @@ def main(): setup_py = f.read() with open(setup_py_path, "w") as f: f.truncate() + assert 'package_name = "elasticsearch"' in setup_py f.write( setup_py.replace( - 'name="elasticsearch",', 'name="elasticsearch%s",' % suffix + 'package_name = "elasticsearch"', + 'package_name = "elasticsearch%s"' % suffix, ) )