ci: don't assume sudo exists when installing system dependencies

78cb0ad · Gabriel Morell · 2026-09-16 16:08

3 files +40 -12
Message
{commit_body(@commit)}

Files changed

modified .github/workflows/rust-ci.yml
+40 −12
@@ -32,17 +32,31 @@ jobs:
32 32 - name: Install system dependencies (Linux)
33 33 if: runner.os == 'Linux'
34 34 run: |
35 + # A hosted runner is an unprivileged user with sudo. A job
36 + # container is already root and usually ships no sudo at all,
37 + # so hardcoding it fails with `sudo: command not found`
38 + # before the first package is ever fetched. Ask what we are
39 + # rather than assuming either one.
40 + if [ "$(id -u)" -eq 0 ]; then
41 + SUDO=
42 + elif command -v sudo &> /dev/null; then
43 + SUDO=sudo
44 + else
45 + echo "Not root and no sudo available; cannot install system dependencies."
46 + exit 1
47 + fi
48 +
35 49 if command -v apt-get &> /dev/null; then
36 − sudo apt-get update
37 − sudo apt-get install -y build-essential pkg-config libssl-dev libgtk-3-dev libgdk-pixbuf2.0-dev libpango1.0-dev libglib2.0-dev
50 + $SUDO apt-get update
51 + $SUDO apt-get install -y build-essential pkg-config libssl-dev libgtk-3-dev libgdk-pixbuf2.0-dev libpango1.0-dev libglib2.0-dev
38 52 elif command -v yum &> /dev/null; then
39 − sudo yum install -y pkgconfig openssl-devel gtk3-devel gdk-pixbuf-devel pango-devel
53 + $SUDO yum install -y pkgconfig openssl-devel gtk3-devel gdk-pixbuf-devel pango-devel
40 54 elif command -v dnf &> /dev/null; then
41 − sudo dnf install -y pkgconfig openssl-devel
55 + $SUDO dnf install -y pkgconfig openssl-devel
42 56 elif command -v pacman &> /dev/null; then
43 − sudo pacman -Sy --noconfirm pkgconf openssl
57 + $SUDO pacman -Sy --noconfirm pkgconf openssl
44 58 elif command -v apk &> /dev/null; then
45 − sudo apk add --no-cache pkgconfig openssl-dev
59 + $SUDO apk add --no-cache pkgconfig openssl-dev
46 60 else
47 61 echo "Package manager not found. Please install pkg-config and openssl-dev manually."
48 62 exit 1
@@ -270,17 +284,31 @@ jobs:
270 284 - name: Install system dependencies (self-hosted Linux)
271 285 if: runner.os == 'Linux'
272 286 run: |
287 + # A hosted runner is an unprivileged user with sudo. A job
288 + # container is already root and usually ships no sudo at all,
289 + # so hardcoding it fails with `sudo: command not found`
290 + # before the first package is ever fetched. Ask what we are
291 + # rather than assuming either one.
292 + if [ "$(id -u)" -eq 0 ]; then
293 + SUDO=
294 + elif command -v sudo &> /dev/null; then
295 + SUDO=sudo
296 + else
297 + echo "Not root and no sudo available; cannot install system dependencies."
298 + exit 1
299 + fi
300 +
273 301 if command -v apt-get &> /dev/null; then
274 − sudo apt-get update
275 − sudo apt-get install -y build-essential pkg-config libssl-dev libgtk-3-dev libgdk-pixbuf2.0-dev libpango1.0-dev libglib2.0-dev
302 + $SUDO apt-get update
303 + $SUDO apt-get install -y build-essential pkg-config libssl-dev libgtk-3-dev libgdk-pixbuf2.0-dev libpango1.0-dev libglib2.0-dev
276 304 elif command -v yum &> /dev/null; then
277 − sudo yum install -y pkgconfig openssl-devel gtk3-devel gdk-pixbuf-devel pango-devel
305 + $SUDO yum install -y pkgconfig openssl-devel gtk3-devel gdk-pixbuf-devel pango-devel
278 306 elif command -v dnf &> /dev/null; then
279 − sudo dnf install -y pkgconfig openssl-devel
307 + $SUDO dnf install -y pkgconfig openssl-devel
280 308 elif command -v pacman &> /dev/null; then
281 − sudo pacman -Sy --noconfirm pkgconf openssl
309 + $SUDO pacman -Sy --noconfirm pkgconf openssl
282 310 elif command -v apk &> /dev/null; then
283 − sudo apk add --no-cache pkgconfig openssl-dev
311 + $SUDO apk add --no-cache pkgconfig openssl-dev
284 312 else
285 313 echo "Package manager not found. Please install pkg-config and openssl-dev manually."
286 314 exit 1

Parents: 1c38f56