Skip to content

ci: Add a litmus WebDAV-conformance pipeline#2

Draft
michaelstingl wants to merge 5 commits into
mainfrom
issue-247-litmus
Draft

ci: Add a litmus WebDAV-conformance pipeline#2
michaelstingl wants to merge 5 commits into
mainfrom
issue-247-litmus

Conversation

@michaelstingl

@michaelstingl michaelstingl commented Jun 6, 2026

Copy link
Copy Markdown
Owner

Note

Fork-internal preview to review the rendered diff against the upstream PR template. Not the upstream submission. The "Related Issue" link is shown as plain text (code span) so it does not cross-reference the real issue yet; the live Fixes link is added only in the upstream PR. Items still open before this could go upstream live in the kit's PRE-UPSTREAM.md.

Description

litmus is the standard third-party WebDAV / RFC 4918 conformance suite (Joe Orton / neon). It is not run in CI, and the local-only litmus-test-old / litmus-test-new Makefile targets had bit-rotted (they referenced a removed config).

This adds .woodpecker/litmus.yaml, shaped like cs3api-validator-decomposed.yaml: a detached revad serves WebDAV and a step runs litmus against it by name. litmus is built from its pinned, checksummed 0.17 release tarball, so the version is explicit and there is no external image dependency. Gated suites: basic, copymove, http. props (31/33 under litmus 0.17) and locks (reva WebDAV locking is partial) are documented in the job as not yet gated, candidates for an expected-failures list.

The two production-form swaps are included as commented, ready-to-enable steps: an S3-cache binary fetch like the sibling pipelines (instead of the in-pipeline revad build), and an opencloudeu/litmus image (instead of building litmus from source). The active job stays self-contained and locally runnable; either switch is a small change.

The bit-rotted Makefile litmus targets are removed; this pipeline is the single litmus runner, in CI and locally via woodpecker-cli exec.

Related Issue

  • Fixes opencloud-eu/reva#247

Motivation and Context

Without a WebDAV conformance gate, protocol-level regressions can land unnoticed. This restores the litmus coverage the repository is set up to have but currently does not run.

How Has This Been Tested?

  • test environment: local woodpecker-cli exec .woodpecker/litmus.yaml (Docker; revad built and started in-pipeline)
  • test case 1: basic 16/16 passed
  • test case 2: copymove 13/13 passed
  • test case 3: http 4/4 passed; pipeline exit 0
  • not yet run on the project CI

Screenshots (if appropriate):

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Technical debt
  • Tests only (no source changes)

Checklist:

  • Code changes
  • Unit tests added
  • Acceptance tests added
  • Documentation added

🤖 drafted with Claude Code, reviewed before submitting.

@michaelstingl michaelstingl changed the base branch from main to litmus-preview-base June 6, 2026 10:27
@michaelstingl michaelstingl changed the base branch from litmus-preview-base to main June 6, 2026 10:42
@michaelstingl michaelstingl changed the title ci: add a WebDAV litmus conformance pipeline ci: Add a litmus WebDAV-conformance pipeline Jun 6, 2026
The litmus suite (the standard third-party WebDAV / RFC 4918 conformance
tests) was dropped from CI when the project moved to Woodpecker, and the
litmus-test-old/-new Makefile targets bit-rotted: they start a config
(storage-home.toml) that no longer exists. Without this gate, WebDAV
protocol regressions can land unnoticed.

Add .woodpecker/litmus.yaml, shaped like cs3api-validator-decomposed.yaml:
a detached revad serves WebDAV and a step runs the litmus container against
it by name. Repair the two Makefile targets (drop the removed
storage-home.toml, point at the maintained owncloudci/litmus image).

revad is built in-pipeline so the job is self-contained and runnable with
woodpecker-cli exec; switching to the S3-cache binary fetch (depends_on:
build) is the production form. The locks group is omitted, as in ocis CI:
reva's WebDAV locking is partial and tracked separately.

Fixes: opencloud-eu#247
Build litmus (Joe Orton's canonical WebDAV / RFC 4918 suite) from its
pinned, checksummed release tarball: no image dependency, native arch, and
the exact litmus version is explicit in the pipeline.

litmus 0.17 is stricter than earlier versions, so gate on the suites that
pass cleanly (basic, copymove, http). props (31/33) and locks are
documented in the job as not-yet-gated, candidates for an expected-failures
list (cf. ocis run-litmus.py).
Add the two production-form swaps as commented, ready-to-enable steps: a
fetch-binary step that pulls the prebuilt revad from the S3 cache like the
sibling pipelines (with depends_on: build), and an opencloud-eu litmus image
in place of the source build. The active job stays self-contained and locally
runnable; the comments make either switch a small, obvious change.
The litmus-test-old / litmus-test-new targets are a local-only litmus runner
(host network, prebuilt image). The new .woodpecker/litmus.yaml job runs litmus
both in CI and locally (woodpecker-cli exec), so these targets are redundant.
Remove them and the LITMUS_* / TESTS variables they used; the pipeline is now
the single litmus runner.
@michaelstingl

michaelstingl commented Jun 6, 2026

Copy link
Copy Markdown
Owner Author

litmus run (green)

Local run of this pipeline (woodpecker-cli exec .woodpecker/litmus.yaml on the branch tip), with revad and litmus both built in-pipeline and the litmus tarball checksum-verified:

litmus.tar.gz: OK
<- summary for `basic': of 16 tests run: 16 passed, 0 failed. 100.0%
<- summary for `copymove': of 13 tests run: 13 passed, 0 failed. 100.0%
<- summary for `http': of 4 tests run: 4 passed, 0 failed. 100.0%

Pipeline exit 0. The gated set is basic copymove http. props (31 of 33 on litmus 0.17) and locks (partial WebDAV locking) are not gated, as candidates for an expected-failures list. Not yet run on the project CI.

🤖 drafted with Claude Code, reviewed before submitting.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant