in utils/build-dists.py [0:0]
def main():
run("git", "checkout", "--", "pyproject.toml", "elasticsearch/")
run("rm", "-rf", "dist")
# Grab the major version to be used as a suffix.
version_path = os.path.join(base_dir, "elasticsearch/_version.py")
with open(version_path) as f:
version = re.search(
r"^__versionstr__\s+=\s+[\"\']([^\"\']+)[\"\']", f.read(), re.M
).group(1)
major_version = version.split(".")[0]
# If we're handed a version from the build manager we
# should check that the version is correct or write
# a new one.
if len(sys.argv) >= 2:
# 'build_version' is what the release manager wants,
# 'expect_version' is what we're expecting to compare
# the package version to before building the dists.
build_version = expect_version = sys.argv[1]
# Any prefixes in the version specifier mean we're making
# a pre-release which will modify __versionstr__ locally
# and not produce a git tag.
if any(x in build_version for x in ("-SNAPSHOT", "-rc", "-alpha", "-beta")):
# If a snapshot, then we add '+dev'
if "-SNAPSHOT" in build_version:
version = version + "+dev"
# alpha/beta/rc -> aN/bN/rcN
else:
pre_number = re.search(r"-(a|b|rc)(?:lpha|eta|)(\d+)$", expect_version)
version = version + pre_number.group(1) + pre_number.group(2)
expect_version = re.sub(
r"(?:-(?:SNAPSHOT|alpha\d+|beta\d+|rc\d+))+$", "", expect_version
)
if expect_version.endswith(".x"):
expect_version = expect_version[:-1]
# For snapshots we ensure that the version in the package
# at least *starts* with the version. This is to support
# build_version='7.x-SNAPSHOT'.
if not version.startswith(expect_version):
print(
"Version of package (%s) didn't match the "
"expected release version (%s)" % (version, build_version)
)
exit(1)
# A release that will be tagged, we want
# there to be no '+dev', etc.
elif expect_version != version:
print(
"Version of package (%s) didn't match the "
"expected release version (%s)" % (version, build_version)
)
exit(1)
for suffix in ("", major_version):
run("rm", "-rf", "build/", "*.egg-info", ".eggs")
# Rename the module to fit the suffix.
shutil.move(
os.path.join(base_dir, "elasticsearch"),
os.path.join(base_dir, f"elasticsearch{suffix}"),
)
# Ensure that the version within 'elasticsearch/_version.py' is correct.
version_path = os.path.join(base_dir, f"elasticsearch{suffix}/_version.py")
with open(version_path) as f:
version_data = f.read()
version_data = re.sub(
r"__versionstr__ = \"[^\"]+\"",
f'__versionstr__ = "{version}"',
version_data,
)
with open(version_path, "w") as f:
f.truncate()
f.write(version_data)
# Rewrite pyproject.toml with the new name.
pyproject_toml_path = os.path.join(base_dir, "pyproject.toml")
with open(pyproject_toml_path) as f:
pyproject_toml = f.read()
with open(pyproject_toml_path, "w") as f:
f.truncate()
f.write(pyproject_toml.replace("elasticsearch", f"elasticsearch{suffix}"))
# Build the sdist/wheels
run("python", "-m", "build")
# Clean up everything.
run("git", "checkout", "--", "pyproject.toml", "elasticsearch/")
if suffix:
run("rm", "-rf", f"elasticsearch{suffix}/")
# Test everything that got created
dists = os.listdir(os.path.join(base_dir, "dist"))
assert len(dists) == 4
for dist in dists:
test_dist(os.path.join(base_dir, "dist", dist))
os.system('bash -c "chmod a+w dist/*"')
# After this run 'python -m twine upload dist/*'
print(
"\n\n"
"===============================\n\n"
" * Releases are ready! *\n\n"
"$ python -m twine upload dist/*\n\n"
"==============================="
)