authorgravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-07-15 00:15:35+02:00
committergravatar for alex@alexrp.comAlex Rønne Petersen <alex@alexrp.com> 2025-07-15 01:30:46+02:00
logf3f2a56859f96cee6f9bc8e8fe14b99ec653abaf
tree4e59c3563c8347378b7b01a1aa77234e98c3da42
parentd66f13c90d4767cce3fc1e3fa94380a27f2a09b2

ci: make changes to riscv64-linux to try to avoid timeouts

The idea is to have 2 runners per machine, since a lot of time is spent building stage3 and stage4, both of which are largely single-core affairs. This will make the test steps take longer, however, so the timeouts have been bumped a bit, and max RSS for the test step has been lowered from 64G to 32G to prevent OOM. Finally, we now only run a single ReleaseSafe job on PRs; Debug and Release jobs are limited to pushes.

4 files changed, 91 insertions(+), 4 deletions(-)

.github/workflows/ci.yaml+13-2
......@@ -51,7 +51,8 @@ jobs:
5151 - name: Build and Test
5252 run: sh ci/aarch64-linux-release.sh
5353 riscv64-linux-debug:
54 timeout-minutes: 900
54 if: ${{ github.event_name == 'push' }}
55 timeout-minutes: 1020
5556 runs-on: [self-hosted, Linux, riscv64]
5657 steps:
5758 - name: Checkout
......@@ -59,13 +60,23 @@ jobs:
5960 - name: Build and Test
6061 run: sh ci/riscv64-linux-debug.sh
6162 riscv64-linux-release:
62 timeout-minutes: 780
63 if: ${{ github.event_name == 'push' }}
64 timeout-minutes: 900
6365 runs-on: [self-hosted, Linux, riscv64]
6466 steps:
6567 - name: Checkout
6668 uses: actions/checkout@v4
6769 - name: Build and Test
6870 run: sh ci/riscv64-linux-release.sh
71 riscv64-linux-releasesafe:
72 if: ${{ github.event_name == 'pull_request' }}
73 timeout-minutes: 900
74 runs-on: [self-hosted, Linux, riscv64]
75 steps:
76 - name: Checkout
77 uses: actions/checkout@v4
78 - name: Build and Test
79 run: sh ci/riscv64-linux-releasesafe.sh
6980 x86_64-macos-release:
7081 runs-on: "macos-13"
7182 env:
ci/riscv64-linux-debug.sh+1-1
......@@ -50,7 +50,7 @@ ninja install
5050
5151# No -fqemu and -fwasmtime here as they're covered by the x86_64-linux scripts.
5252stage3-debug/bin/zig build test docs \
53 --maxrss 68719476736 \
53 --maxrss 34359738368 \
5454 -Dstatic-llvm \
5555 -Dskip-non-native \
5656 -Dtarget=native-native-musl \
ci/riscv64-linux-release.sh+1-1
......@@ -50,7 +50,7 @@ ninja install
5050
5151# No -fqemu and -fwasmtime here as they're covered by the x86_64-linux scripts.
5252stage3-release/bin/zig build test docs \
53 --maxrss 68719476736 \
53 --maxrss 34359738368 \
5454 -Dstatic-llvm \
5555 -Dskip-non-native \
5656 -Dtarget=native-native-musl \
ci/riscv64-linux-releasesafe.sh created+76
......@@ -0,0 +1,76 @@
1#!/bin/sh
2
3# Requires cmake ninja-build
4
5set -x
6set -e
7
8ARCH="$(uname -m)"
9TARGET="$ARCH-linux-musl"
10MCPU="spacemit_x60"
11CACHE_BASENAME="zig+llvm+lld+clang-riscv64-linux-musl-0.15.0-dev.929+31e46be74"
12PREFIX="$HOME/deps/$CACHE_BASENAME"
13ZIG="$PREFIX/bin/zig"
14
15export PATH="$HOME/local/bin:$PATH"
16
17# Make the `zig version` number consistent.
18# This will affect the cmake command below.
19git fetch --unshallow || true
20git fetch --tags
21
22# Override the cache directories because they won't actually help other CI runs
23# which will be testing alternate versions of zig, and ultimately would just
24# fill up space on the hard drive for no reason.
25export ZIG_GLOBAL_CACHE_DIR="$PWD/zig-global-cache"
26export ZIG_LOCAL_CACHE_DIR="$PWD/zig-local-cache"
27
28mkdir build-releasesafe
29cd build-releasesafe
30
31export CC="$ZIG cc -target $TARGET -mcpu=$MCPU"
32export CXX="$ZIG c++ -target $TARGET -mcpu=$MCPU"
33
34cmake .. \
35 -DCMAKE_INSTALL_PREFIX="stage3-releasesafe" \
36 -DCMAKE_PREFIX_PATH="$PREFIX" \
37 -DCMAKE_BUILD_TYPE=Release \
38 -DZIG_RELEASE_SAFE=ON \
39 -DZIG_TARGET_TRIPLE="$TARGET" \
40 -DZIG_TARGET_MCPU="$MCPU" \
41 -DZIG_STATIC=ON \
42 -DZIG_NO_LIB=ON \
43 -GNinja
44
45# Now cmake will use zig as the C/C++ compiler. We reset the environment variables
46# so that installation and testing do not get affected by them.
47unset CC
48unset CXX
49
50ninja install
51
52# No -fqemu and -fwasmtime here as they're covered by the x86_64-linux scripts.
53stage3-releasesafe/bin/zig build test docs \
54 --maxrss 34359738368 \
55 -Dstatic-llvm \
56 -Dskip-non-native \
57 -Dtarget=native-native-musl \
58 --search-prefix "$PREFIX" \
59 --zig-lib-dir "$PWD/../lib"
60
61# Ensure that stage3 and stage4 are byte-for-byte identical.
62stage3-releasesafe/bin/zig build \
63 --prefix stage4-releasesafe \
64 -Denable-llvm \
65 -Dno-lib \
66 -Doptimize=ReleaseSafe \
67 -Dstrip \
68 -Dtarget=$TARGET \
69 -Dcpu=$MCPU \
70 -Duse-zig-libcxx \
71 -Dversion-string="$(stage3-releasesafe/bin/zig version)"
72
73# diff returns an error code if the files differ.
74echo "If the following command fails, it means nondeterminism has been"
75echo "introduced, making stage3 and stage4 no longer byte-for-byte identical."
76diff stage3-releasesafe/bin/zig stage4-releasesafe/bin/zig