Installation
Try GLUT immediately without installing anything:
docker run --rm ghcr.io/pandasoft-zz/glut:latest glut --help
Download released binaries and tagged Docker images from GitHub Releases.
Commands and Docker Requirements
| Command | Docker daemon needed? | Notes |
|---|---|---|
glut lint |
No | Reads and validates test files statically. Safe to run anywhere. |
glut doctor |
No | Reads test files, prints lint issues and authoring hints. Safe to run anywhere. |
glut run |
Yes | Executes the pipeline via gitlab-ci-local. Needs a reachable Docker daemon (socket or DinD). |
Use glut lint and glut doctor in lightweight lint-stage jobs. Reserve a
Docker-capable environment for glut run.
Docker Image
GLUT is best used from the Docker image. The image includes GLUT and the runtime
tools that tests need, such as gitlab-ci-local.
gitlab-ci-local runs GitLab CI jobs in Docker containers. Because of that, the
GLUT Docker image must be able to reach a Docker daemon. Use socket sharing for
local development. Use Docker-in-Docker when socket sharing is not available or
when you need stronger isolation.
You can also use the native binary from GitHub Releases. Native use is useful when your machine already has all required tools.
Docker Image
Pull the image:
docker pull ghcr.io/pandasoft-zz/glut:latest
Local Run With Docker Socket
This is the most common local setup. The GLUT container uses the Docker daemon from your host machine.
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$PWD:/work" \
-w /work \
ghcr.io/pandasoft-zz/glut:latest run ./tests
Use this when you run GLUT on Linux, macOS, or Docker Desktop with a working Docker socket.
The mounted socket gives the container control over the host Docker daemon. Use it only with images and tests you trust.
GitLab CI Integration With Docker Socket
This is the simplest pipeline when your GitLab Runner already mounts the host Docker socket into job containers.
stages:
- lint
- test
lint:glut:
stage: lint
image: ghcr.io/pandasoft-zz/glut:latest
script:
- mkdir -p reports
- glut lint --format=json ./tests > reports/glut-lint.json
artifacts:
when: always
paths:
- reports/glut-lint.json
test:glut:
stage: test
image: ghcr.io/pandasoft-zz/glut:latest
needs:
- lint:glut
variables:
DOCKER_HOST: "unix:///var/run/docker.sock"
script:
- mkdir -p reports
- glut run --report=junit:reports/glut-junit.xml ./tests
artifacts:
when: always
reports:
junit: reports/glut-junit.xml
paths:
- reports/glut-junit.xml
Your GitLab Runner must mount /var/run/docker.sock into the job container.
That is a runner configuration setting, not a normal job-level script setting.
The exact setup depends on your GitLab Runner executor.
GitLab CI Integration With Docker-in-Docker
Use Docker-in-Docker when you cannot or do not want to share the host socket. The GLUT container talks to a Docker daemon that runs in a sibling service.
stages:
- lint
- test
lint:glut:
stage: lint
image: ghcr.io/pandasoft-zz/glut:latest
script:
- mkdir -p reports
- glut lint --format=json ./tests > reports/glut-lint.json
artifacts:
when: always
paths:
- reports/glut-lint.json
test:glut:
stage: test
image: ghcr.io/pandasoft-zz/glut:latest
needs:
- lint:glut
services:
- name: docker:25-dind
alias: docker
variables:
DOCKER_HOST: "tcp://docker:2375"
DOCKER_TLS_CERTDIR: ""
script:
- mkdir -p reports
- glut run --report=junit:reports/glut-junit.xml ./tests
artifacts:
when: always
reports:
junit: reports/glut-junit.xml
paths:
- reports/glut-junit.xml
The runner must allow privileged services for Docker-in-Docker.
The JSON lint artifact is useful for debugging and AI tools. GitLab does not
treat it as a native test report. The JUnit report belongs to glut run,
because that command executes tests.
For a local manual check, you can start a Docker daemon container and point GLUT at it:
docker network create glut-dind
docker run --rm -d \
--privileged \
--network glut-dind \
--name glut-docker \
-e DOCKER_TLS_CERTDIR= \
docker:25-dind
docker run --rm \
--network glut-dind \
-e DOCKER_HOST=tcp://glut-docker:2375 \
-v "$PWD:/work" \
-w /work \
ghcr.io/pandasoft-zz/glut:latest run ./tests
For repeatable CI runs, pin a released tag instead of latest.
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$PWD:/work" \
-w /work \
ghcr.io/pandasoft-zz/glut:v1.0.0 run ./tests
Native Binary
Download the archive for your operating system and CPU from GitHub Releases:
https://github.com/pandasoft-zz/glut/releases
Unpack the archive and put glut on PATH.
glut version
Native runs need these tools on PATH:
- POSIX shell
gitbashgitlab-ci-local- Docker daemon access
Use Docker if you do not want to manage these dependencies yourself.
First Check
With Docker:
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-v "$PWD:/work" \
-w /work \
ghcr.io/pandasoft-zz/glut:latest lint ./tests
With the native binary:
glut lint ./tests
glut doctor ./tests
glut run ./tests
doctor does not need Docker or gitlab-ci-local. It reads test files,
reports lint issues, prints authoring hints, and shows job coverage. Run it
before run to catch weak or incomplete tests early.
See Doctor reference for example output and guidance on which hints are worth acting on.
Windows
Windows is not a target runtime. Use the Docker image on Windows.