Skip to content

Commit 517b1d0

Browse files
authored
Cache rocksdb binary in CI (#3535)
* Cache rocksdb binary in CI * fix portal.yml * Bump rocksdb * bump rocksdb
1 parent 5bb60d7 commit 517b1d0

File tree

7 files changed

+144
-46
lines changed

7 files changed

+144
-46
lines changed

.github/workflows/ci.yml

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -137,12 +137,13 @@ jobs:
137137
runner.os == 'Windows'
138138
run: |
139139
mkdir -p external
140-
MINGW_BASE="https://github.com/mstorsjo/llvm-mingw/releases/download/20230905"
140+
LLVM_VERSION="20250730"
141+
MINGW_BASE="https://github.com/mstorsjo/llvm-mingw/releases/download/$LLVM_VERSION"
141142
if [[ '${{ matrix.target.cpu }}' == 'amd64' ]]; then
142-
MINGW_URL="$MINGW_BASE/llvm-mingw-20230905-ucrt-x86_64.zip"
143+
MINGW_URL="$MINGW_BASE/llvm-mingw-$LLVM_VERSION-ucrt-x86_64.zip"
143144
ARCH=64
144145
else
145-
MINGW_URL="$MINGW_BASE/llvm-mingw-20230905-ucrt-i686.zip"
146+
MINGW_URL="$MINGW_BASE/llvm-mingw-$LLVM_VERSION-ucrt-i686.zip"
146147
ARCH=32
147148
fi
148149
curl -L "$MINGW_URL" -o "external/mingw-${{ matrix.target.cpu }}.zip"
@@ -171,6 +172,22 @@ jobs:
171172
path: NimBinCache
172173
key: 'nim-${{ matrix.target.os }}-${{ matrix.target.cpu }}-${{ steps.versions.outputs.nimbus_build_system }}'
173174

175+
- name: Get latest nim-rocksdb commit hash
176+
id: rocksdb-versions
177+
run: |
178+
getHash() {
179+
git ls-remote "https://github.com/$1" "${2:-HEAD}" | cut -f 1
180+
}
181+
rocksHash=$(getHash status-im/nim-rocksdb)
182+
echo "nim_rocksdb=$rocksHash" >> $GITHUB_OUTPUT
183+
184+
- name: Restore prebuilt rocksdb from cache
185+
id: rocksdb-cache
186+
uses: actions/cache@v4
187+
with:
188+
path: RocksBinCache
189+
key: 'rocks-${{ matrix.target.os }}-${{ matrix.target.cpu }}-${{ steps.rocksdb-versions.outputs.nim_rocksdb }}'
190+
174191
- name: Build Nim and Nimbus-eth1 dependencies
175192
run: |
176193
make -j${ncpu} ARCH_OVERRIDE=${PLATFORM} CI_CACHE=NimBinCache init
@@ -179,7 +196,7 @@ jobs:
179196
if: runner.os == 'Windows'
180197
run: |
181198
gcc --version
182-
DEFAULT_MAKE_FLAGS="-j${ncpu} ENABLE_VMLOWMEM=${ENABLE_VMLOWMEM}"
199+
DEFAULT_MAKE_FLAGS="-j${ncpu} ENABLE_VMLOWMEM=${ENABLE_VMLOWMEM} ROCKSDB_CI_CACHE=RocksBinCache"
183200
mingw32-make ${DEFAULT_MAKE_FLAGS} all test_import build_fuzzers
184201
build/nimbus_execution_client.exe --help
185202
# give us more space
@@ -191,7 +208,7 @@ jobs:
191208
if: runner.os == 'Linux'
192209
run: |
193210
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib"
194-
DEFAULT_MAKE_FLAGS="-j${ncpu}"
211+
DEFAULT_MAKE_FLAGS="-j${ncpu} ROCKSDB_CI_CACHE=RocksBinCache"
195212
env CC=gcc make ${DEFAULT_MAKE_FLAGS} all test_import build_fuzzers
196213
build/nimbus_execution_client --help
197214
# CC, GOARCH, and CGO_ENABLED are needed to select correct compiler 32/64 bit
@@ -206,7 +223,7 @@ jobs:
206223
if: runner.os == 'Macos'
207224
run: |
208225
export ZERO_AR_DATE=1 # avoid timestamps in binaries
209-
DEFAULT_MAKE_FLAGS="-j${ncpu}"
226+
DEFAULT_MAKE_FLAGS="-j${ncpu} ROCKSDB_CI_CACHE=RocksBinCache"
210227
make ${DEFAULT_MAKE_FLAGS} all test_import build_fuzzers
211228
build/nimbus_execution_client --help
212229
# "-static" option will not work for osx unless static system libraries are provided

.github/workflows/nimbus_verified_proxy.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,12 +141,13 @@ jobs:
141141
runner.os == 'Windows'
142142
run: |
143143
mkdir -p external
144-
MINGW_BASE="https://github.com/mstorsjo/llvm-mingw/releases/download/20230905"
144+
LLVM_VERSION="20250730"
145+
MINGW_BASE="https://github.com/mstorsjo/llvm-mingw/releases/download/$LLVM_VERSION"
145146
if [[ '${{ matrix.target.cpu }}' == 'amd64' ]]; then
146-
MINGW_URL="$MINGW_BASE/llvm-mingw-20230905-ucrt-x86_64.zip"
147+
MINGW_URL="$MINGW_BASE/llvm-mingw-$LLVM_VERSION-ucrt-x86_64.zip"
147148
ARCH=64
148149
else
149-
MINGW_URL="$MINGW_BASE/llvm-mingw-20230905-ucrt-i686.zip"
150+
MINGW_URL="$MINGW_BASE/llvm-mingw-$LLVM_VERSION-ucrt-i686.zip"
150151
ARCH=32
151152
fi
152153
curl -L "$MINGW_URL" -o "external/mingw-${{ matrix.target.cpu }}.zip"

.github/workflows/portal.yml

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ on:
3333
- 'Makefile'
3434
- 'nimbus.nimble'
3535

36+
workflow_dispatch:
37+
3638
jobs:
3739
# separate job so it can run concurrently with other tests
3840
testutp:
@@ -210,12 +212,13 @@ jobs:
210212
runner.os == 'Windows'
211213
run: |
212214
mkdir -p external
213-
MINGW_BASE="https://github.com/mstorsjo/llvm-mingw/releases/download/20230905"
215+
LLVM_VERSION="20250730"
216+
MINGW_BASE="https://github.com/mstorsjo/llvm-mingw/releases/download/$LLVM_VERSION"
214217
if [[ '${{ matrix.target.cpu }}' == 'amd64' ]]; then
215-
MINGW_URL="$MINGW_BASE/llvm-mingw-20230905-ucrt-x86_64.zip"
218+
MINGW_URL="$MINGW_BASE/llvm-mingw-$LLVM_VERSION-ucrt-x86_64.zip"
216219
ARCH=64
217220
else
218-
MINGW_URL="$MINGW_BASE/llvm-mingw-20230905-ucrt-x86_64.zip"
221+
MINGW_URL="$MINGW_BASE/llvm-mingw-$LLVM_VERSION-ucrt-x86_64.zip"
219222
ARCH=32
220223
fi
221224
curl -L "$MINGW_URL" -o "external/mingw-${{ matrix.target.cpu }}.zip"
@@ -244,6 +247,22 @@ jobs:
244247
path: NimBinaries
245248
key: 'nim-${{ matrix.target.os }}-${{ matrix.target.cpu }}-${{ steps.versions.outputs.nimbus_build_system }}-portal'
246249

250+
- name: Get latest nim-rocksdb commit hash
251+
id: rocksdb-versions
252+
run: |
253+
getHash() {
254+
git ls-remote "https://github.com/$1" "${2:-HEAD}" | cut -f 1
255+
}
256+
rocksHash=$(getHash status-im/nim-rocksdb)
257+
echo "nim_rocksdb=$rocksHash" >> $GITHUB_OUTPUT
258+
259+
- name: Restore prebuilt rocksdb from cache
260+
id: rocksdb-cache
261+
uses: actions/cache@v4
262+
with:
263+
path: RocksBinCache
264+
key: 'rocks-${{ matrix.target.os }}-${{ matrix.target.cpu }}-${{ steps.rocksdb-versions.outputs.nim_rocksdb }}'
265+
247266
- name: Build Nim and Nimbus-eth1 dependencies
248267
run: |
249268
# use CC to make sure Nim compiler and subsequent test
@@ -254,15 +273,15 @@ jobs:
254273
if: runner.os == 'Windows'
255274
run: |
256275
gcc --version
257-
DEFAULT_MAKE_FLAGS="-j1"
276+
DEFAULT_MAKE_FLAGS="-j${ncpu} ROCKSDB_CI_CACHE=RocksBinCache"
258277
mingw32-make ${DEFAULT_MAKE_FLAGS} nimbus_portal_client
259278
build/nimbus_portal_client.exe --help
260-
find . -type d -name ".git" -exec rm -rf {} +
261-
rm -rf nimcache
279+
# find . -type d -name ".git" -exec rm -rf {} +
280+
find . -type d -name "nimcache" -exec rm -rf {} +
262281
mingw32-make ${DEFAULT_MAKE_FLAGS} portal-tools
263-
rm -rf nimcache
264-
mingw32-make portal-test
265-
rm -rf nimcache
282+
find . -type d -name "nimcache" -exec rm -rf {} +
283+
mingw32-make ${DEFAULT_MAKE_FLAGS} portal-test
284+
find . -type d -name "nimcache" -exec rm -rf {} +
266285
267286
- name: Run Nimbus Portal tests (Linux)
268287
if: runner.os == 'Linux'
@@ -271,22 +290,22 @@ jobs:
271290
./env.sh nim -v
272291
ldd --version
273292
export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:/usr/local/lib"
274-
DEFAULT_MAKE_FLAGS="-j${ncpu}"
293+
DEFAULT_MAKE_FLAGS="-j${ncpu} ROCKSDB_CI_CACHE=RocksBinCache"
275294
env CC=gcc make ${DEFAULT_MAKE_FLAGS} nimbus_portal_client
276295
build/nimbus_portal_client --help
277296
env CC=gcc make ${DEFAULT_MAKE_FLAGS} portal-tools
278297
# CC is needed to select correct compiler 32/64 bit
279-
env CC=gcc CXX=g++ make portal-test
298+
env CC=gcc CXX=g++ make ${DEFAULT_MAKE_FLAGS} portal-test
280299
281300
- name: Run Nimbus Portal tests (Macos)
282301
if: runner.os == 'Macos'
283302
run: |
284-
DEFAULT_MAKE_FLAGS="-j${ncpu}"
303+
DEFAULT_MAKE_FLAGS="-j${ncpu} ROCKSDB_CI_CACHE=RocksBinCache"
285304
make ${DEFAULT_MAKE_FLAGS} nimbus_portal_client
286305
build/nimbus_portal_client --help
287306
make ${DEFAULT_MAKE_FLAGS} portal-tools
288307
# "-static" option will not work for osx unless static system libraries are provided
289-
make portal-test
308+
make ${DEFAULT_MAKE_FLAGS} portal-test
290309
291310
- name: Run Portal testnet
292311
run: |

.github/workflows/simulators.yml

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,6 @@ jobs:
5454
run: |
5555
sudo apt-get -q update
5656
57-
- name: Get latest nimbus-build-system commit hash
58-
id: versions
59-
run: |
60-
getHash() {
61-
git ls-remote "https://github.com/$1" "${2:-HEAD}" | cut -f 1
62-
}
63-
nbsHash=$(getHash status-im/nimbus-build-system)
64-
echo "nimbus_build_system=$nbsHash" >> $GITHUB_OUTPUT
65-
6657
- name: Restore llvm-mingw from cache
6758
if: runner.os == 'windows'
6859
id: windows-mingw-cache
@@ -89,12 +80,37 @@ jobs:
8980
run: |
9081
echo '${{ github.workspace }}'"/external/mingw-amd64/bin" >> $GITHUB_PATH
9182
83+
- name: Get latest nimbus-build-system commit hash
84+
id: versions
85+
run: |
86+
getHash() {
87+
git ls-remote "https://github.com/$1" "${2:-HEAD}" | cut -f 1
88+
}
89+
nbsHash=$(getHash status-im/nimbus-build-system)
90+
echo "nimbus_build_system=$nbsHash" >> $GITHUB_OUTPUT
91+
9292
- name: Restore prebuilt Nim from cache
9393
uses: actions/cache@v4
9494
with:
9595
path: NimBinaries
9696
key: 'nim-${{ matrix.target.os }}-${{ matrix.target.cpu }}-${{ steps.versions.outputs.nimbus_build_system }}-sim'
9797

98+
- name: Get latest nim-rocksdb commit hash
99+
id: rocksdb-versions
100+
run: |
101+
getHash() {
102+
git ls-remote "https://github.com/$1" "${2:-HEAD}" | cut -f 1
103+
}
104+
rocksHash=$(getHash status-im/nim-rocksdb)
105+
echo "nim_rocksdb=$rocksHash" >> $GITHUB_OUTPUT
106+
107+
- name: Restore prebuilt rocksdb from cache
108+
id: rocksdb-cache
109+
uses: actions/cache@v4
110+
with:
111+
path: RocksBinCache
112+
key: 'rocks-${{ matrix.target.os }}-${{ matrix.target.cpu }}-${{ steps.rocksdb-versions.outputs.nim_rocksdb }}'
113+
98114
- name: Build Nim and deps
99115
run: |
100116
if [[ '${{ matrix.target.os }}' == 'windows' ]]; then
@@ -105,7 +121,7 @@ jobs:
105121
ncpu=$(nproc)
106122
fi
107123
make -j${ncpu} ARCH_OVERRIDE=x64 CI_CACHE=NimBinaries init
108-
make -j${ncpu} deps rocksdb
124+
make -j${ncpu} ROCKSDB_CI_CACHE=RocksBinCache deps rocksdb
109125
110126
- name: Run Simulators
111127
run: |
@@ -139,11 +155,10 @@ jobs:
139155
cat windows_amd64_stat/* >> stat_notes.md
140156
141157
- name: Delete tag
142-
uses: dev-drprasad/delete-tag-and-release@v1.0.1
143-
with:
144-
delete_release: true
145-
tag_name: sim-stat
146-
github_token: ${{ secrets.GITHUB_TOKEN }}
158+
run: gh release delete $TAG --cleanup-tag
159+
env:
160+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
161+
TAG: sim-stat
147162

148163
- name: Simulators results
149164
uses: ncipollo/release-action@v1
@@ -156,7 +171,7 @@ jobs:
156171
bodyFile: "stat_notes.md"
157172

158173
- name: Delete artefacts
159-
uses: geekyeggo/delete-artifact@v2
174+
uses: geekyeggo/delete-artifact@v5
160175
with:
161176
failOnError: false
162177
name: |

Makefile

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -223,16 +223,12 @@ libbacktrace:
223223
+ $(MAKE) -C vendor/nim-libbacktrace --no-print-directory BUILD_CXX_LIB=0
224224

225225
# nim-rocksdb
226+
ROCKSDB_CI_CACHE :=
226227

227228
ifneq ($(USE_SYSTEM_ROCKSDB), 0)
228-
ifeq ($(OS), Windows_NT)
229229
rocksdb:
230-
+ vendor/nim-rocksdb/scripts/build_dlls_windows.bat && \
231-
cp -a vendor/nim-rocksdb/build/librocksdb.dll build
232-
else
233-
rocksdb:
234-
+ vendor/nim-rocksdb/scripts/build_static_deps.sh
235-
endif
230+
+ MAKE="$(MAKE)" \
231+
scripts/rocksdb_ci_cache.sh $(ROCKSDB_CI_CACHE)
236232
else
237233
rocksdb:
238234
endif

scripts/rocksdb_ci_cache.sh

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#!/usr/bin/env bash
2+
3+
# Copyright (c) 2018-2025 Status Research & Development GmbH. Licensed under
4+
# either of:
5+
# - Apache License, version 2.0
6+
# - MIT license
7+
# at your option. This file may not be copied, modified, or distributed except
8+
# according to those terms.
9+
10+
set -e
11+
12+
# script arguments
13+
[[ $# -ne 1 ]] && { echo "Usage: $0 rocksdb_cache_dir"; }
14+
ROCKSDB_CACHE="$1"
15+
16+
cd "$(dirname "${BASH_SOURCE[0]}")"/..
17+
18+
REPO_DIR="${PWD}"
19+
BUILD_DEST="${REPO_DIR}/vendor/nim-rocksdb/build"
20+
21+
: "${MAKE:=make}"
22+
23+
# Windows detection
24+
if uname | grep -qiE "mingw|msys"; then
25+
ON_WINDOWS=1
26+
else
27+
ON_WINDOWS=0
28+
fi
29+
30+
# Copy files from ci cache folder
31+
if [[ -n "$ROCKSDB_CI_CACHE" && -d "$ROCKSDB_CI_CACHE" ]]; then
32+
mkdir -p ${BUILD_DEST}
33+
cp -a "$ROCKSDB_CI_CACHE"/* "$BUILD_DEST"/ || true # let this one fail with an empty cache dir
34+
fi
35+
36+
# This scripts has it's own logic to detect rebuilt or not
37+
if [[ "$ON_WINDOWS" == "0" ]]; then
38+
MAKE="${MAKE}" ${REPO_DIR}/vendor/nim-rocksdb/scripts/build_static_deps.sh
39+
else
40+
MAKE="${MAKE}" ${REPO_DIR}/vendor/nim-rocksdb/scripts/build_dlls_windows.sh
41+
mkdir -p ${REPO_DIR}/build
42+
cp -a vendor/nim-rocksdb/build/librocksdb.dll build
43+
fi
44+
45+
# Copy files to ci cache folder
46+
if [[ -n "$ROCKSDB_CI_CACHE" ]]; then
47+
rm -rf "$ROCKSDB_CI_CACHE"
48+
mkdir "$ROCKSDB_CI_CACHE"
49+
cp "$BUILD_DEST"/* "$ROCKSDB_CI_CACHE"/
50+
fi

0 commit comments

Comments
 (0)