Checkup · Free Docker build audit

Find the Docker steps that rebuild on every commit

Paste a public GitHub repository. Checkup reads its Dockerfiles and workflows, finds the steps that miss the cache, and shows each fix as a diff.

Try one:

Free. No signup. Reads files only: nothing is built or run.

checkup / example findingExample
MediumDockerfile:3

Dependencies reinstall on every code change

CauseLine 3 copies the whole repo before line 4 installs.
EffectAny changed file reruns npm ci from scratch.
FixCopy the manifests, install, then copy the rest.
11 FROM node:22-slim
22 WORKDIR /app
3-COPY . .
3+COPY package.json package-lock.json ./
44 RUN npm ci
5+COPY . .
56 RUN npm run build
67 CMD ["node", "dist/server.js"]

What Checkup looks for

Each rule is a mistake that makes Docker redo work it already did. Every one of them has a small, safe fix.

Dependencies installed after a full copy

COPY . . sits above the install step, so any changed file reinstalls every dependency.

Dockerfile
1-COPY . .
1+COPY package.json package-lock.json ./
22 RUN npm ci
3+COPY . .
How this rule works

Commit argument declared too early

A commit SHA passed as a build argument is declared above RUN steps that never read it, so they rebuild on every commit.

Dockerfile
1-ARG GIT_SHA
21 RUN apt-get install -y curl
2+ARG GIT_SHA
33 RUN echo $GIT_SHA > /version
How this rule works

No .dockerignore

A full-context copy with no .dockerignore takes .git and local build output into the image.

.dockerignoreNew file
1+.git
2+**/node_modules
How this rule works

Large per-commit layer

Runners only

A source COPY layer big enough that pushing it again on every commit costs real time.

.dockerignore
11 .git
2+docs/
3+test/fixtures/
How this rule works

The free audit, and what it cannot see

The free audit (this page)

  • Reads Dockerfiles, .dockerignore files and workflows of a public repository at its latest commit.
  • Checks the three rules a file alone can show.
  • Shows each fix as a diff you copy and apply yourself.
  • Does not run your build, so it reports no times.

Checkup on BuildPulse runners

  • Reads the step timings of your real Docker builds, on private repositories too.
  • Adds the large per-commit layer rule, measured from what each push uploads.
  • Times the findings it can measure: seconds per build, and minutes lost over the last 7 days.
  • Opens the fix as a pull request in one click when Checkup can write it, and shows before and after once it lands.

Questions

Does Checkup clone or build my repository?

No. The free audit reads text files through the GitHub API at one commit. Nothing is built, run or stored beyond a short cache of the result.

Why are there no times on this page?

Because a file cannot tell you how long a step takes. On BuildPulse runners, Checkup reads the timings of your real builds and shows the measured seconds next to each finding.

Can it check a private repository?

Yes, from inside your BuildPulse org. Turn Checkup on in org settings and it checks the Docker builds that run on BuildPulse runners.

Everything else, including how time and cost are measured, is in the Checkup docs.

Measured numbers and one-click fix PRs

Run your Docker builds on BuildPulse runners and turn Checkup on in org settings. It works on private repositories, times what it finds on every build, and can open the fix as a pull request.

3,000 free runner minutes a month · No credit card required