Skip to main content

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 .
note

The build requires Docker BuildKit.

tip

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:

Terminal
$ 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
tip

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:

docker-prepend.md
# 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:

Terminal
$ 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