mirror of https://github.com/mongodb/mongo
82 lines
2.6 KiB
Python
82 lines
2.6 KiB
Python
import gzip
|
|
import os
|
|
import pathlib
|
|
import platform
|
|
import re
|
|
import stat
|
|
import sys
|
|
|
|
mongo_path = pathlib.Path(__file__).parents[1]
|
|
sys.path.append(str(mongo_path))
|
|
|
|
from buildscripts.s3_binary.download import download_s3_binary
|
|
from buildscripts.util.expansions import get_expansion
|
|
|
|
DB_CONTRIB_TOOL_VERSION = "v2.1.0"
|
|
RELEASE_URL = (
|
|
f"https://mdb-build-public.s3.amazonaws.com/db-contrib-tool-binaries/{DB_CONTRIB_TOOL_VERSION}/"
|
|
)
|
|
|
|
|
|
def get_binary_name() -> str:
|
|
# Get the binary name in s3 for the current platform/architecture
|
|
operating_system = platform.system().lower()
|
|
machine = platform.machine().lower()
|
|
if machine == "aarch64":
|
|
machine = "arm64"
|
|
|
|
if machine == "amd64" or machine == "x86_64":
|
|
machine = "x64"
|
|
|
|
# On ppc64le RHEL, pyinstaller builds are not forward compatible (At least not from RHEL 8 -> 9),
|
|
# so we need to create and name each binary with the exact OS.
|
|
if machine == "ppc64le":
|
|
# Get the major version from the release string
|
|
# like '4.18.0-513.5.1.el8_9.ppc64le' -> major release 8
|
|
major_version_match = re.findall("el(\d+)", os.uname().release)
|
|
assert len(major_version_match) == 1
|
|
major_version = int(major_version_match[0])
|
|
|
|
# db-contrib-tool 1.0.1 is only released up to RHEL 9 on PPC64LE
|
|
major_version = min(major_version, 9)
|
|
|
|
operating_system = f"rhel{major_version}"
|
|
|
|
binary_name = f"db-contrib-tool_{DB_CONTRIB_TOOL_VERSION}_{operating_system}_{machine}"
|
|
if operating_system == "windows":
|
|
binary_name = f"{binary_name}.exe"
|
|
|
|
return binary_name
|
|
|
|
|
|
def main() -> int:
|
|
os.chdir(os.environ.get("BUILD_WORKSPACE_DIRECTORY", "."))
|
|
|
|
binary_name = get_binary_name()
|
|
gz_name = f"{binary_name}.gz"
|
|
binary_url = f"{RELEASE_URL}{gz_name}"
|
|
if not download_s3_binary(
|
|
s3_path=binary_url,
|
|
local_path=gz_name,
|
|
):
|
|
print("Failed to download db-contrib-tool binary")
|
|
return 1
|
|
# extract the binary
|
|
with gzip.open(gz_name, "rb") as fin:
|
|
with open(binary_name, "wb") as fout:
|
|
fout.write(fin.read())
|
|
os.remove(gz_name)
|
|
workdir = get_expansion("workdir")
|
|
final_name = "db-contrib-tool"
|
|
if platform.machine().lower() == "windows":
|
|
final_name += ".exe"
|
|
# we add ${workdir}/bin to the PATH in prelude.sh
|
|
final_path = os.path.join(workdir, "bin", final_name)
|
|
# put the binary at ${workdir}/bin/db-contrib-tool(.exe)
|
|
os.rename(binary_name, final_path)
|
|
os.chmod(final_path, os.stat(final_path).st_mode | stat.S_IEXEC)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|