# Replicating Linux CI tests locally

**URL:** <https://forum.graphviz.org/t/replicating-linux-ci-tests-locally/3302>\
**Category:** Dev\
**Created:** [February 14, 2026, 9:27am UTC](https://forum.graphviz.org/t/replicating-linux-ci-tests-locally/3302 "2026-02-14T09:27:55Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![brianrmurphy](https://avatars.discourse-cdn.com/v4/letter/b/ce73a5/32.png) [@brianrmurphy](https://forum.graphviz.org/u/brianrmurphy)\
**Post date:** [February 14, 2026, 9:27am UTC](https://forum.graphviz.org/t/replicating-linux-ci-tests-locally/3302/1 "2026-02-14T09:27:55Z")

</div>

I was studying the GiitLab CI process a bit and found that it is pretty easy to run the Linux CI tests locally on a dev machine (probably even a non-Linux one, as long as the processor matches) using `gitlab-ci-local` and Docker. Let me know if you try this and it doesn’t work, or if it can work on other OSes. It seems likely that the Windows tests could run locally if you had a Windows docker image available.

If my results are not a fluke, perhaps we can perhaps add this to DEVELOPERS.md and puit less load on the GItLab runner machines?

### Replicating CI tests locally

You may be able to replicate Linux CI build tests on your development machine, using the `gitlab-ci-local` project and Docker. It is known to work for Linux CI jobs on a Linux host with the same processor, but probably works on Windows and maybe even on different processors with emulation.

To install `gitlab-ci-local`, see [https://github.com/firecow/gitlab-ci-local](https://github.com/firecow/gitlab-ci-local) for instructions for your machine. On Debian-based Linux machines (such as Ubuntu), installing via PPA seems to work best. Visit [https://www.docker.com/products/docker-desktop/](https://www.docker.com/products/docker-desktop/) to download and install Docker.

You may need to override certain variables to make it work, as it incorrectly guesses where to find machine images. You can add these variable definitions, to the config file, which defaults to  
`.gitlab-ci-local-variables.yml` in the root of the project (same directory place as the `.gitlab-ci.yml` file)

```auto
CI_REGISTRY_IMAGE: "registry.gitlab.com/graphviz/graphviz"
CI_COMMIT_SHA: "latest"

```

Running

```auto
$ gitlab-ci-local ubuntu-24.04-cmake-ASan-build-and-test-including-ctest |& tee test.out

```

in the root of the checked-out repo runs build and tests in a pristine Ubuntu 24.04 container.

---

<div class="post-metadata">

**Author:** ![mark](https://sea2.discourse-cdn.com/graphviz/user_avatar/forum.graphviz.org/mark/32/84_2.png) [@mark](https://forum.graphviz.org/u/mark)\
**Post date:** [February 14, 2026, 11:39am UTC](https://forum.graphviz.org/t/replicating-linux-ci-tests-locally/3302/2 "2026-02-14T11:39:15Z")

</div>

Nice work. I’ve never done this before. I don’t think it’s a fluke; it should reproduce what we run on gitlab indeed.

---

<div class="post-metadata">

**Author:** ![smattr](https://sea2.discourse-cdn.com/graphviz/user_avatar/forum.graphviz.org/smattr/32/85_2.png) [@smattr](https://forum.graphviz.org/u/smattr)\
**Post date:** [February 19, 2026, 1:21am UTC](https://forum.graphviz.org/t/replicating-linux-ci-tests-locally/3302/3 "2026-02-19T01:21:42Z")

</div>

> [@brianrmurphy](#):
>
> perhaps we can perhaps add this to DEVELOPERS.md

Yes, I think this would be a valuable contribution.

---

<div class="post-metadata">

**Author:** ![brianrmurphy](https://avatars.discourse-cdn.com/v4/letter/b/ce73a5/32.png) [@brianrmurphy](https://forum.graphviz.org/u/brianrmurphy)\
**Post date:** [February 20, 2026, 4:59pm UTC](https://forum.graphviz.org/t/replicating-linux-ci-tests-locally/3302/4 "2026-02-20T16:59:31Z")

</div>

Ok, I’ll send a MR.

Meanwhile, in trying to debug a mingw test failure with no Windows machine,  
I found [GitHub - dockur/windows: Windows inside a Docker container.](https://github.com/dockur/windows) which allows running a Windows docker image on Linux (for a while at least, since you don’t have a license). It’s allegedly automated, but it’s a little challenging to automate it completely, since it’s necessary to add a git clone and set up CI env vars to run the scripts. I’ll send out instrucitons for that once I consolidate it into a script or at least a simple procedure to follow.

There’s also a macos version, but that one is apparently non-automated, so I’m not going there yet.
