diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 2e09af0..7cb4547 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -44,3 +44,40 @@ jobs: CLAWHDF5_PYTHON: /opt/interop/bin/python CLAWHDF5_REQUIRE_INTEROP: "1" run: bash scripts/ci-test.sh + + test-arm64: + # The aarch64 kernels in clawhdf5-accel — NEON `dot_i8`, including the + # SDOT path, and the f32 NEON kernels — are cfg'd out on x86, so the job + # above never compiles, lints or tests them. + # + # `linux_arm64` is served by two runners that execute differently: + # vision-01 runs steps on the host (Rust already installed) and vision-02 + # runs them in docker.gitea.com/runner-images. So the steps work in both: + # no `container:`, no JavaScript actions (they are fetched from GitHub, + # which not every runner reliably reaches), and an explicit `+stable` + # toolchain rather than whatever a host happens to default to. + runs-on: linux_arm64 + env: + CARGO_NET_RETRY: "10" + CARGO_TERM_COLOR: always + steps: + - name: Check out + run: | + git init -q . + git remote add origin "${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}.git" + for i in 1 2 3; do git fetch -q --depth 1 origin "${GITHUB_SHA}" && break; sleep 5; done + git checkout -q FETCH_HEAD + - name: Rust stable + run: | + export PATH="$HOME/.cargo/bin:$PATH" + command -v rustup >/dev/null || curl -sSf --retry 5 https://sh.rustup.rs | sh -s -- -y --profile minimal --default-toolchain none + rustup toolchain install stable --profile minimal --component clippy + echo "$HOME/.cargo/bin" >> "$GITHUB_PATH" + - name: Confirm aarch64 + run: | + test "$(uname -m)" = aarch64 + if grep -q asimddp /proc/cpuinfo; then echo "dot-product extension present: SDOT kernel runs"; else echo "no dot-product extension: plain NEON kernel runs"; fi + - name: Clippy (aarch64 kernels) + run: cargo +stable clippy -p clawhdf5-accel --all-targets -- -D warnings + - name: Test + run: cargo +stable test -p clawhdf5-accel -p clawhdf5-ann -p clawhdf5-format