Notcurses-Native.git | scripts/ci/ | verify-musl-tests.sh


#!/usr/bin/env bash # Test phase of the musl verify lane — runs INSIDE the same # alpine:3.20 container as `prep-musl-rakudo.sh`, but separated so # a test failure doesn't bust the Rakudo build cache (Rakudo # source-builds for ~10-20 min on first run). # # Assumes prep-musl-rakudo.sh already ran (Rakudo built under # $RAKUBREW_HOME, which is bind-mounted to a host cache dir). # # Runs from: # docker run -v "$PWD:/work" -w /work \ # -v "$PWD/_ci-cache/rakubrew-alpine-:/root/.rakubrew" \ # -e RAKUDO_VERSION=... -e RAKUBREW_HOME=/root/.rakubrew \ # alpine:3.20 bash scripts/ci/verify-musl-tests.sh # # Why source-built Rakudo (not `apk add rakudo`): Alpine's # package-repo Rakudo lags upstream by a few minor versions and # (as of 3.20) is too old to accept a `Callable` in NativeCall's # `is native(...)` trait — which Notcurses::Native uses for its # state-cached lazy lib-path resolution. apk Rakudo fails to # precompile `Notcurses::Native::Direct` with "Too many positionals # passed; expected 2 arguments but got 3" during `zef install`. set -euxo pipefail # Test-phase deps: # * bash, coreutils, findutils, tar, git, curl — script + zef + xt. # * perl, perl-utils — `prove` (Perl 5's harness) for the xt/ # pass; matches arm64-mac reference lane. # * cmake, pkgconf, patchelf — source-build pass needs them. # * gcc, g++, musl-dev, linux-headers, make, build-base — # NativeCall-driven C builds inside the source-build pass. # * ffmpeg-dev, ncurses-dev, libunistring-dev, libdeflate-dev — # notcurses' build-time deps when we exercise # NOTCURSES_NATIVE_BUILD_FROM_SOURCE. apk add --no-cache \ bash coreutils findutils tar git curl ca-certificates \ perl perl-utils build-base make \ cmake pkgconf patchelf \ gcc g++ musl-dev linux-headers \ ffmpeg-dev ncurses-dev libunistring-dev libdeflate-dev cd /work # Install zef fresh — it's intentionally NOT in the cache (zef # state lives in site/, and caching site/ makes `zef install` # short-circuit on hit, skipping Build.rakumod). ~30s. bash scripts/ci/install-zef.sh # Put rakubrew's shims dir + zef's site-bin on PATH: # * shims/ — rakubrew's dispatch wrappers for raku/zef. # * install/share/perl6/site/bin — zef-installed module bins # (App::Prove6's `prove6`, etc.). rakubrew doesn't auto-rehash # after each `zef install` so binaries installed later in # this script aren't shimmed; adding site-bin to PATH # directly sidesteps the rehash dance. RAKUDO_VERSION="${RAKUDO_VERSION:-2026.03}" RAKUBREW_HOME="${RAKUBREW_HOME:-$HOME/.rakubrew}" export PATH="$RAKUBREW_HOME/shims:$RAKUBREW_HOME/versions/moar-$RAKUDO_VERSION/install/share/perl6/site/bin:$PATH" raku --version zef --version # Prebuilt path — Build.rakumod downloads # notcurses-linux--musl.tar.gz from the release referenced # by BINARY_TAG, SHA-verifies it against resources/checksums.txt, # stages to ~/.local/share/Notcurses-Native//. zef install --/test . zef install --/test App::Prove6 prove6 --verbose -I lib -I t/lib t prove -e 'raku -I lib -I t/lib' --verbose xt/*.rakutest # Source-build path — refuse the prebuilt and exercise the CMake # fallback. apk-installed ffmpeg/ncurses/libunistring/libdeflate # satisfy notcurses' build deps. NOTCURSES_NATIVE_BUILD_FROM_SOURCE=1 zef install --/test --force-install . prove6 --verbose -I lib -I t/lib t