1# PR title linting.2#3# FORMAT (Conventional Commits 1.0.0):4#5# <type>[optional scope]: <description>6# [optional body]7# [optional footer(s)]8#9# Examples:10# feat(core): add multi‐tenant support11# fix(langchain): resolve error12# docs: update API usage examples13# docs(openai): update API usage examples14#15# Allowed Types:16# * feat — a new feature (MINOR)17# * fix — a bug fix (PATCH)18# * docs — documentation only changes19# * style — formatting, linting, etc.; no code change or typing refactors20# * refactor — code change that neither fixes a bug nor adds a feature21# * perf — code change that improves performance22# * test — adding tests or correcting existing23# * build — changes that affect the build system/external dependencies24# * ci — continuous integration/configuration changes25# * chore — other changes that don't modify source or test files26# * revert — reverts a previous commit27# * release — prepare a new release28# * hotfix — urgent fix29#30# Allowed Scope(s) (optional):31# core, langchain, langchain-classic, model-profiles,32# standard-tests, text-splitters, docs, anthropic, chroma, deepseek, exa,33# fireworks, groq, huggingface, mistralai, nomic, ollama, openai,34# perplexity, qdrant, xai, infra, deps, partners35#36# Multiple scopes can be used by separating them with a comma. For example:37#38# feat(core,langchain): add multi‐tenant support to core and langchain39#40# Note: PRs touching the langchain package should use the 'langchain' scope. It is not41# acceptable to omit the scope for changes to the langchain package, despite it being42# the main package & name of the repo.43#44# Rules:45# 1. The 'Type' must start with a lowercase letter.46# 2. Breaking changes: append "!" after type/scope (e.g., feat!: drop x support)47# 3. When releasing (updating the pyproject.toml and uv.lock), the commit message48# should be: `release(scope): x.y.z` (e.g., `release(core): 1.2.0` with no49# body, footer, or preceeding/proceeding text).50#51# Enforces Conventional Commits format for pull request titles to maintain a clear and52# machine-readable change history.5354name: "🏷️ PR Title Lint"5556permissions:57 pull-requests: read5859on:60 pull_request:61 types: [opened, edited, synchronize]6263jobs:64 # Validates that PR title follows Conventional Commits 1.0.0 specification65 lint-pr-title:66 name: "validate format"67 runs-on: ubuntu-latest68 steps:69 - name: "🚫 Reject empty scope"70 env:71 PR_TITLE: ${{ github.event.pull_request.title }}72 run: |73 if [[ "$PR_TITLE" =~ ^[a-z]+\(\)[!]?: ]]; then74 echo "::error::PR title has empty scope parentheses: '$PR_TITLE'"75 echo "Either remove the parentheses or provide a scope (e.g., 'fix(core): ...')."76 exit 177 fi78 - name: "✅ Validate Conventional Commits Format"79 uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v680 env:81 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}82 with:83 types: |84 feat85 fix86 docs87 style88 refactor89 perf90 test91 build92 ci93 chore94 revert95 release96 hotfix97 scopes: |98 core99 langchain100 langchain-classic101 model-profiles102 standard-tests103 text-splitters104 docs105 anthropic106 chroma107 deepseek108 exa109 fireworks110 groq111 huggingface112 mistralai113 nomic114 ollama115 openai116 openrouter117 perplexity118 qdrant119 xai120 infra121 deps122 partners123 requireScope: false124 disallowScopes: |125 release126 [A-Z]+127 ignoreLabels: |128 ignore-lint-pr-title
Findings
✓ No findings reported for this file.