mirror of
https://github.com/langchain-ai/langchain.git
synced 2026-10-05 01:15:09 +03:00
Closes #40793 --- Docs-only repair from a full audit of developer-facing markdown against the repository as source of truth. A new contributor following `AGENTS.md` from the repo root currently hits missing files and commands that cannot run; package docs and a workflow comment also drift from reality. **What was wrong** - `AGENTS.md` listed root-level `pyproject.toml`, `uv.lock`, and `Makefile` as key config files — none exist at the repo root (config is per package under `libs/*/`). - Setup/test/lint examples (`uv sync --all-groups`, `make test` / `lint` / `format`) had no working directory, so they fail if copy-pasted from the root. - The monorepo structure tree omitted `openwiki/` and `AGENTS.md`. - `libs/README.md` omitted the `model-profiles/` package from its directory list. - Root `README.md` linked Deep Agents with `http://` while every other docs link uses `https://`. - The PR-title paragraph claimed scopes are mandatory “with no exceptions”, but `pr_lint.yml` sets `requireScope: false` (only empty `type():` parens are rejected). - Grammar (“require” → “requires”), an unfinished editable-installs sentence, incomplete `pr_lint.yml` scope comment (missing `openrouter`, `typesafe`), and a stale `make help` line pointing at a non-existent top-level Makefile. **What changed** - Clarified per-package config layout and required `cd` into `libs/<package>` before `uv` / `make` commands. - Completed the structure diagram; added `model-profiles/` to `libs/README.md`. - Switched Deep Agents links to `https://`. - Aligned the scope guidance with actual CI behavior (documented, did not change `requireScope`). - Tightened the `pr_lint.yml` comment and removed the dead Makefile help line. No runtime code, tests, or CI logic changed — comments and markdown only. AI assistance was used to prepare this change; I reviewed the diff against the repository layout.
130 lines
4.1 KiB
YAML
130 lines
4.1 KiB
YAML
# PR title linting.
|
||
#
|
||
# FORMAT (Conventional Commits 1.0.0):
|
||
#
|
||
# <type>[optional scope]: <description>
|
||
# [optional body]
|
||
# [optional footer(s)]
|
||
#
|
||
# Examples:
|
||
# feat(core): add multi‐tenant support
|
||
# fix(langchain): resolve error
|
||
# docs: update API usage examples
|
||
# docs(openai): update API usage examples
|
||
#
|
||
# Allowed Types:
|
||
# * feat — a new feature (MINOR)
|
||
# * fix — a bug fix (PATCH)
|
||
# * docs — documentation only changes
|
||
# * style — formatting, linting, etc.; no code change or typing refactors
|
||
# * refactor — code change that neither fixes a bug nor adds a feature
|
||
# * perf — code change that improves performance
|
||
# * test — adding tests or correcting existing
|
||
# * build — changes that affect the build system/external dependencies
|
||
# * ci — continuous integration/configuration changes
|
||
# * chore — other changes that don't modify source or test files
|
||
# * revert — reverts a previous commit
|
||
# * release — prepare a new release
|
||
# * hotfix — urgent fix
|
||
#
|
||
# Allowed Scope(s) (optional):
|
||
# core, langchain, langchain-classic, model-profiles,
|
||
# standard-tests, text-splitters, docs, anthropic, chroma, deepseek, exa,
|
||
# fireworks, groq, huggingface, mistralai, nomic, ollama, openai,
|
||
# openrouter, perplexity, qdrant, typesafe, xai, infra, deps, partners
|
||
#
|
||
# Multiple scopes can be used by separating them with a comma. For example:
|
||
#
|
||
# feat(core,langchain): add multi‐tenant support to core and langchain
|
||
#
|
||
# Note: PRs touching the langchain package should use the 'langchain' scope. It is not
|
||
# acceptable to omit the scope for changes to the langchain package, despite it being
|
||
# the main package & name of the repo.
|
||
#
|
||
# Rules:
|
||
# 1. The 'Type' must start with a lowercase letter.
|
||
# 2. Breaking changes: append "!" after type/scope (e.g., feat!: drop x support)
|
||
# 3. When releasing (updating the pyproject.toml and uv.lock), the commit message
|
||
# should be: `release(scope): x.y.z` (e.g., `release(core): 1.2.0` with no
|
||
# body, footer, or preceeding/proceeding text).
|
||
#
|
||
# Enforces Conventional Commits format for pull request titles to maintain a clear and
|
||
# machine-readable change history.
|
||
|
||
name: "🏷️ PR Title Lint"
|
||
|
||
permissions:
|
||
pull-requests: read
|
||
|
||
on:
|
||
pull_request:
|
||
types: [opened, edited, synchronize]
|
||
|
||
jobs:
|
||
# Validates that PR title follows Conventional Commits 1.0.0 specification
|
||
lint-pr-title:
|
||
name: "validate format"
|
||
runs-on: ubuntu-latest
|
||
steps:
|
||
- name: "🚫 Reject empty scope"
|
||
env:
|
||
PR_TITLE: ${{ github.event.pull_request.title }}
|
||
run: |
|
||
if [[ "$PR_TITLE" =~ ^[a-z]+\(\)[!]?: ]]; then
|
||
echo "::error::PR title has empty scope parentheses: '$PR_TITLE'"
|
||
echo "Either remove the parentheses or provide a scope (e.g., 'fix(core): ...')."
|
||
exit 1
|
||
fi
|
||
- name: "✅ Validate Conventional Commits Format"
|
||
uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6
|
||
env:
|
||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||
with:
|
||
types: |
|
||
feat
|
||
fix
|
||
docs
|
||
style
|
||
refactor
|
||
perf
|
||
test
|
||
build
|
||
ci
|
||
chore
|
||
revert
|
||
release
|
||
hotfix
|
||
scopes: |
|
||
core
|
||
langchain
|
||
langchain-classic
|
||
model-profiles
|
||
standard-tests
|
||
text-splitters
|
||
docs
|
||
anthropic
|
||
chroma
|
||
deepseek
|
||
exa
|
||
fireworks
|
||
groq
|
||
huggingface
|
||
mistralai
|
||
nomic
|
||
ollama
|
||
openai
|
||
openrouter
|
||
perplexity
|
||
qdrant
|
||
typesafe
|
||
xai
|
||
infra
|
||
deps
|
||
partners
|
||
requireScope: false
|
||
disallowScopes: |
|
||
release
|
||
[A-Z]+
|
||
ignoreLabels: |
|
||
ignore-lint-pr-title
|