From e774edb428145d2803f4a7bad4ede4d10b2c8980 Mon Sep 17 00:00:00 2001 From: Zen Dodd Date: Sat, 15 Aug 2026 17:10:50 +1000 Subject: [PATCH 1/4] ci: consolidate Ubuntu workflows --- .github/workflows/ubuntu-22.04-build.yml | 70 ------------------------ .github/workflows/ubuntu-build.yml | 54 ++++++++++++++++-- testsuite/fleettest.json.example | 10 ++-- testsuite/fleettest.py | 10 ++-- 4 files changed, 59 insertions(+), 85 deletions(-) delete mode 100644 .github/workflows/ubuntu-22.04-build.yml diff --git a/.github/workflows/ubuntu-22.04-build.yml b/.github/workflows/ubuntu-22.04-build.yml deleted file mode 100644 index ce05cf1a2..000000000 --- a/.github/workflows/ubuntu-22.04-build.yml +++ /dev/null @@ -1,70 +0,0 @@ -name: Test rsync on Ubuntu 22.04 - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} - cancel-in-progress: true - -# Older-LTS coverage to help with backporting security fixes. ubuntu-22.04 -# is currently the oldest GitHub Actions runner image (20.04 was retired -# in April 2025). - -on: - push: - branches: [ master ] - paths-ignore: - - '.github/workflows/*.yml' - - '!.github/workflows/ubuntu-22.04-build.yml' - pull_request: - types: [opened, synchronize, reopened] - paths-ignore: - - '.github/workflows/*.yml' - - '!.github/workflows/ubuntu-22.04-build.yml' - schedule: - - cron: '42 8 * * *' - -jobs: - test: - runs-on: ubuntu-22.04 - name: Test rsync on Ubuntu 22.04 - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - name: prep - run: | - sudo apt-get update - sudo apt-get install acl libacl1-dev attr libattr1-dev liblz4-dev libzstd-dev libxxhash-dev libidn2-dev python3-cmarkgfm openssl - echo "/usr/local/bin" >>"$GITHUB_PATH" - - name: configure - run: ./configure --with-rrsync - - name: make - run: make - - name: install - run: sudo make install - - name: info - run: rsync --version - - name: check - run: sudo RSYNC_EXPECT_SKIPPED=@testsuite/skiplist/common.txt,@testsuite/skiplist/linux.txt make check - - name: check30 - run: sudo RSYNC_EXPECT_SKIPPED=@testsuite/skiplist/common.txt,@testsuite/skiplist/linux.txt,@testsuite/skiplist/proto30.txt make check30 - - name: check29 - run: sudo RSYNC_EXPECT_SKIPPED=@testsuite/skiplist/common.txt,@testsuite/skiplist/linux.txt,@testsuite/skiplist/proto29.txt make check29 - - name: check (TCP daemon transport) - # Second run with daemon tests over a real loopback rsyncd; the default - # 'make check' above uses the secure stdio-pipe transport. - run: sudo ./runtests.py --rsync-bin="$PWD/rsync" --use-tcp -j 8 - - name: ssl file list - run: rsync-ssl --no-motd download.samba.org::rsyncftp/ || true - - name: save artifact - uses: actions/upload-artifact@v4 - with: - retention-days: 45 - name: ubuntu-22.04-bin - path: | - rsync - rsync-ssl - rsync.1 - rsync-ssl.1 - rsyncd.conf.5 - rrsync.1 - rrsync diff --git a/.github/workflows/ubuntu-build.yml b/.github/workflows/ubuntu-build.yml index 3adab91e6..30c1ccee0 100644 --- a/.github/workflows/ubuntu-build.yml +++ b/.github/workflows/ubuntu-build.yml @@ -11,17 +11,31 @@ on: - '.github/workflows/*.yml' - '!.github/workflows/ubuntu-build.yml' pull_request: - types: [opened, synchronize, reopened] + branches: [ master ] paths-ignore: - '.github/workflows/*.yml' - '!.github/workflows/ubuntu-build.yml' schedule: - - cron: '42 8 * * *' + - cron: '42 8 * * 1' jobs: test: - runs-on: ubuntu-latest - name: Test rsync on Ubuntu + strategy: + fail-fast: false + matrix: + include: + - runner: ubuntu-latest + name: Test rsync on Ubuntu latest + artifact: ubuntu-bin + nonroot: true + install_smoke: true + - runner: ubuntu-22.04 + name: Test rsync on Ubuntu 22.04 + artifact: ubuntu-22.04-bin + nonroot: false + install_smoke: false + runs-on: ${{ matrix.runner }} + name: ${{ matrix.name }} steps: - uses: actions/checkout@v4 with: @@ -35,6 +49,35 @@ jobs: run: ./configure --with-rrsync - name: make run: make + - name: install/uninstall DESTDIR smoke test + if: matrix.install_smoke + run: | + set -e + tmp="$(mktemp -d)" + trap 'rm -rf "$tmp"' EXIT + + make install-all DESTDIR="$tmp" + + for path in \ + /usr/local/bin/rsync \ + /usr/local/bin/rsync-ssl \ + /usr/local/bin/rrsync \ + /usr/local/share/man/man1/rsync.1 \ + /usr/local/share/man/man1/rsync-ssl.1 \ + /usr/local/share/man/man1/rrsync.1 \ + /usr/local/share/man/man5/rsyncd.conf.5 \ + /etc/stunnel/rsyncd.conf + do + test -e "$tmp$path" + done + + make uninstall-all DESTDIR="$tmp" + + leftover="$(find "$tmp" -type f -print)" + if [ -n "$leftover" ]; then + printf '%s\n' "$leftover" + exit 1 + fi - name: install run: sudo make install - name: info @@ -52,6 +95,7 @@ jobs: # is env-dependent here (chroot-acl), so leave RSYNC_EXPECT_SKIPPED unset. run: sudo ./runtests.py --rsync-bin="$PWD/rsync" --use-tcp -j 8 - name: check (non-root, targeted) + if: matrix.nonroot # Every run above is root (sudo), so privilege-sensitive tests never hit # their non-root path. Run those here as the unprivileged 'runner' user # (NO sudo). Explicit test names make runtests.py full_run False, so @@ -73,7 +117,7 @@ jobs: uses: actions/upload-artifact@v4 with: retention-days: 45 - name: ubuntu-bin + name: ${{ matrix.artifact }} path: | rsync rsync-ssl diff --git a/testsuite/fleettest.json.example b/testsuite/fleettest.json.example index d8b3b299b..e697a630c 100644 --- a/testsuite/fleettest.json.example +++ b/testsuite/fleettest.json.example @@ -95,10 +95,10 @@ ] }, { - "_comment": "Ubuntu 18.04 older-LTS backport coverage on a root@ box; no 18.04 runner image exists so it mirrors the 22.04 workflow.", + "_comment": "Ubuntu 18.04 older-LTS backport coverage on a root@ box; no 18.04 runner image exists so it mirrors the 22.04 matrix lane.", "name": "ubuntu-1804", "ssh_host": "root@ubuntu-1804", - "workflow": "ubuntu-22.04-build.yml", + "workflow": "ubuntu-build.yml", "_python_comment": "18.04's default python3 is 3.6, but runtests.py uses subprocess capture_output (3.7+); run the suite under the 3.10 that's also installed.", "python": "python3.10", "_configure_flags_comment": "18.04's libzstd 1.3.3 lacks ZSTD_minCLevel (configure aborts), so disable zstd; also disable lz4 so the default -z compressor is zlib -- with lz4 as the default, compress-options' --compress-level=9 check fails since lz4 has no levels. xxhash is fine.", @@ -113,10 +113,10 @@ ] }, { - "_comment": "Ubuntu 20.04 older-LTS backport coverage on a root@ box; no 20.04 runner image exists so it mirrors the 22.04 workflow.", + "_comment": "Ubuntu 20.04 older-LTS backport coverage on a root@ box; no 20.04 runner image exists so it mirrors the 22.04 matrix lane.", "name": "ubuntu-2004", "ssh_host": "root@ubuntu-2004", - "workflow": "ubuntu-22.04-build.yml", + "workflow": "ubuntu-build.yml", "configure_flags": [ "--with-rrsync" ] @@ -125,7 +125,7 @@ "_comment": "Builds unprivileged (like a CI runner) and runs the suite via sudo; the nonroot pass reruns the privilege-sensitive tests as the ssh user. protocols: [30, 29] runs the check30/check29 passes on this NO-xattrat kernel: the CI's proto-29 step runs here, but the only other proto-29 fleet box (ubuntu-2604) is xattrat, so without this the (no-xattrat x proto-29) cell is uncovered.", "name": "ubuntu-2204", "ssh_host": "runner@ubuntu-2204", - "workflow": "ubuntu-22.04-build.yml", + "workflow": "ubuntu-build.yml", "privilege": "sudo", "nonroot": true, "protocols": [ diff --git a/testsuite/fleettest.py b/testsuite/fleettest.py index 154514c89..9ccc7db3c 100755 --- a/testsuite/fleettest.py +++ b/testsuite/fleettest.py @@ -6,10 +6,10 @@ --use-tcp) in parallel, and prints one report of only the UNEXPECTED results -- a fast local pre-flight for the GitHub CI matrix. -Each target maps 1:1 to a .github/workflows/*.yml job: the per-target configure -flags mirror that workflow, and the pipe-run RSYNC_EXPECT_SKIPPED list is PARSED -from the workflow (not hardcoded). The --use-tcp run never sets an expected-skip -list (matching the workflows), so only test FAILs matter there. +Each target maps to a .github/workflows/*.yml job or matrix lane: the per-target +configure flags mirror that lane, and the pipe-run RSYNC_EXPECT_SKIPPED list is +PARSED from the workflow (not hardcoded). The --use-tcp run never sets an +expected-skip list (matching the workflows), so only test FAILs matter there. The tcp pass runs only the tests that can reach the daemon transport, because it follows a full pipe pass over the very same build: --use-tcp is observable only @@ -167,7 +167,7 @@ class Target: name: str ssh_host: str | None # null in JSON => run locally - workflow: str # filename under .github/workflows + workflow: str # workflow containing the matching job or matrix lane configure_flags: list[str] make: str = "make" # e.g. "gmake" on the BSDs/Solaris env_prefix: str = "" # exported before configure AND make (e.g. PATH) From 58ea074f25e31865f596f92c81078d27ec963aee Mon Sep 17 00:00:00 2001 From: Zen Dodd Date: Sat, 15 Aug 2026 17:15:49 +1000 Subject: [PATCH 2/4] ci: restrict workflow permissions --- .github/workflows/almalinux-8-build.yml | 3 +++ .github/workflows/android-static-build.yml | 3 +++ .github/workflows/asan-build.yml | 3 +++ .github/workflows/coverage.yml | 3 +++ .github/workflows/cygwin-build.yml | 3 +++ .github/workflows/fleettest.yml | 3 +++ .github/workflows/freebsd-build.yml | 3 +++ .github/workflows/macos-build.yml | 3 +++ .github/workflows/netbsd-build.yml | 3 +++ .github/workflows/openbsd-build.yml | 3 +++ .github/workflows/scan-build.yml | 3 +++ .github/workflows/solaris-build.yml | 3 +++ .github/workflows/ubuntu-build.yml | 3 +++ .github/workflows/ubuntu-version-mix.yml | 3 +++ .github/workflows/valgrind.yml | 3 +++ 15 files changed, 45 insertions(+) diff --git a/.github/workflows/almalinux-8-build.yml b/.github/workflows/almalinux-8-build.yml index 8eb4598c3..98d2bf887 100644 --- a/.github/workflows/almalinux-8-build.yml +++ b/.github/workflows/almalinux-8-build.yml @@ -24,6 +24,9 @@ on: schedule: - cron: '42 8 * * *' +permissions: + contents: read + jobs: test: runs-on: ubuntu-latest diff --git a/.github/workflows/android-static-build.yml b/.github/workflows/android-static-build.yml index 14593a6dc..dd26f5099 100644 --- a/.github/workflows/android-static-build.yml +++ b/.github/workflows/android-static-build.yml @@ -28,6 +28,9 @@ on: - cron: '42 8 * * 1' workflow_dispatch: +permissions: + contents: read + env: # Minimum supported API level. 24 (Android 7.0) runs on every modern # phone while keeping broad reach; bump if you need newer Bionic APIs. diff --git a/.github/workflows/asan-build.yml b/.github/workflows/asan-build.yml index 246a31f9d..10acbe7cb 100644 --- a/.github/workflows/asan-build.yml +++ b/.github/workflows/asan-build.yml @@ -23,6 +23,9 @@ on: - cron: '42 9 * * 1' workflow_dispatch: +permissions: + contents: read + jobs: asan: runs-on: ubuntu-latest diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 6e0eccaff..23725f364 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -19,6 +19,9 @@ on: - cron: '42 9 * * 1' workflow_dispatch: +permissions: + contents: read + jobs: coverage: runs-on: ubuntu-latest diff --git a/.github/workflows/cygwin-build.yml b/.github/workflows/cygwin-build.yml index b82e18b12..0b62a7318 100644 --- a/.github/workflows/cygwin-build.yml +++ b/.github/workflows/cygwin-build.yml @@ -18,6 +18,9 @@ on: schedule: - cron: '42 8 * * *' +permissions: + contents: read + jobs: test: runs-on: windows-2022 diff --git a/.github/workflows/fleettest.yml b/.github/workflows/fleettest.yml index 40f6f8fc6..a782b87a9 100644 --- a/.github/workflows/fleettest.yml +++ b/.github/workflows/fleettest.yml @@ -31,6 +31,9 @@ on: schedule: - cron: '17 7 * * 1' +permissions: + contents: read + jobs: fleettest: runs-on: ubuntu-latest diff --git a/.github/workflows/freebsd-build.yml b/.github/workflows/freebsd-build.yml index fe87913f5..b446ad1eb 100644 --- a/.github/workflows/freebsd-build.yml +++ b/.github/workflows/freebsd-build.yml @@ -18,6 +18,9 @@ on: schedule: - cron: '42 8 * * 1' +permissions: + contents: read + jobs: test: runs-on: ubuntu-latest diff --git a/.github/workflows/macos-build.yml b/.github/workflows/macos-build.yml index b20638a8f..ca3e514e6 100644 --- a/.github/workflows/macos-build.yml +++ b/.github/workflows/macos-build.yml @@ -18,6 +18,9 @@ on: schedule: - cron: '42 8 * * *' +permissions: + contents: read + jobs: test: runs-on: macos-latest diff --git a/.github/workflows/netbsd-build.yml b/.github/workflows/netbsd-build.yml index 4d2463b78..8525c70c8 100644 --- a/.github/workflows/netbsd-build.yml +++ b/.github/workflows/netbsd-build.yml @@ -18,6 +18,9 @@ on: schedule: - cron: '42 8 * * 1' +permissions: + contents: read + jobs: test: runs-on: ubuntu-latest diff --git a/.github/workflows/openbsd-build.yml b/.github/workflows/openbsd-build.yml index 6218b9a24..9d594bb50 100644 --- a/.github/workflows/openbsd-build.yml +++ b/.github/workflows/openbsd-build.yml @@ -18,6 +18,9 @@ on: schedule: - cron: '42 8 * * 1' +permissions: + contents: read + jobs: test: runs-on: ubuntu-latest diff --git a/.github/workflows/scan-build.yml b/.github/workflows/scan-build.yml index 6aafaa12e..033935f2d 100644 --- a/.github/workflows/scan-build.yml +++ b/.github/workflows/scan-build.yml @@ -17,6 +17,9 @@ on: - '!.github/workflows/scan-build.yml' workflow_dispatch: +permissions: + contents: read + jobs: # GATING run: pinned clang-18 on a pinned runner so the checker set -- and # thus the expected zero -- is deterministic. The tree is kept clean for diff --git a/.github/workflows/solaris-build.yml b/.github/workflows/solaris-build.yml index 1b328e4a1..fcdab467c 100644 --- a/.github/workflows/solaris-build.yml +++ b/.github/workflows/solaris-build.yml @@ -18,6 +18,9 @@ on: schedule: - cron: '42 8 * * 1' +permissions: + contents: read + jobs: test: runs-on: ubuntu-latest diff --git a/.github/workflows/ubuntu-build.yml b/.github/workflows/ubuntu-build.yml index 30c1ccee0..762ac9eff 100644 --- a/.github/workflows/ubuntu-build.yml +++ b/.github/workflows/ubuntu-build.yml @@ -18,6 +18,9 @@ on: schedule: - cron: '42 8 * * 1' +permissions: + contents: read + jobs: test: strategy: diff --git a/.github/workflows/ubuntu-version-mix.yml b/.github/workflows/ubuntu-version-mix.yml index d16dd09dd..6eae85769 100644 --- a/.github/workflows/ubuntu-version-mix.yml +++ b/.github/workflows/ubuntu-version-mix.yml @@ -39,6 +39,9 @@ on: schedule: - cron: '52 8 * * 1' +permissions: + contents: read + jobs: version-mix: runs-on: ubuntu-latest diff --git a/.github/workflows/valgrind.yml b/.github/workflows/valgrind.yml index 33be5f102..2c22bb8dc 100644 --- a/.github/workflows/valgrind.yml +++ b/.github/workflows/valgrind.yml @@ -19,6 +19,9 @@ on: - cron: '17 4 * * *' workflow_dispatch: +permissions: + contents: read + jobs: memcheck: runs-on: ubuntu-latest From 5d8e8251b0b8533ef610eb05fb286ddfe569649b Mon Sep 17 00:00:00 2001 From: Zen Dodd Date: Sat, 15 Aug 2026 17:21:38 +1000 Subject: [PATCH 3/4] ci: schedule expensive diagnostics --- .github/workflows/coverage.yml | 12 ++---------- .github/workflows/valgrind.yml | 12 ++---------- 2 files changed, 4 insertions(+), 20 deletions(-) diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 23725f364..a1b275ef7 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -4,17 +4,9 @@ concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} cancel-in-progress: true +# Coverage duplicates the Ubuntu suite to measure it rather than protect a +# distinct PR failure mode. Keep that cost scheduled and available on demand. on: - push: - branches: [ master ] - paths-ignore: - - '.github/workflows/*.yml' - - '!.github/workflows/coverage.yml' - pull_request: - types: [opened, synchronize, reopened] - paths-ignore: - - '.github/workflows/*.yml' - - '!.github/workflows/coverage.yml' schedule: - cron: '42 9 * * 1' workflow_dispatch: diff --git a/.github/workflows/valgrind.yml b/.github/workflows/valgrind.yml index 2c22bb8dc..acb113c74 100644 --- a/.github/workflows/valgrind.yml +++ b/.github/workflows/valgrind.yml @@ -4,17 +4,9 @@ concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }} cancel-in-progress: true +# ASan+UBSan remains the per-PR memory-safety gate. Run the four slower +# Valgrind combinations daily and on demand instead of occupying PR runners. on: - push: - branches: [ master ] - paths-ignore: - - '.github/workflows/*.yml' - - '!.github/workflows/valgrind.yml' - pull_request: - types: [opened, synchronize, reopened] - paths-ignore: - - '.github/workflows/*.yml' - - '!.github/workflows/valgrind.yml' schedule: - cron: '17 4 * * *' workflow_dispatch: From 5db74539411c633380401e69f50bd97a00491f68 Mon Sep 17 00:00:00 2001 From: Zen Dodd Date: Sat, 15 Aug 2026 17:52:58 +1000 Subject: [PATCH 4/4] ci: bound workflow runtimes --- .github/workflows/actionlint.yml | 1 + .github/workflows/almalinux-8-build.yml | 1 + .github/workflows/android-static-build.yml | 1 + .github/workflows/asan-build.yml | 1 + .github/workflows/coverage.yml | 1 + .github/workflows/cygwin-build.yml | 1 + .github/workflows/fleettest.yml | 1 + .github/workflows/freebsd-build.yml | 1 + .github/workflows/macos-build.yml | 1 + .github/workflows/netbsd-build.yml | 1 + .github/workflows/openbsd-build.yml | 1 + .github/workflows/scan-build.yml | 2 ++ .github/workflows/solaris-build.yml | 1 + .github/workflows/ubuntu-build.yml | 1 + .github/workflows/ubuntu-version-mix.yml | 1 + .github/workflows/valgrind.yml | 2 +- 16 files changed, 17 insertions(+), 1 deletion(-) diff --git a/.github/workflows/actionlint.yml b/.github/workflows/actionlint.yml index 8d30e4096..d974544c7 100644 --- a/.github/workflows/actionlint.yml +++ b/.github/workflows/actionlint.yml @@ -30,6 +30,7 @@ permissions: jobs: actionlint: runs-on: ubuntu-latest + timeout-minutes: 15 name: actionlint steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/almalinux-8-build.yml b/.github/workflows/almalinux-8-build.yml index 98d2bf887..5e65e7fdc 100644 --- a/.github/workflows/almalinux-8-build.yml +++ b/.github/workflows/almalinux-8-build.yml @@ -30,6 +30,7 @@ permissions: jobs: test: runs-on: ubuntu-latest + timeout-minutes: 45 container: image: almalinux:8 name: Test rsync on AlmaLinux 8 diff --git a/.github/workflows/android-static-build.yml b/.github/workflows/android-static-build.yml index dd26f5099..0e231e004 100644 --- a/.github/workflows/android-static-build.yml +++ b/.github/workflows/android-static-build.yml @@ -39,6 +39,7 @@ env: jobs: build: runs-on: ubuntu-latest + timeout-minutes: 45 name: ${{ matrix.abi }} strategy: fail-fast: false diff --git a/.github/workflows/asan-build.yml b/.github/workflows/asan-build.yml index 10acbe7cb..fc955619c 100644 --- a/.github/workflows/asan-build.yml +++ b/.github/workflows/asan-build.yml @@ -29,6 +29,7 @@ permissions: jobs: asan: runs-on: ubuntu-latest + timeout-minutes: 45 name: rsync ASan+UBSan (clang) env: # rsync intentionally leaks small allocations at process exit, so leak diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index a1b275ef7..4cca24250 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -17,6 +17,7 @@ permissions: jobs: coverage: runs-on: ubuntu-latest + timeout-minutes: 45 name: gcov coverage steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/cygwin-build.yml b/.github/workflows/cygwin-build.yml index 0b62a7318..eae9474f6 100644 --- a/.github/workflows/cygwin-build.yml +++ b/.github/workflows/cygwin-build.yml @@ -24,6 +24,7 @@ permissions: jobs: test: runs-on: windows-2022 + timeout-minutes: 60 name: Test rsync on Cygwin steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/fleettest.yml b/.github/workflows/fleettest.yml index a782b87a9..856607e92 100644 --- a/.github/workflows/fleettest.yml +++ b/.github/workflows/fleettest.yml @@ -37,6 +37,7 @@ permissions: jobs: fleettest: runs-on: ubuntu-latest + timeout-minutes: 45 name: fleettest against localhost steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/freebsd-build.yml b/.github/workflows/freebsd-build.yml index b446ad1eb..0c6f674b8 100644 --- a/.github/workflows/freebsd-build.yml +++ b/.github/workflows/freebsd-build.yml @@ -24,6 +24,7 @@ permissions: jobs: test: runs-on: ubuntu-latest + timeout-minutes: 45 name: Test rsync on FreeBSD steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/macos-build.yml b/.github/workflows/macos-build.yml index ca3e514e6..fc1aff5c5 100644 --- a/.github/workflows/macos-build.yml +++ b/.github/workflows/macos-build.yml @@ -24,6 +24,7 @@ permissions: jobs: test: runs-on: macos-latest + timeout-minutes: 45 name: Test rsync on macOS steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/netbsd-build.yml b/.github/workflows/netbsd-build.yml index 8525c70c8..cf69ace61 100644 --- a/.github/workflows/netbsd-build.yml +++ b/.github/workflows/netbsd-build.yml @@ -24,6 +24,7 @@ permissions: jobs: test: runs-on: ubuntu-latest + timeout-minutes: 45 name: Test rsync on NetBSD steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/openbsd-build.yml b/.github/workflows/openbsd-build.yml index 9d594bb50..bda7086c1 100644 --- a/.github/workflows/openbsd-build.yml +++ b/.github/workflows/openbsd-build.yml @@ -24,6 +24,7 @@ permissions: jobs: test: runs-on: ubuntu-latest + timeout-minutes: 45 name: Test rsync on OpenBSD steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/scan-build.yml b/.github/workflows/scan-build.yml index 033935f2d..2d6464034 100644 --- a/.github/workflows/scan-build.yml +++ b/.github/workflows/scan-build.yml @@ -28,6 +28,7 @@ jobs: # and the runner (ubuntu-24.04, whose apt repos carry those packages). gate-clang18: runs-on: ubuntu-24.04 + timeout-minutes: 45 name: scan-build gate (clang-18, pinned) steps: - uses: actions/checkout@v4 @@ -69,6 +70,7 @@ jobs: # broken run from affecting the workflow's required status. informational-latest: runs-on: ubuntu-latest + timeout-minutes: 45 name: scan-build (latest clang, informational) continue-on-error: true steps: diff --git a/.github/workflows/solaris-build.yml b/.github/workflows/solaris-build.yml index fcdab467c..240d96775 100644 --- a/.github/workflows/solaris-build.yml +++ b/.github/workflows/solaris-build.yml @@ -24,6 +24,7 @@ permissions: jobs: test: runs-on: ubuntu-latest + timeout-minutes: 45 name: Test rsync on Solaris steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/ubuntu-build.yml b/.github/workflows/ubuntu-build.yml index 762ac9eff..a1937ebe2 100644 --- a/.github/workflows/ubuntu-build.yml +++ b/.github/workflows/ubuntu-build.yml @@ -38,6 +38,7 @@ jobs: nonroot: false install_smoke: false runs-on: ${{ matrix.runner }} + timeout-minutes: 45 name: ${{ matrix.name }} steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/ubuntu-version-mix.yml b/.github/workflows/ubuntu-version-mix.yml index 6eae85769..3d3e7ce78 100644 --- a/.github/workflows/ubuntu-version-mix.yml +++ b/.github/workflows/ubuntu-version-mix.yml @@ -45,6 +45,7 @@ permissions: jobs: version-mix: runs-on: ubuntu-latest + timeout-minutes: 45 name: rsync version-mix steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/valgrind.yml b/.github/workflows/valgrind.yml index acb113c74..d9f38e21d 100644 --- a/.github/workflows/valgrind.yml +++ b/.github/workflows/valgrind.yml @@ -17,7 +17,7 @@ permissions: jobs: memcheck: runs-on: ubuntu-latest - timeout-minutes: 120 + timeout-minutes: 60 strategy: fail-fast: false matrix: