Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 31 additions & 3 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,15 @@ jobs:
python-version: 3.6
- name: ubuntu-jenkins-tune
os: ubuntu-latest
python-version: 3.6
jenkins-test: RUN_TUNE_TESTS
- name: ubuntu-jenkins-doc
os: ubuntu-latest
python-version: 3.6
jenkins-test: RUN_DOC_TESTS
- name: ubuntu-jenkins-sgd
os: ubuntu-latest
python-version: 3.6
jenkins-test: RUN_SGD_TESTS
env:
BAZEL_CONFIG: ${{ matrix.config }}
Expand All @@ -48,9 +51,9 @@ jobs:
shell: bash -e -o pipefail -l {0}
run: |
# Note: only configure settings here that are required _before_ the repository is cloned (such as Git settings).
if [ ! -f ~/.profile ] && [ ! -f ~/.bash_profile ]; then # missing on some machines, but needed for ~/.bashrc
echo 'if [ -n "${BASH_VERSION}" ] && [ -f ~/.bashrc ]; then . ~/.bashrc; fi' >> ~/.profile
fi
# Different machines behave very differently with Bash initialization -- make them more uniform
rm -f -- ~/.bash_profile ~/.profile ~/.bashrc
printf '\n%s\n' 'if [ -n "${BASH_VERSION}" ] && [ -f ~/.bashrc ]; then . ~/.bashrc; fi' >> ~/.profile
git config --global core.symlinks true && git config --global core.autocrlf false
if command -v dpkg > /dev/null; then sudo dpkg-reconfigure debconf -f noninteractive -p high; fi
- name: Checkout repository
Expand All @@ -60,11 +63,36 @@ jobs:
fetch-depth: 0
- name: Configure AWS Credentials
continue-on-error: true
if: github.repository == 'ray-project/ray' && github.event_name != 'pull_request'
uses: aws-actions/configure-aws-credentials@v1
with:
aws-access-key-id: ${{ secrets.GHA_AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.GHA_AWS_SECRET_ACCESS_KEY }}
aws-region: us-west-2
- name: Prepare caching
id: info
shell: bash
run: |
case "${OSTYPE}" in
linux*) pip_cache=~/.cache/pip;;
darwin*) pip_cache=~/Library/Caches/pip;;
msys) pip_cache="${LOCALAPPDATA}\pip\Cache";;
esac
cat <<-EOF
::set-output name=git_tree_hash::$(git cat-file -p HEAD | sed -n "s/^tree //p")
::set-output name=pip_cache::${pip_cache}
EOF
- name: Cache (pip)
uses: actions/cache@v1.1.2
continue-on-error: true
if: steps.info.outputs.pip_cache
with:
path: ${{ steps.info.outputs.pip_cache }}
key: |
pip-${{ runner.os }}-${{ steps.info.outputs.git_tree_hash }}
restore-keys: |
pip-${{ runner.os }}-
pip-
- name: Run Jenkins tests
shell: bash -e -o pipefail -l {0}
if: matrix.jenkins-test != ''
Expand Down
53 changes: 13 additions & 40 deletions ci/travis/ci.sh
Original file line number Diff line number Diff line change
Expand Up @@ -224,11 +224,18 @@ install_go() {
fi
}

install_ray() {
(
bazel_ensure_buildable_on_windows() {
if [ "${OSTYPE}" = msys ]; then
# This performs as full of a build as possible, to ensure the repository always remains buildable on Windows.
# (Pip install will not perform a full build.)
# NOTE: Do not add build flags here. Use .bazelrc and --config instead.
bazel build -k "//:*" # Full build first, since pip install will build only a subset of targets
bazel build -k "//:*"
fi
}

install_ray() {
# TODO(mehrdadn): This function should be unified with the one in python/build-wheel-windows.sh.
(
cd "${WORKSPACE_DIR}"/python
build_dashboard_front_end
pip install -v -e .
Expand Down Expand Up @@ -261,43 +268,7 @@ build_wheels() {
suppress_output "${WORKSPACE_DIR}"/python/build-wheel-macos.sh
;;
msys*)
(
local backup_conda="${CONDA_PREFIX}.bak" ray_uninstall_status=0
test ! -d "${backup_conda}"
pip uninstall -y ray || ray_uninstall_status=1
mv -n -T -- "${CONDA_PREFIX}" "${backup_conda}" # Back up conda

local pyversion pyversions=()
for pyversion in 3.6 3.7 3.8; do
if [ "${pyversion}" = "${PYTHON-}" ]; then continue; fi # we'll build ${PYTHON} last
pyversions+=("${pyversion}")
done

pyversions+=("${PYTHON-}") # build this last so any subsequent steps use the right version
local local_dir="python/dist"
for pyversion in "${pyversions[@]}"; do
if [ -z "${pyversion}" ]; then continue; fi
"${ROOT_DIR}"/bazel-preclean.sh
git clean -q -f -f -x -d -e "${local_dir}" -e python/ray/dashboard/client
git checkout -q -f -- .
cp -R -f -a -T -- "${backup_conda}" "${CONDA_PREFIX}"
local existing_version
existing_version="$(python -s -c "import sys; print('%s.%s' % sys.version_info[:2])")"
if [ "${pyversion}" != "${existing_version}" ]; then
suppress_output conda install python="${pyversion}"
fi
install_ray
(cd "${WORKSPACE_DIR}"/python && python setup.py --quiet bdist_wheel)
pip uninstall -y ray
rm -r -f -- "${CONDA_PREFIX}"
done

mv -n -T -- "${backup_conda}" "${CONDA_PREFIX}"
"${ROOT_DIR}"/bazel-preclean.sh
if [ 0 -eq "${ray_uninstall_status}" ]; then # If Ray was previously installed, restore it
install_ray
fi
)
suppress_output "${WORKSPACE_DIR}"/python/build-wheel-windows.sh
;;
esac
}
Expand Down Expand Up @@ -451,6 +422,8 @@ init() {
}

build() {
bazel_ensure_buildable_on_windows

if ! need_wheels; then
install_ray
if [ "${LINT-}" = 1 ]; then
Expand Down
89 changes: 89 additions & 0 deletions python/build-wheel-windows.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
#!/usr/bin/env bash

set -euxo pipefail

ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE:-$0}")"; pwd)"
WORKSPACE_DIR="${ROOT_DIR}/.."

PY_VERSIONS=(3.6 3.7 3.8)
PY_SCRIPT_SUBDIR=Scripts # 'bin' for UNIX, 'Scripts' for Windows

get_python_version() {
python -s -c "import sys; sys.stdout.write('%s.%s' % sys.version_info[:2])"
}

is_python_version() {
local expected result=0
expected="$1"
case "$(get_python_version).0." in
"${expected}".*) ;;
*) result=1;;
esac
case "$(pip --version | tr -d "\r")" in
*" (python ${expected})") ;;
*) result=1;;
esac
return "${result}"
}

install_ray() {
# TODO(mehrdadn): This function should be unified with the one in ci/travis/ci.sh.
(
pip install wheel

cd "${WORKSPACE_DIR}"/python
pip install -v -e .
)
}

uninstall_ray() {
pip uninstall -y ray
}

build_wheel_windows() {
local ray_uninstall_status=0
uninstall_ray || ray_uninstall_status=1

local pyversion pyversions=()
for pyversion in "${PY_VERSIONS[@]}"; do
if [ "${pyversion}" = "${PYTHON-}" ]; then continue; fi # we'll build ${PYTHON} last
pyversions+=("${pyversion}")
done
pyversions+=("${PYTHON-}") # build this last so any subsequent steps use the right version

local local_dir="python/dist"
for pyversion in "${pyversions[@]}"; do
if [ -z "${pyversion}" ]; then continue; fi
"${WORKSPACE_DIR}"/ci/travis/bazel-preclean.sh
git clean -q -f -f -x -d -e "${local_dir}" -e python/ray/dashboard/client
git checkout -q -f -- .

# Start a subshell to prevent PATH and cd from affecting our shell environment
(
if ! is_python_version "${pyversion}"; then
local pydirs=("${RUNNER_TOOL_CACHE}/Python/${pyversion}".*/x64)
local pydir="${pydirs[-1]}"
pydir="$(cygpath -u "${pydir}")" # Translate Windows path
test -d "${pydir}"
export PATH="${pydir}:${pydir}/${PY_SCRIPT_SUBDIR}:${PATH}"
fi
if ! is_python_version "${pyversion}"; then
echo "Expected pip for Python ${pyversion} but found Python $(get_python_version) with $(pip --version); exiting..." 1>&2
exit 1
fi

unset PYTHON2_BIN_PATH PYTHON3_BIN_PATH # make sure these aren't set by some chance
install_ray
cd "${WORKSPACE_DIR}"/python
python setup.py --quiet bdist_wheel
uninstall_ray
)
done

"${WORKSPACE_DIR}"/ci/travis/bazel-preclean.sh
if [ 0 -eq "${ray_uninstall_status}" ]; then # If Ray was previously installed, restore it
install_ray
fi
}

build_wheel_windows "$@"