solrbot/Logchange Action

Enforce logchange changelog entries in PRs with optional AI generation via Claude

View on GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Stale
License
None
namedescriptionrequireddefault
changelog-pathPath to the changelog/unreleased directorynochangelog/unreleased
on-missing-entryAction to take when changelog entry is missing: "fail", "warn", or "generate"nofail
missing-entry-messageCustom message to display when changelog entry is missingnoThis pull request is missing a logchange entry in the changelog/unreleased directory
skip-files-regexIf all edited files match this regex pattern, skip changelog requirementno""
skip-changelog-labelsComma-separated list of PR labels that skip changelog requirement (e.g., documentation,chore,skip-changelog)no""
dry-runIf true, generate suggestions without posting comments or setting outputs (for testing configuration)nofalse
claude-tokenClaude API token for AI-powered changelog generation (required if on-missing-entry is "generate")no
claude-modelClaude model to use for generationnoclaude-opus-4-1-20250805
claude-system-promptCustom system prompt for Claude changelog generationno
changelog-languageLanguage to write the generated changelog entry innoEnglish
max-tokens-contextMaximum tokens to use for PR diff contextno5000
max-tokens-per-fileMaximum tokens per file when truncating diffno1000
changelog-typesComma-separated list of allowed changelog types (JSON format)noadded,changed,deprecated,removed,fixed,security,dependency_update,other
mandatory-fieldsComma-separated list of mandatory fields in changelog entrynotitle
forbidden-fieldsComma-separated list of forbidden fields in changelog entryno""
optional-fieldsComma-separated list of optional fields (empty means all standard fields allowed)no""
legacy-changelog-pathsComma-separated list of legacy changelog file paths to detect (e.g., CHANGELOG.md,HISTORY.txt). Defaults to CHANGELOG.md. Set to empty string to disable legacy changelog detection.noCHANGELOG.md
on-legacy-entryAction when legacy changelog entry is found. Always fails the action with different levels of help: "fail" (just fail), "warn" (fail + comment), "remove" (fail + removal suggestions), "convert" (fail + removal suggestions + LLM conversion to logchange)noconvert
on-legacy-and-logchangeAction when both legacy and logchange entries in same PR: "fail", "warn", or "ignore"nowarn
legacy-entry-messageCustom message when legacy changelog entry is foundnoI detected a legacy changelog entry. Converting it to logchange format...
legacy-conflict-messageCustom message when both legacy and logchange entries are presentnoThis PR contains both legacy and logchange changelog entries. Please use only logchange format.
external-issue-regexRegex pattern to detect external issue references (e.g., JIRA-123). Must have capture group for issue ID. Example: "JIRA-(\d+)"no""
external-issue-url-templateURL template for external issues with {id} placeholder. Example: "https://jira.example.com/browse/{id}"no""
generate-important-notesWhether to instruct AI to generate important_notes in changelog entries (default: true)notrue
github-issue-detectionWhether to detect GitHub issue references (#123) in PR description (default: true)notrue
issue-tracker-url-detectionWhether to detect issue tracker URLs (via LLM filtering) in PR description. Only URLs matching configured external issue trackers are added as links (default: true)notrue
validation-fail-messageCustom message to display when changelog entry validation failsnoThe changelog entry does not comply with the required format
validation-fail-workflowWhether to fail the workflow on validation errors or just commentnotrue
namedescription
changelog-foundWhether a changelog entry was found
changelog-validWhether the changelog entry is valid
changelog-generatedWhether a changelog entry was generated
legacy-entry-foundWhether a legacy changelog entry was found
legacy-convertedWhether a legacy entry was converted to logchange format
legacy-conflictWhether both legacy and logchange entries were found
generation-errorError message if generation failed