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
17 changes: 15 additions & 2 deletions .cspell.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@
"vkozlov",
"Автовибір",
"автовизначити",
"Автоміграція",
"Агрегуюча",
"апдейтер",
"апдейтера",
Expand All @@ -81,21 +82,24 @@
"брифу",
"вебвʼю",
"воркспейсом",
"гейтить",
"гейті",
"гейтованою",
"гейтом",
"гейтять",
"дашбордом",
"дедлайнових",
"таймзони",
"дебаунс",
"дебаунсить",
"дедлайнових",
"декомпозує",
"деплой",
"деривується",
"дефолта",
"джоб",
"джоба",
"джоби",
"джобів",
"джобу",
"диспатч",
"диспатча",
"екшн",
Expand All @@ -104,6 +108,7 @@
"ендпоінти",
"ескальовано",
"ескалювати",
"заготовками",
"залогінений",
"запропонуючи",
"запускувані",
Expand All @@ -115,6 +120,9 @@
"клікнутого",
"комітиться",
"Композабл",
"консюмер",
"консюмера",
"консюмерів",
"конфігурованих",
"конфігурованого",
"краш",
Expand All @@ -124,8 +132,10 @@
"леджер",
"лейбл",
"лендинг",
"лінти",
"логується",
"макроса",
"мапінгом",
"маршрутизуються",
"машинно",
"метаключ",
Expand Down Expand Up @@ -170,6 +180,7 @@
"працюючого",
"пробросу",
"прогон",
"прокинуті",
"пропси",
"пропсом",
"ранів",
Expand All @@ -180,9 +191,11 @@
"рунги",
"рунгів",
"самозатиралися",
"скіпне",
"сконфігуровазованого",
"скоуп",
"скоупи",
"скоупитись",
"скоупом",
"скоупу",
"спавнені",
Expand Down
138 changes: 138 additions & 0 deletions .cursor/rules/n-ga.mdc
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,144 @@ jobs:
# …кроки деплою сервісу (build/push/apply)
```, деталі — [service_deploy_workflow.mdc](./service_deploy_workflow/service_deploy_workflow.mdc). Співіснує з file-type-workflow (`lint-js.yml` тощо) — ті покривають зміни поза сервіс-каталогами.

- `lint-repo.yml`:

```yaml
name: Lint repo-wide

on:
push:
branches:
- dev
- main

pull_request:
branches:
- dev
- main

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

jobs:
lint-repo:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v6
with:
persist-credentials: false

- uses: ./.github/actions/setup-bun-deps

- name: Repo-wide lint
run: bunx n-rules lint --repo-wide --no-fix
```

## Repo-wide лінти у прикладі (`lint-repo.yml`, обовʼязковий)

Перевірки без path-підтримки (`scope: full` без glob: knip, jscpd, dep-policy тощо) живуть в окремому обовʼязковому workflow `.github/workflows/lint-repo.yml` із кроком `bunx n-rules lint --repo-wide --no-fix`. Він **не гейтить деплой** — жоден deploy-workflow не має на нього `needs`. Деталі: [lint_repo_yml.mdc](./lint_repo_yml/lint_repo_yml.mdc).

## Сервіс-орієнтовані deploy-workflow у прикладі (опційно)

Монорепо з деплой-сервісами (каталог сервісу, напр. `run/nexus`) оформлює деплой per-service workflow: тригер `paths` по каталогу (dir-scoped glob `run/<service>/**` — саме він, а не імʼя файлу, робить workflow сервісним; імʼя довільне — `npm-publish.yml`, `deploy-<service>.yml`, і **не перейменовуй наявні** — OIDC trusted publishing привʼязаний до імені) → джоба `plan` (`bunx n-rules ci plan --path <svc> --github`) → паралельні `lint-<domain>`-джоби з гейтом по outputs плану + тести сервісу → deploy з `needs` на всі перевірки (skipped не блокує, failed блокує). Форму перевіряє rego-концерн `service_deploy_workflow` — вимоги вмикаються лише за наявності lint-джоб у workflow; приклад — `deploy-service.yml`:

```yaml
# Документаційний приклад сервіс-орієнтованого deploy-workflow (ga.mdc).
# Це НЕ deep-subset-канон (перелік сервісів консюмер-специфічний) — форму
# перевіряє service_deploy_workflow.rego за ЗМІСТОМ: сервісний workflow =
# dir-scoped glob у on.push.paths. Імʼя файлу довільне (npm-publish.yml,
# deploy-<service>.yml, …) — не перейменовуй наявні: OIDC trusted publishing
# привʼязаний до імені workflow. Плейсхолдер run/<service> заміни на каталог
# сервісу; набір lint-<domain> джоб добери під стеки сервісу (зайва джоба
# нешкідлива — ci plan її скіпне).
name: Deploy <service>

on:
push:
branches:
- dev
- main
paths:
- 'run/<service>/**'

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

jobs:
plan:
runs-on: ubuntu-latest
permissions:
contents: read
outputs:
js: ${{ steps.plan.outputs.js }}
python: ${{ steps.plan.outputs.python }}
any: ${{ steps.plan.outputs.any }}
steps:
- uses: actions/checkout@v6
with:
persist-credentials: false
fetch-depth: 0

- uses: ./.github/actions/setup-bun-deps

- id: plan
run: bunx n-rules ci plan --path run/<service> --github

lint-js:
needs: plan
if: needs.plan.outputs.js == 'true'
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v6
with:
persist-credentials: false
fetch-depth: 0

- uses: ./.github/actions/setup-bun-deps

- run: bunx n-rules lint js --path run/<service> --no-fix

# …lint-<domain> для кожного домену сервісу (python/docker/k8s/security/…)

test:
needs: plan
if: needs.plan.outputs.any == 'true'
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v6
with:
persist-credentials: false
fetch-depth: 0

- uses: ./.github/actions/setup-bun-deps

# python-стек: перед тестами ще uv (uses: astral-sh/setup-uv@v7 + uv sync --locked)
- run: bun test run/<service>

deploy:
needs:
- plan
- lint-js
- test
# Skipped-лінт (гейт ci plan) НЕ блокує деплой; failed — блокує.
if: ${{ !cancelled() && needs.plan.result == 'success' && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
persist-credentials: false

# …кроки деплою сервісу (build/push/apply)
```, деталі — [service_deploy_workflow.mdc](./service_deploy_workflow/service_deploy_workflow.mdc). Співіснує з file-type-workflow (`lint-js.yml` тощо) — ті покривають зміни поза сервіс-каталогами.

## Структура `clean-ga-workflows.yml` — видалення завершених workflow runs

Rego-пакет: `ga.clean_ga_workflows`
Expand Down
5 changes: 5 additions & 0 deletions app/.changes/260721-1652.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
bump: patch
section: Changed
---
Кореневий Cargo workspace (rust/workspace_root): члени app/src-tauri + owner/src-tauri + owner/owner-llm, один Cargo.lock і target/ у корені; lint-rust покриває всі члени
1 change: 1 addition & 0 deletions mt/lint-fix-js-knip-1aa23aeb/task.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,6 @@ npx @7n/rules lint --no-fix --cwd ../.. js
## Inputs

Target-файли:

- `.pi/extensions/n-rules-adr/index.ts`
- `.pi/extensions/rtk.ts`
1 change: 1 addition & 0 deletions mt/lint-fix-k8s-manifests-f9cb7a94/task.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,5 @@ npx @7n/rules lint --no-fix --cwd ../.. k8s
## Inputs

Target-файли:

- (whole-repo concern)
1 change: 1 addition & 0 deletions mt/lint-fix-vue-packages-c8869493/task.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,5 @@ npx @7n/rules lint --no-fix --cwd ../.. vue
## Inputs

Target-файли:

- (whole-repo concern)
5 changes: 5 additions & 0 deletions owner/.changes/260721-1652-2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
bump: patch
section: Changed
---
Кореневий Cargo workspace: owner/Cargo.toml прибрано на користь кореневого; FakeOmlxProvider у тестах owner-llm (core_test_isolation)
Loading