Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .commitlintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,14 @@ const scopes = [
];

module.exports = {
// commitlint CLI config (used in CI)
extends: ["@commitlint/config-conventional"],
rules: {
"scope-enum": [2, "always", scopes],
"header-max-length": [2, "always", 100],
},

// cz-git config (used by `git cz` interactive prompt)
allowCustomIssuePrefixs: false,
allowEmptyIssuePrefixs: false,
issuePrefixs: [{ value: "Closes" }],
Expand Down
48 changes: 48 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# Dependabot автоматически создаёт PR при выходе новых версий зависимостей.
# Документация: https://docs.github.com/en/code-security/dependabot/dependabot-version-updates

version: 2

updates:
# npm: commitlint, cz-git, @commitlint/config-conventional
- package-ecosystem: npm
directory: /
schedule:
interval: monthly
commit-message:
prefix: "chore(other)"
labels:
- dependencies
open-pull-requests-limit: 3
# Группировка: все npm-обновления в один PR вместо отдельного на каждый пакет
groups:
npm-dependencies:
patterns:
- "*"
# Игнорировать patch-обновления (0.0.x) — обычно это мелкие фиксы,
# которые не стоят отдельного PR для devDependencies
ignore:
- dependency-name: "*"
update-types:
- "version-update:semver-patch"

# GitHub Actions: actions/checkout, actions/setup-node, actions/cache
- package-ecosystem: github-actions
directory: /
schedule:
interval: monthly
commit-message:
prefix: "ci(other)"
labels:
- dependencies
- github-actions
open-pull-requests-limit: 3
# Все actions-обновления в один PR
groups:
github-actions:
patterns:
- "*"
ignore:
- dependency-name: "*"
update-types:
- "version-update:semver-patch"
69 changes: 69 additions & 0 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Конфигурация для actions/labeler.
# Автоматически добавляет лейблы к PR на основе изменённых файлов.
# Документация: https://github.com/actions/labeler

fish:
- changed-files:
- any-glob-to-any-file: "home/dot_config/fish/**"

sketchybar:
- changed-files:
- any-glob-to-any-file: "home/dot_config/sketchybar/**"

yabai:
- changed-files:
- any-glob-to-any-file: "home/dot_config/yabai/**"

skhd:
- changed-files:
- any-glob-to-any-file: "home/dot_config/skhd/**"

nvim:
- changed-files:
- any-glob-to-any-file: "home/dot_config/nvim/**"

wezterm:
- changed-files:
- any-glob-to-any-file: "home/dot_config/wezterm/**"

yazi:
- changed-files:
- any-glob-to-any-file: "home/dot_config/yazi/**"

git:
- changed-files:
- any-glob-to-any-file:
- "home/dot_config/git/**"
- "home/dot_config/lazygit/**"

mise:
- changed-files:
- any-glob-to-any-file: "home/dot_config/mise/**"

brew:
- changed-files:
- any-glob-to-any-file: "home/dot_config/homebrew/**"

raycast:
- changed-files:
- any-glob-to-any-file: "home/dot_bin/raycast/**"

ci:
- changed-files:
- any-glob-to-any-file:
- ".github/**"
- ".commitlintrc.js"
- "package.json"

docs:
- changed-files:
- any-glob-to-any-file:
- "docs/**"
- "*.md"

chezmoi:
- changed-files:
- any-glob-to-any-file:
- "home/.chezmoiscripts/**"
- "home/.chezmoiexternals/**"
- "home/.chezmoi*"
31 changes: 31 additions & 0 deletions .github/workflows/commit-lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Проверка коммитов на соответствие Conventional Commits.
# Использует commitlint с конфигом из .commitlintrc.js.
#
# wagoid/commitlint-github-action — готовый action, который:
# 1. Сам устанавливает Node.js и зависимости из package.json
# 2. Корректно обрабатывает force-push, merge-коммиты, squash
# 3. Проверяет все коммиты в PR за один шаг

name: Commit Lint

on:
pull_request:
branches: [main]

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
cancel-in-progress: true

jobs:
commitlint:
name: Validate commits
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

# wagoid/commitlint-github-action сам найдёт .commitlintrc.js,
# установит зависимости и проверит все коммиты в PR.
- uses: wagoid/commitlint-github-action@v6
26 changes: 26 additions & 0 deletions .github/workflows/labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Автоматически добавляет лейблы к PR на основе изменённых файлов.
# Конфигурация маппинга: .github/labeler.yml
#
# Пример: PR с изменениями в home/dot_config/fish/ получит лейбл "fish".
# Лейблы создаются автоматически при первом использовании.

name: Labeler

on:
pull_request_target:
types: [opened, synchronize, reopened]

# Нужны права для добавления лейблов к PR
permissions:
contents: read
pull-requests: write

jobs:
labeler:
name: Label PR
runs-on: ubuntu-latest

steps:
- uses: actions/labeler@v5
with:
sync-labels: true
50 changes: 50 additions & 0 deletions .github/workflows/lock-threads.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
# Автоматическая блокировка неактивных issues и PR.
#
# После N дней без активности добавляет комментарий и блокирует обсуждение.
# Это предотвращает некропостинг в старых issues и поддерживает порядок.
#
# dessant/lock-threads запускается по расписанию (cron) и проверяет
# все закрытые issues/PR на дату последней активности.

name: Lock Threads

on:
schedule:
# Запуск раз в неделю, в понедельник в 00:00 UTC
- cron: "0 0 * * 1"

# Позволяет запустить вручную из вкладки Actions
workflow_dispatch:

permissions:
issues: write
pull-requests: write

concurrency:
group: lock-threads

jobs:
lock:
name: Lock old threads
runs-on: ubuntu-latest

steps:
- uses: dessant/lock-threads@v5
with:
github-token: ${{ secrets.GITHUB_TOKEN }}

# Блокировать issues, закрытые более 60 дней назад
issue-inactive-days: 60
issue-comment: >
This issue has been automatically locked since there
has been no recent activity after it was closed.
Please open a new issue for related bugs or questions.
issue-lock-reason: resolved

# Блокировать PR, закрытые/смёрженные более 60 дней назад
pr-inactive-days: 60
pr-comment: >
This pull request has been automatically locked since there
has been no recent activity after it was closed.
Please open a new issue for related discussions.
pr-lock-reason: resolved
61 changes: 61 additions & 0 deletions .github/workflows/lua-lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Проверка форматирования Lua-файлов с помощью StyLua.
# Покрывает: SketchyBar, Neovim, WezTerm, Yazi.
#
# StyLua — форматтер для Lua, аналог Prettier для JS.
# Использует конфиг из home/dot_config/nvim/stylua.toml:
# indent_type = "Tabs", indent_width = 4, column_width = 120

name: Lua Lint

on:
push:
branches: [main]
# Запускается только при изменении Lua-файлов
paths:
- "home/dot_config/**/*.lua"
pull_request:
branches: [main]
paths:
- "home/dot_config/**/*.lua"

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

# Версия StyLua — вынесена в env для удобства обновления
env:
STYLUA_VERSION: "2.0.2"

jobs:
stylua:
name: StyLua format check
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

# Скачать StyLua из GitHub Releases и добавить в PATH.
# Кешируется между запусками по версии.
- name: Cache StyLua
id: cache-stylua
uses: actions/cache@v4
with:
path: ~/.local/bin/stylua
key: stylua-${{ env.STYLUA_VERSION }}

- name: Install StyLua
if: steps.cache-stylua.outputs.cache-hit != 'true'
run: |
mkdir -p ~/.local/bin
curl -fsSL "https://github.com/JohnnyMorganz/StyLua/releases/download/v${STYLUA_VERSION}/stylua-linux-x86_64.zip" -o stylua.zip
unzip stylua.zip -d ~/.local/bin
chmod +x ~/.local/bin/stylua

- name: Add StyLua to PATH
run: echo "$HOME/.local/bin" >> "$GITHUB_PATH"

# --check: не модифицирует файлы, только проверяет.
# Если форматирование не соответствует — exit code 1.
# --config-path: путь к stylua.toml (он лежит в nvim/, но применим ко всем Lua)
- name: Check Lua formatting
run: stylua --check --config-path home/dot_config/nvim/stylua.toml home/
37 changes: 37 additions & 0 deletions .github/workflows/markdown-lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Линтинг Markdown-документации.
#
# Проверяет: последовательность заголовков, пустые строки вокруг блоков кода,
# корректность списков, длину строк и другие правила форматирования.
# Конфигурация: .markdownlint.yml (создаётся в этом же коммите).

name: Markdown Lint

on:
push:
branches: [main]
paths:
- "**/*.md"
pull_request:
branches: [main]
paths:
- "**/*.md"

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
markdownlint:
name: Lint Markdown
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

# avto-dev/markdown-lint — запускает markdownlint-cli в Docker.
# fix: false — только проверка, без автоисправления.
# config: путь к конфигу с правилами.
- uses: avto-dev/markdown-lint@v1
with:
args: "**/*.md"
config: ".markdownlint.yml"
49 changes: 49 additions & 0 deletions .github/workflows/misspell.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Поиск опечаток в коде, комментариях и документации.
#
# Использует reviewdog + misspell — оставляет inline-комментарии
# прямо в diff PR, указывая на конкретную строку с опечаткой.
# На push в main просто фейлится при наличии опечаток.

name: Misspell

on:
push:
branches: [main]
pull_request:
branches: [main]

permissions:
contents: read
pull-requests: write

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
misspell:
name: Check spelling
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

# reviewdog/action-misspell:
# - Сканирует все текстовые файлы в репозитории
# - На PR: оставляет inline-комментарии с предложениями исправлений
# - На push: выводит ошибки в лог
# - locale: US — проверяет по американскому английскому
- uses: reviewdog/action-misspell@v1
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
reporter: github-pr-review
locale: US
level: warning
# Пропускать бинарные и сгенерированные файлы
exclude: |
.git/*
node_modules/*
*.png
*.jpg
*.gif
*.ico
Loading