|
1 | 1 | #!/bin/bash |
2 | 2 |
|
3 | | -# Builds ArrayRecord from source code located in SOURCE_DIR producing wheels |
4 | | -# under $SOURCE_DIR/all_dist. |
5 | | -function build_and_test_array_record_linux() { |
6 | | - SOURCE_DIR=$1 |
7 | | - |
8 | | - # Automatically decide which platform to build for by checking on which |
9 | | - # platform this runs. |
10 | | - AUDITWHEEL_PLATFORM="manylinux2014_$(uname -m)" |
| 3 | +set -e -x |
11 | 4 |
|
12 | | - # Using a previous version of Blaze to avoid: |
13 | | - # https://github.com/bazelbuild/bazel/issues/8622 |
14 | | - export BAZEL_VERSION="8.0.0" |
| 5 | +OUTPUT_DIR="${OUTPUT_DIR:-/tmp/array_record}" |
15 | 6 |
|
16 | | - # Build wheels for multiple Python minor versions. |
17 | | - PYTHON_MAJOR_VERSION=3 |
18 | | - for PYTHON_MINOR_VERSION in 10 11 12 |
19 | | - do |
20 | | - PYTHON_VERSION=${PYTHON_MAJOR_VERSION}.${PYTHON_MINOR_VERSION} |
21 | | - PYTHON_BIN=/opt/python/cp${PYTHON_MAJOR_VERSION}${PYTHON_MINOR_VERSION}-cp${PYTHON_MAJOR_VERSION}${PYTHON_MINOR_VERSION}/bin |
| 7 | +setup_env_vars_py() { |
| 8 | + # This controls the python binary to use. |
| 9 | + PYTHON_MAJOR_VERSION="$1" |
| 10 | + PYTHON_MINOR_VERSION="$2" |
| 11 | + PYENV_PYTHON_VERSION="${PYTHON_MAJOR_VERSION}"'.'"${PYTHON_MINOR_VERSION}" |
| 12 | + PYTHON='python'"${PYENV_PYTHON_VERSION}" |
| 13 | + export PYTHON |
| 14 | + PYTHON_BIN="$(which python)" |
| 15 | + export PYTHON_BIN |
| 16 | +} |
22 | 17 |
|
23 | | - # Cleanup older images. |
| 18 | +# Builds ArrayRecord from source code located in SOURCE_DIR producing wheels |
| 19 | +# under $SOURCE_DIR/all_dist. |
| 20 | +build_and_test_array_record() { |
| 21 | + printf 'Creating ArrayRecord wheel for Python Version %s\n' "$PYTHON_VERSION" |
| 22 | + if [ "$(uname)" = "Darwin" ]; then |
| 23 | + setup_env_vars_py "$PYTHON_MAJOR_VERSION" "$PYTHON_MINOR_VERSION" |
| 24 | + "$PYTHON_BIN" -m pip install -U setuptools wheel etils[epath] |
| 25 | + sh "${SOURCE_DIR}"'/oss/build_whl.sh' |
| 26 | + else |
| 27 | + # Automatically decide which platform to build for by checking on which |
| 28 | + # platform this runs. |
| 29 | + AUDITWHEEL_PLATFORM='manylinux2014_'"$(uname -m)" |
24 | 30 | docker rmi -f array_record:${PYTHON_VERSION} |
25 | 31 | docker rm -f array_record |
26 | | - |
27 | 32 | DOCKER_BUILDKIT=1 docker build --progress=plain --no-cache \ |
28 | | - --build-arg AUDITWHEEL_PLATFORM=${AUDITWHEEL_PLATFORM} \ |
29 | | - --build-arg PYTHON_VERSION=${PYTHON_VERSION} \ |
30 | | - --build-arg PYTHON_BIN=${PYTHON_BIN} \ |
31 | | - --build-arg BAZEL_VERSION=${BAZEL_VERSION} \ |
32 | | - -t array_record:${PYTHON_VERSION} - < ${SOURCE_DIR}/oss/build.Dockerfile |
| 33 | + --build-arg AUDITWHEEL_PLATFORM="${AUDITWHEEL_PLATFORM}" \ |
| 34 | + --build-arg PYTHON_VERSION="${PYTHON_MAJOR_VERSION}""${PYTHON_MINOR_VERSION}" \ |
| 35 | + --build-arg BAZEL_VERSION="${BAZEL_VERSION}" \ |
| 36 | + -t array_record:"${PYTHON_VERSION}" "${SOURCE_DIR}"'/oss' |
33 | 37 |
|
34 | 38 | docker run --rm -a stdin -a stdout -a stderr \ |
35 | | - --env PYTHON_BIN="${PYTHON_BIN}/python" \ |
36 | | - --env BAZEL_VERSION=${BAZEL_VERSION} \ |
37 | | - --env AUDITWHEEL_PLATFORM=${AUDITWHEEL_PLATFORM} \ |
38 | | - -v $SOURCE_DIR:/tmp/array_record \ |
39 | | - --name array_record array_record:${PYTHON_VERSION} \ |
40 | | - bash oss/build_whl.sh |
41 | | - done |
42 | | - |
43 | | - ls ${SOURCE_DIR}/all_dist/*.whl |
44 | | -} |
45 | | - |
46 | | -function install_and_init_pyenv { |
47 | | - pyenv_root=${1:-$HOME/.pyenv} |
48 | | - export PYENV_ROOT=$pyenv_root |
49 | | - if [[ ! -d $PYENV_ROOT ]]; then |
50 | | - echo "Installing pyenv.." |
51 | | - git clone https://github.com/pyenv/pyenv.git "$PYENV_ROOT" |
52 | | - export PATH="/home/kbuilder/.local/bin:$PYENV_ROOT/bin:$PATH" |
53 | | - eval "$(pyenv init --path)" |
| 39 | + --env PYTHON_VERSION="${PYTHON_MAJOR_VERSION}"'.'"${PYTHON_MINOR_VERSION}" \ |
| 40 | + --env PYTHON_MAJOR_VERSION="${PYTHON_MAJOR_VERSION}" \ |
| 41 | + --env PYTHON_MINOR_VERSION="${PYTHON_MINOR_VERSION}" \ |
| 42 | + --env BAZEL_VERSION="${BAZEL_VERSION}" \ |
| 43 | + --env AUDITWHEEL_PLATFORM="${AUDITWHEEL_PLATFORM}" \ |
| 44 | + -v "${SOURCE_DIR}":"${OUTPUT_DIR}" \ |
| 45 | + --name array_record array_record:"${PYTHON_VERSION}" \ |
| 46 | + sh oss/build_whl.sh |
54 | 47 | fi |
55 | | - |
56 | | - echo "Python setup..." |
57 | | - pyenv install -s "$PYENV_PYTHON_VERSION" |
58 | | - pyenv global "$PYENV_PYTHON_VERSION" |
59 | | - PYTHON=$(pyenv which python) |
60 | | -} |
61 | | - |
62 | | -function setup_env_vars_py310 { |
63 | | - # This controls the python binary to use. |
64 | | - PYTHON=python3.10 |
65 | | - PYTHON_STR=python3.10 |
66 | | - PYTHON_MAJOR_VERSION=3 |
67 | | - PYTHON_MINOR_VERSION=10 |
68 | | - # This is for pyenv install. |
69 | | - PYENV_PYTHON_VERSION=3.10.13 |
70 | | -} |
71 | | - |
72 | | -function update_bazel_macos { |
73 | | - BAZEL_VERSION=$1 |
74 | | - ARCH="$(uname -m)" |
75 | | - curl -L https://github.com/bazelbuild/bazel/releases/download/${BAZEL_VERSION}/bazel-${BAZEL_VERSION}-installer-darwin-${ARCH}.sh -O |
76 | | - ls |
77 | | - chmod +x bazel-*.sh |
78 | | - ./bazel-${BAZEL_VERSION}-installer-darwin-${ARCH}.sh --user |
79 | | - rm -f ./bazel-${BAZEL_VERSION}-installer-darwin-${ARCH}.sh |
80 | | - # Add new bazel installation to path |
81 | | - PATH="/Users/kbuilder/bin:$PATH" |
82 | | -} |
83 | | - |
84 | | -function build_and_test_array_record_macos() { |
85 | | - SOURCE_DIR=$1 |
86 | | - # Set up Bazel. |
87 | | - # Using a previous version of Bazel to avoid: |
88 | | - # https://github.com/bazelbuild/bazel/issues/8622 |
89 | | - export BAZEL_VERSION="8.0.0" |
90 | | - update_bazel_macos ${BAZEL_VERSION} |
91 | | - bazel --version |
92 | | - |
93 | | - # Set up Pyenv. |
94 | | - setup_env_vars_py310 |
95 | | - install_and_init_pyenv |
96 | | - |
97 | | - # Build and test ArrayRecord. |
98 | | - cd ${SOURCE_DIR} |
99 | | - bash ${SOURCE_DIR}/oss/build_whl.sh |
100 | | - |
101 | | - ls ${SOURCE_DIR}/all_dist/*.whl |
102 | 48 | } |
0 commit comments