-
Notifications
You must be signed in to change notification settings - Fork 1
185 lines (175 loc) · 7 KB
/
CI.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
name: CI
on:
workflow_dispatch:
push:
branches:
- main
paths:
- "src/**"
- "test/**"
- "Project.toml"
- ".github/workflows/CI.yml"
pull_request:
paths:
- "src/**"
- "test/**"
- "Project.toml"
- ".github/workflows/CI.yml"
concurrency:
# Skip intermediate builds: always.
# Cancel intermediate builds: only if it is a pull request build.
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}
env:
build_dir: ./build
ray_dir: ./build/ray
tarballs_dir: ./build/tarballs
jobs:
test:
name: Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
version:
- "1.8" # Version used with MVP
- "1.9" # Latest release
os:
- ubuntu-20.04-16core
- macos-latest-xlarge # Apple silicon
arch:
- x64
- aarch64
exclude:
- os: ubuntu-20.04-16core
arch: aarch64
- os: macos-latest-xlarge
arch: x64
steps:
- uses: actions/checkout@v3
- name: Determine Ray commit
id: ray-commit
run: |
read -r sha < build/ray_commit
echo "sha=$sha" | tee -a "$GITHUB_OUTPUT"
- name: Clone Ray repository
uses: actions/checkout@v3
with:
repository: beacon-biosignals/ray
path: ${{ env.ray_dir }}
ref: ${{ steps.ray-commit.outputs.sha }}
- uses: actions/setup-python@v4
with:
python-version: "3.11"
cache: pip
cache-dependency-path: ${{ env.ray_dir }}/python/setup.py
- uses: julia-actions/setup-julia@v1
with:
version: ${{ matrix.version }}
arch: ${{ matrix.arch }}
- uses: julia-actions/cache@v1
with:
cache-name: "${{ github.workflow }}-${{ github.job }}-${{ matrix.pkg.name }}-${{ matrix.version }}-${{ matrix.os }}-${{ matrix.arch }}"
cache-compiled: true
# TODO: We shouldn't require separate caches per Julia version but allow cache restores to work
# https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#matching-a-cache-key
# https://github.com/beacon-biosignals/Ray.jl/issues/63
- name: Restore build cache
uses: actions/cache/restore@v3
id: build-cache
with:
key: build-cache.ray-jl.${{ matrix.os }}.${{ matrix.arch }}.julia-${{ matrix.version }}.ray-${{ steps.ray-commit.outputs.sha }}.hash-${{ hashFiles('build/WORKSPACE.bazel.tpl', 'build/BUILD.bazel') }}
path: ~/.cache
restore-keys: |
build-cache.ray-jl.${{ matrix.os }}.${{ matrix.arch }}.julia-${{ matrix.version }}.ray-${{ steps.ray-commit.outputs.sha }}.
build-cache.ray-jl.${{ matrix.os }}.${{ matrix.arch }}.julia-${{ matrix.version }}.
# Based upon:
# https://docs.ray.io/en/releases-2.5.1/ray-contribute/development.html#building-ray-on-linux-macos-full
- name: Build Ray CLI
run: |
pip install --upgrade pip wheel
# Use `~/.cache/bazel` as the Bazel cache directory on macOS
# https://bazel.build/remote/output-directories
if [ "$(uname -s)" = "Darwin" ]; then
mkdir -p ~/.cache/bazel/_bazel_$USER
rm -rf /private/var/tmp/_bazel_$USER # Bazel cached data may be present from unrelated builds
ln -s ~/.cache/bazel/_bazel_$USER /private/var/tmp/_bazel_$USER
fi
# The Ray BUILD.bazel includes a bunch of `copy_to_workspace` rules which copy build output
# into the Ray worktree. When we only restore the Bazel cache then re-building causes these
# rules to be skipped resulting in `error: [Errno 2] No such file or directory`. By manually
# saving/restoring these files we can work around this.
RAY_GEN_CACHE_DIR=~/.cache/ray-generated
if [ -d "$RAY_GEN_CACHE_DIR" ]; then
ray_repo=$(pwd)
srcs=(
python/ray/_raylet.so \
python/ray/core/generated \
python/ray/serve/generated \
python/ray/core/src/ray/raylet/raylet \
python/ray/core/src/ray/gcs \
)
# Reimplemented `cp --parents` as this isn't supported by macOS
for rel in "${srcs[@]}"; do
echo "Restoring $rel" >&2
src="$RAY_GEN_CACHE_DIR/$rel"
dest=$(dirname "$ray_repo/$rel")
mkdir -p $dest
cp -rp $src $dest
done
fi
pushd python
pip install . --verbose # Fresh build takes ~50 minutes on basic GH runner
popd
# By copying the entire Ray worktree we can easily restore missing files without having to
# delete the cache and build from scratch. Skip copy when we don't save the cache.
if [ "${{ steps.build-cache.outputs.cache-hit }}" != "true" ]; then
mkdir -p "$RAY_GEN_CACHE_DIR"
cp -rfp . "$RAY_GEN_CACHE_DIR"
fi
# Verify Ray CLI works
echo "Verify Ray CLI works" >&2
ray --version
working-directory: ${{ env.ray_dir }}
- name: Build ray_julia library
id: ray_julia
shell: julia --color=yes --project {0}
run: |
using Pkg
Pkg.instantiate()
include(joinpath(pwd(), "build_tarballs.jl"))
tarball_path = build_host_tarball()
open(ENV["GITHUB_OUTPUT"], "a") do io
println(io, "tarball_path=$tarball_path")
end
working-directory: ${{ env.build_dir }}
- uses: julia-actions/julia-buildpkg@v1
- uses: julia-actions/julia-runtest@v1
with:
annotate: true
- uses: julia-actions/julia-processcoverage@v1
- uses: codecov/codecov-action@v3
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: lcov.info
flags: Ray.jl
# Add the ray_julia library from each job to the same artifact
# https://github.com/actions/upload-artifact#uploading-to-the-same-artifact
- name: Save ray_julia library
uses: actions/upload-artifact@v3
with:
name: ray_julia_libraries
path: ${{ steps.ray_julia.outputs.tarball_path }}
- name: Save Ray logs
uses: actions/upload-artifact@v3
if: always()
with:
name: ray-logs.${{ matrix.os }}.${{ matrix.arch }}.julia-${{ matrix.version }}.run-${{ github.run_number }}
path: /tmp/ray/session_latest/logs
# https://github.com/actions/cache/tree/main/save#always-save-cache
- name: Save build cache
uses: actions/cache/save@v3
if: always() && steps.build-cache.outputs.cache-hit != 'true'
with:
key: ${{ steps.build-cache.outputs.cache-primary-key }}
path: ~/.cache