# Verify Dist

> Regenerate and commit dist/index.js when source files or runtime deps change

- Skill: `getsentry/verify-dist` (Agent Skill)
- Install (CLI): `npx skillmds@latest add getsentry/verify-dist`
- Raw SKILL.md: https://api.skillmd.com/api/skills/getsentry/verify-dist/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Sentry (https://skillmd.com/u/getsentry)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/getsentry/verify-dist

---


# Verify Dist Skill

`action-release` ships a bundle in `dist/` built by `ncc`. The `verify-dist` CI workflow (`.github/workflows/verify-dist.yml`) fails any PR where the committed bundle does not match the source. This skill keeps them in sync locally.

`dist/` is a directory, not a single file. Alongside `dist/index.js`, `ncc` emits code-split chunks (`dist/319.index.js` and friends) for every dynamic `import()` in a dependency. `@opentelemetry/resources` loads its per-platform `getMachineId` that way, so the chunks arrive with `@sentry/node`. `index.js` loads them at runtime with a relative `require`, so they must sit next to it and must all be committed.

## When to invoke

- You changed anything under `src/`.
- You bumped a **runtime** dep in `package.json` (anything under `dependencies`, not `devDependencies`).
- CI posted "Detected uncommitted changes after build" on a PR.

## Modes

### `--check` (default)

Report whether `dist/` is in sync with the current source tree. Do not modify anything.

```bash
yarn install --frozen-lockfile
yarn build
git diff --ignore-space-at-eol --stat dist/
git ls-files --others --exclude-standard dist/   # new chunks show up here, not in git diff
```

- If both commands print nothing → `dist/` is in sync. Done.
- If either prints something → report the changed files and line counts, then ask the user whether to switch to `--fix`.

### `--fix`

Rebuild and stage `dist/`.

```bash
yarn install
yarn build
git add dist/
git status --short dist/
```

Do **not** commit automatically — let the user review the bundle diff first. A reasonable follow-up commit message:

```
build: regenerate dist/index.js
```

Or, if tied to a source change:

```
<type>(<scope>): <summary>

Regenerates dist/index.js.
```

### Before the user commits: pre-commit hook reminder

Whoever runs the follow-up commit needs the repo's pre-commit hooks installed. Verify with `ls .git/hooks/pre-commit`; if missing, run `make` (installs yarn deps + `pre-commit install`) or `pre-commit install`.

The `set-docker-tag-from-branch` hook will rewrite `action.yml` on the first commit of a branch and fail the commit. Recover by staging `action.yml` and committing again (**never `--amend`** — the hook-failed commit never landed):

```bash
git add action.yml
git commit -m "<same message>"
```

CI does **not** run pre-commit. CI's `prepare-docker` job rejects PRs where `action.yml`'s Docker tag still matches a semver like `3.6.0`, so keeping the tag in sync via the local hook is what prevents the CI failure.

## Notes

- The CI check runs `git diff --ignore-space-at-eol dist/` — whitespace-only diffs pass, anything else fails. Match that locally.
- CI also fails on untracked files in `dist/` via `git ls-files --others --exclude-standard dist/`. `git diff` alone never reports a brand-new chunk, so a missing chunk would otherwise pass CI and only break at runtime on whichever platform needs it.
- `yarn build` shells out to `ncc build src/main.ts -e @sentry/cli`. `@sentry/cli` is deliberately excluded from the bundle because it ships its own native binaries at runtime.
- The bundle diff can be large even for small source changes (minifier + bundler reshuffles). That is expected; just verify the intended symbols are present.
- Never hand-edit `dist/index.js` or any chunk. Always regenerate.

## Related files

- `.github/workflows/verify-dist.yml` — the CI check this skill satisfies.
- `package.json` → `scripts.build` — the canonical build command.
- `src/main.ts` — the ncc entry point.

