# Behavior traces — semantic-release/semantic-release

> Canonical page: https://codevetter.com/unpack/semantic-release/behavior-traces

# Behavior traces — semantic-release/semantic-release

Scanned commit e8c2436e5704a6d1fa5b4aa69238f50edbe586bf (2026-09-21). Generated by codevetter codevetter 1.15.0 on 2026-10-02.

Source inspection; upstream code and tests were not executed.

The inspected flows include CLI startup, new-version publication, and promotion of an existing release to another channel. Additional branches explain dry-run behavior, skipped releases, preparation commits, and failures. Execution order comes from implementation rather than the README's simplified step table.
- Startup: bin checks Node and launches execa(git --version), then calls cli; cli parses options, enables debug if requested, imports index.js, and the API installs masking, detects CI, creates a logger, calls getConfig, then run. — [bin/semantic-release.js#L17-L42](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/bin/semantic-release.js#L17-L42) [cli.js#L43-L56](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/cli.js#L43-L56) [index.js#L259-L278](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/index.js#L259-L278)
- Eligibility: run forces dry-run outside known CI unless noCi is set, skips CI pull requests unless noCi, then calls verify, getGitAuthUrl, and getBranches; a branch absent from normalized release branches returns false. — [index.js#L43-L78](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/index.js#L43-L78)
- Authorization: run calls verifyAuth; if that fails, isBranchUpToDate can return false and skip publication, otherwise the error becomes EGITNOPERMISSION before verifyConditions runs. — [index.js#L86-L106](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/index.js#L86-L106) [lib/git.js#L209-L215](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/git.js#L209-L215) [lib/git.js#L296-L302](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/git.js#L296-L302)
- New version: getLastRelease → getTagHead when available → getCommits → analyzeCommits → getGitHead → getNextVersion → makeTag; non-prerelease versions outside branch.range throw EINVALIDNEXTVERSION. — [index.js#L159-L195](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/index.js#L159-L195) [lib/get-next-version.js#L5-L34](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/get-next-version.js#L5-L34)
- Publication: verifyRelease → generateNotes → prepare → tag → addNote → push → pushNotes → publish → success; the API finally returns selected context fields. — [index.js#L198-L231](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/index.js#L198-L231) [lib/git.js#L227-L252](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/git.js#L227-L252) [lib/git.js#L371-L376](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/git.js#L371-L376)
- Preparation commits: after each prepare plugin, getGitHead detects a changed HEAD, updates nextRelease.gitHead, regenerates notes, and passes updated release data to the following prepare plugin. — [lib/definitions/plugins.js#L52-L68](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/definitions/plugins.js#L52-L68) [lib/plugins/pipeline.js#L37-L50](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/plugins/pipeline.js#L37-L50)
- Channel promotion: getReleaseToAdd chooses an eligible merged version → getTagHead resolves release heads → maintenance mergeRange is checked → getCommits and generateNotes run → updated channel notes are pushed → addChannel and success run. — [lib/get-release-to-add.js#L20-L57](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/lib/get-release-to-add.js#L20-L57) [index.js#L110-L151](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/index.js#L110-L151)
- Failure: run errors enter callFail, which sends only semanticRelease errors to fail plugins and logs fail-hook errors; the outer catch logs the original error, removes output hooks, and rethrows for CLI exit code 1. — [index.js#L234-L257](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/index.js#L234-L257) [index.js#L277-L289](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/index.js#L277-L289) [cli.js#L57-L62](https://github.com/semantic-release/semantic-release/blob/e8c2436e5704a6d1fa5b4aa69238f50edbe586bf/cli.js#L57-L62)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
