Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 67 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,12 +110,35 @@ jobs:
NU_VERSION=0.102.0
ARCH=$(uname -m | sed 's/x86_64/x86_64/;s/aarch64/aarch64/')
NU_TARBALL="nu-${NU_VERSION}-${ARCH}-unknown-linux-gnu"
curl -fsSL "https://github.com/nushell/nushell/releases/download/${NU_VERSION}/${NU_TARBALL}.tar.gz" \
| tar -xz -C /usr/local/bin --strip-components=1 "${NU_TARBALL}/nu"
# Download to a file. Do not pipe into tar.
#
# A piped curl reports a network failure as `gzip: stdin: unexpected
# end of file`. The step then takes its exit code from tar. A dropped
# connection therefore reads as a corrupt archive.
#
# A jazzy leg showed this. `curl: (56) Connection died` produced
# `tar: Error is not recoverable` and exit 2.
#
# `--retry` alone does not cover a connection reset mid-transfer.
# `--retry-all-errors` does.
curl -fsSL --retry 5 --retry-delay 2 --retry-all-errors \
-o nu.tar.gz \
"https://github.com/nushell/nushell/releases/download/${NU_VERSION}/${NU_TARBALL}.tar.gz"
tar -xzf nu.tar.gz -C /usr/local/bin --strip-components=1 "${NU_TARBALL}/nu"
rm -f nu.tar.gz

- name: Install ROS dependencies
run: |
# Name `ros-<distro>-rclcpp` explicitly. apt then upgrades the copy
# baked into the image. Every other package here comes from the
# repository. If the image is stale, the two disagree on ABI. The
# mismatch then corrupts memory instead of failing to link.
#
# #303 carries the diagnosis: the version pair, the valgrind trace and
# the hypotheses it ruled out. Keep them there. A version number in a
# comment goes stale, and a stale comment is worse than none.
apt-get install -y \
ros-${{ matrix.distro }}-rclcpp \
ros-${{ matrix.distro }}-example-interfaces \
ros-${{ matrix.distro }}-rmw-zenoh-cpp \
ros-${{ matrix.distro }}-demo-nodes-cpp \
Expand All @@ -125,6 +148,48 @@ jobs:
ros-${{ matrix.distro }}-nav-msgs \
protobuf-compiler

# An interop run tests hiroz against a specific set of ROS binaries.
# Nothing recorded which ones.
#
# When the lyrical leg started to fail, the logs could not answer the
# first question: what changed? A re-run replaces the job's log. The
# inputs of the last good run had therefore already gone. See #303.
#
# Recording them costs a second. It makes any two runs comparable. It
# also ruled out three hypotheses in #303.
- name: Record what this run tests against
run: |
echo "::group::Environment under test"
echo "distro: ${{ matrix.distro }}"
echo "image: ${{ matrix.image }} (floating tag — see versions below)"
grep -E '^(NAME|VERSION)=' /etc/os-release || true
# The core libraries come first. They are the point.
#
# apt installs the four application packages below from the
# repository on every run. Those packages therefore always read as
# current. Only the core libraries carry the image-versus-repository
# skew that caused #303.
#
# A list of the application packages alone would report "nothing
# changed" for the exact failure this step must explain.
echo "--- ROS core libraries (where image/repo skew shows up) ---"
dpkg-query -W -f='${Package} ${Version}\n' \
"ros-${{ matrix.distro }}-rclcpp" \
"ros-${{ matrix.distro }}-rcl" \
"ros-${{ matrix.distro }}-rmw" \
"ros-${{ matrix.distro }}-rcutils" \
"ros-${{ matrix.distro }}-rcpputils" \
"ros-${{ matrix.distro }}-rosidl-runtime-c" 2>&1 || true
echo "--- ROS packages under test ---"
dpkg-query -W -f='${Package} ${Version}\n' \
"ros-${{ matrix.distro }}-rmw-zenoh-cpp" \
"ros-${{ matrix.distro }}-demo-nodes-cpp" \
"ros-${{ matrix.distro }}-example-interfaces" \
"ros-${{ matrix.distro }}-action-tutorials-cpp" 2>&1 || true
echo "--- C runtime (glibc detects the heap corruption in #303) ---"
dpkg-query -W -f='${Package} ${Version}\n' libc6 2>&1 || true
echo "::endgroup::"

- name: Fix broken rmw_zenoh_cpp config for Kilted
if: matrix.distro == 'kilted'
run: |
Expand Down
Loading