Files
rsync/.github/workflows/stable-testsuite.yml
T
Andrew Tridgell 49a7dfa95d ci: overlay the stable testsuite instead of running it out of a second tree
The stable-testsuite job ran the newer suite via --srcdir, pointing at the
v34-stable-testsuite checkout while the binary came from here.  The tests
resolve their fixtures relative to the tree they live in -- support/lsh.sh,
support/rrsync, old_versions/ -- so that pairing handed this branch's rsync
someone else's helpers and failed 94 tests for reasons unrelated to 3.4.1.

Overlay the suite onto this checkout instead, which is the composition
fleettest.py --testsuite-repo already builds: this branch's code, the newer
suite, one tree.  old_versions/ is copied rather than git-archived because
its static binaries are export-ignore'd.

Also point the push/PR triggers at -sec-patches3; they still named
-sec-patches2, so the job had stopped firing on push entirely.

partial_nowrite joins the exclude list: it covers the receiver
chmod-on-denied-open behaviour added in 3.5.0, which this base does not have.

With this, the full 3.5.0 suite runs clean here and the expected-skip oracle
matches exactly.
2026-08-06 14:31:08 +10:00

90 lines
3.5 KiB
YAML

name: Stable testsuite
# Regression coverage for this stable-backport branch. The branch keeps the old
# shell test suite, so the modern Python suite is maintained separately on the
# v34-stable-testsuite branch. This job builds rsync from this branch and runs
# that suite against it.
#
# The suite is OVERLAID onto this checkout rather than run from its own
# directory via --srcdir. The tests resolve fixtures relative to the source
# tree they live in (support/lsh.sh, support/rrsync, old_versions/), so running
# them out of a second tree pairs this branch's binary with the other tree's
# helpers -- which fails ~90 tests for reasons that have nothing to do with this
# branch. Overlaying gives one tree: this branch's code, the newer suite.
# It is the same composition fleettest.py --testsuite-repo builds.
on:
push:
branches: [ v3.4.1-sec-patches3 ]
paths-ignore:
- '.github/workflows/*.yml'
- '!.github/workflows/stable-testsuite.yml'
pull_request:
types: [opened, synchronize, reopened, labeled]
branches: [ v3.4.1-sec-patches3 ]
paths-ignore:
- '.github/workflows/*.yml'
- '!.github/workflows/stable-testsuite.yml'
workflow_dispatch:
schedule:
- cron: '23 6 * * *'
jobs:
stable-testsuite:
# temporary gate: PR CI runs only for PRs labeled 'run-ci', to save CI
# minutes; labels need triage access, so fork PRs can't self-enable.
if: github.event_name != 'pull_request' || contains(github.event.pull_request.labels.*.name, 'run-ci')
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ ubuntu-latest, ubuntu-22.04 ]
name: Stable testsuite on ${{ matrix.os }}
steps:
- name: checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: checkout stable testsuite
uses: actions/checkout@v4
with:
repository: RsyncProject/rsync
ref: v34-stable-testsuite
path: stable-testsuite
fetch-depth: 1
# Merge, never delete: testsuite/skiplist/backport.txt is ours and names the
# tests this base cannot run; runtests.py reads it from the built tree.
# old_versions/ holds the static peer binaries the version-mixing tests need
# -- they are export-ignore'd, so they must be copied, not git-archived.
- name: overlay the stable testsuite
run: |
cp -a stable-testsuite/runtests.py .
cp -a stable-testsuite/testsuite/. testsuite/
cp -a stable-testsuite/old_versions .
rm -rf stable-testsuite
- name: prep
run: |
sudo apt-get update
sudo apt-get install -y gcc g++ gawk autoconf automake \
acl libacl1-dev attr libattr1-dev liblz4-dev libzstd-dev libxxhash-dev \
python3-cmarkgfm openssl
echo "/usr/local/bin" >>"$GITHUB_PATH"
- name: configure
run: ./configure --with-rrsync
- name: make check-progs
run: make check-progs
- name: info
run: ./rsync --version
# Pipe transport (the secure stdio default). The TCP-only daemon tests skip
# here and are covered by the --use-tcp pass below; the platform lists carry
# those names, and backport.txt (read from this tree) drops the tests this
# base cannot run.
- name: run stable testsuite (pipe)
run: |
sudo RSYNC_EXPECT_SKIPPED=@testsuite/skiplist/common.txt,@testsuite/skiplist/linux.txt \
./runtests.py -j16
# TCP transport over loopback, exercising the daemon paths the pipe run skips.
- name: run stable testsuite (tcp)
run: |
sudo ./runtests.py --use-tcp -j8