Scrut in Docker Container
Scrut can be run in a Docker container. This is useful when integrating into CI/CD or if no local Rust development environment is available.
Get Scrut Docker Image
There are two ways:
Pre-Built Image from GHCR
Here is how you can work with theGitHub Container Registry.
The image is then available as:
ghcr.io/facebookexternal/scrut:<VERSION>
Build Locally
Check out the Scrut git repository on GitHub locally. It comes with a Dockerfile
in the root directory.
Now build the image:
$ docker build -t scrut:latest .
The build requires Docker BuildKit.
The container build automatically runs both unit and integrating tests. This makes it a good, isolated development environment if you are interested in contributing to Scrut.
If you want to skip the tests, resulting in a faster build, you can set --build-arg SKIP_TESTS=yes
when executing docker build
.
Run Scrut in Docker Container
Once you have the image available make sure to mount the directory containing the test suite as a volume into the container under /app
.
Following an example with a small Rust CLI:
$ cd my-cli
$ tree
.
├── Cargo.toml
├── dist
│ └── my-cli
├── src
│ ├── command_something_else.rs
│ ├── command_user_list.rs
│ ├── command_user_login.rs
│ └── main.rs
└── tests
├── smoke.md
├── something-else.md
├── user-listing.md
└── user-login.md
Now you would run Scrut like this:
$ docker run --rm -ti -v $(pwd):/app scrut:latest test --verbose tests/
🔎 Found 4 test document(s)
✅ tests/user-login.md: passed 3 testcases
✅ tests/smoke.md: passed 5 testcases
✅ tests/user-listing.md: passed 1 testcase
✅ tests/something-else.md: passed 13 testcases
Result: 4 document(s) with 22 testcase(s): 22 succeeded, 0 failed and 0 skipped
Running tests inside a container can change the path location of the CLI binary. Consider using the --prepend-test-file-paths
parameter to inject a test document that extends the PATH
environment variable as needed. Here an example:
# Add `/app/dist` to `PATH`
```scrut
$ export PATH="/app/dist:$PATH"
```
And then all calls to my-cli
in the test documents will be resolved to /app/dist/my-cli
:
$ docker run --rm -ti -v $(pwd):/app scrut:latest \
test --verbose --prepend-test-file-paths=./docker-prepend.md tests/
🔎 Found 4 test document(s)
✅ tests/user-login.md: passed 4 testcases
✅ tests/smoke.md: passed 6 testcases
✅ tests/user-listing.md: passed 2 testcase
✅ tests/something-else.md: passed 14 testcases
Result: 4 document(s) with 26 testcase(s): 26 succeeded, 0 failed and 0 skipped