Skip to content

ci: run ownCloud core's acceptance tests against the image - #738

Merged
oc-tmueller merged 5 commits into
masterfrom
ci/acceptance-tests
Oct 26, 2026
Merged

oc-tmueller merged 5 commits into
masterfrom
ci/acceptance-tests

Conversation

@oc-tmueller

Copy link
Copy Markdown
Member

Runs ownCloud core's acceptance tests against the image built from this repository, for both release lines. The build job, which publishes, waits for them.

How

  • .github/workflows/acceptance.yml (reusable, called once per release line from main.yml):
    • builds the amd64 image once and hands it to the test jobs as an artifact.
    • each test job runs core's tests/acceptance/run.sh --remote from the release's -qa tarball (sha256-checked) against the image, with MariaDB 10.11 and the testing app (.github/acceptance/run-part.sh).
    • logs from the server and the database are uploaded when a job fails.
  • Scope: pushes and PRs run the @smokeTest API subset (2 parts) and the CLI suite (2 parts). The weekly schedule and manual runs (workflow_dispatch, new) run the full API suite (10 parts) and the CLI suite.
  • Known failures are listed per release and scope in .github/acceptance/expected-failures-<version>-<smoke|full>.md, in core's run.sh format. Any other failure turns the job red, and so does a listed scenario that passes.

Draft: the expected-failures lists are still empty. This PR's first run shows which scenarios fail on the current images, for environment reasons such as no federated second server or no external storage. Those entries are added next, until the smoke runs are green. The full lists come from a full run.

Trade-offs, open for review

  • build needs the whole acceptance matrix, so a red run on one line also holds back the other line's publish. Keeping them independent needs build split into one job per line.
  • The weekly full run also gates the weekly rebuild.
  • The tests use a separate amd64 build of the same Dockerfile, tarball and pinned base digest, not the multi-arch image build pushes. Testing that image would need the shared docker-build.yml to expose it.
  • The release list is duplicated between the acceptance and build matrices.
  • Behat dependencies are resolved from core's composer.json at the release tag. symfony/yaml is pinned below 5.4.52, with Composer's advisory block disabled for it, because 10.16's behat.yml exceeds that version's alias cap. This is the same as BayernBox CI.
  • The -qa tarball ships its scripts 0644, so the workflow restores the exec bits. run.sh calls lint-expected-failures.sh directly.

Verified locally: the harness runs a CLI slice against the published owncloud/server:11.0.1 (7/7 passed, expected-failures check exit 0). actionlint and editorconfig are clean.

🤖 Generated with Claude Code

oc-tmueller and others added 5 commits October 22, 2026 22:30
Each release line builds its amd64 image once and runs core's
tests/acceptance/run.sh from the release's -qa tarball against it, with
MariaDB and the testing app: the @smoketest API subset plus the CLI
suite on every push and PR, and the full API suite weekly, on manual
runs and on PRs labelled full-acceptance. Known failures are listed per
release in .github/acceptance/expected-failures-*.md. The build job,
which publishes, now waits for these tests.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Thomas Müller <323649642+oc-tmueller@users.noreply.github.com>
Capture the server logs before matching them (grep -q under pipefail can
fail the pipeline), stop when MariaDB, the server or the testing app does
not come up, re-run CI only for the full-acceptance label, and cancel a
superseded PR run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Thomas Müller <323649642+oc-tmueller@users.noreply.github.com>
A workflow-level concurrency group let an unrelated label cancel a PR's
real run and left skipped checks that branch protection treats as
passing, and on master it could cancel pending publish runs. Full runs
now come only from the weekly schedule and manual runs. The server
readiness loop also stops as soon as the container exits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Thomas Müller <323649642+oc-tmueller@users.noreply.github.com>
The smoke lists hold the CLI failures this PR's first run found on the
current images. The full lists add API scenarios that failed in a local
full run and again on their own against the published images.
@local_storage scenarios are skipped: uploads into a freshly created
local mount get 423 Locked, and which ones fail varies from run to run.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Thomas Müller <323649642+oc-tmueller@users.noreply.github.com>
Behat in 11.0.1's test setup prints failed scenarios as
'file.feature:67 (on line 77)'. run.sh's check that a listed scenario
really failed greps for the path at the end of the line, so every
expected failure counted as an unexpected pass. Patch that grep after
extracting the -qa tarball, and stop if the line is not found.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Thomas Müller <323649642+oc-tmueller@users.noreply.github.com>
@oc-tmueller

Copy link
Copy Markdown
Member Author

@phil-davis @jvillafanez please have a look - thank you

@jvillafanez

Copy link
Copy Markdown

Should we include redis as part of the setup since it's recommended? It could affect some parts of the code.

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.

2 participants