test.yml becomes callable; docker-publish.yml runs it as a gate job on
master and tag pushes and builds only when it succeeded. Pull requests
keep running test.yml directly, so nothing runs twice.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The pinned release URL returned 404. test/run.sh already falls back to the
official tool image when the binary is absent, so CI and local runs now take
the same path.
Also pin *.txt to LF and make the required-features lookup tolerate CRLF, so
the feature gate works on a Windows checkout too.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Agent-Id: agent-7034f75b-1ddc-4aa1-a4ea-3a54b340e8d9
The repository had no tests: CI only built the image, and the old
container-structure-test setup was parked as config-broken.yml /
docker-compose.test.broken.yml. This adds suites that actually run the image.
- test/compat.sh: backup, restore, forget, check, hooks, failure handling and
timezone behaviour against the default configuration. These describe what
users depend on today, so a change that turns them red is a breaking change.
- test/features.sh: optional features, each guarded by a detection check
against the built image. Absent features are reported as SKIP, so open pull
requests do not turn master red, and their feature tests start running by
themselves once the pull request is rebased. Covers #109 (RESTIC_STREAM),
#99 (docker cli, bash) and #84 (msmtp).
- test/required-features.txt: once a feature is merged its gate is listed here
and a missing feature becomes a failure instead of a skip.
- test/structure.yml: revived image layout checks, falls back to the official
container-structure-test image when the tool is not installed.
- test/run.sh --sabotage: breaks the backup call on a throwaway copy of the
tree and expects the suite to fail, so the tests cannot be watered down into
always passing. CI runs this as its own step.
- .github/workflows/test.yml: shellcheck plus all suites on every pull request.
Also adds .gitattributes pinning shell scripts, the Dockerfile and YAML to LF.
With a Windows checkout (core.autocrlf=true) the scripts were checked out with
CRLF, and the resulting image failed to start with
"exec /entry.sh: no such file or directory".
No runtime file is touched, the image itself is unchanged.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Agent-Id: agent-7034f75b-1ddc-4aa1-a4ea-3a54b340e8d9