diff --git a/.cspell.json b/.cspell.json index cf33b78..682ac11 100644 --- a/.cspell.json +++ b/.cspell.json @@ -65,6 +65,7 @@ "vkozlov", "Автовибір", "автовизначити", + "Автоміграція", "Агрегуюча", "апдейтер", "апдейтера", @@ -81,11 +82,12 @@ "брифу", "вебвʼю", "воркспейсом", + "гейтить", + "гейті", "гейтованою", "гейтом", + "гейтять", "дашбордом", - "дедлайнових", - "таймзони", "дебаунс", "дебаунсить", "дедлайнових", @@ -93,9 +95,11 @@ "деплой", "деривується", "дефолта", + "джоб", "джоба", "джоби", "джобів", + "джобу", "диспатч", "диспатча", "екшн", @@ -104,6 +108,7 @@ "ендпоінти", "ескальовано", "ескалювати", + "заготовками", "залогінений", "запропонуючи", "запускувані", @@ -115,6 +120,9 @@ "клікнутого", "комітиться", "Композабл", + "консюмер", + "консюмера", + "консюмерів", "конфігурованих", "конфігурованого", "краш", @@ -124,8 +132,10 @@ "леджер", "лейбл", "лендинг", + "лінти", "логується", "макроса", + "мапінгом", "маршрутизуються", "машинно", "метаключ", @@ -170,6 +180,7 @@ "працюючого", "пробросу", "прогон", + "прокинуті", "пропси", "пропсом", "ранів", @@ -180,9 +191,11 @@ "рунги", "рунгів", "самозатиралися", + "скіпне", "сконфігуровазованого", "скоуп", "скоупи", + "скоупитись", "скоупом", "скоупу", "спавнені", diff --git a/.cursor/rules/n-ga.mdc b/.cursor/rules/n-ga.mdc index f7a3557..c3a53fd 100644 --- a/.cursor/rules/n-ga.mdc +++ b/.cursor/rules/n-ga.mdc @@ -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//**` — саме він, а не імʼя файлу, робить workflow сервісним; імʼя довільне — `npm-publish.yml`, `deploy-.yml`, і **не перейменовуй наявні** — OIDC trusted publishing привʼязаний до імені) → джоба `plan` (`bunx n-rules ci plan --path --github`) → паралельні `lint-`-джоби з гейтом по 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-.yml, …) — не перейменовуй наявні: OIDC trusted publishing +# привʼязаний до імені workflow. Плейсхолдер run/ заміни на каталог +# сервісу; набір lint- джоб добери під стеки сервісу (зайва джоба +# нешкідлива — ci plan її скіпне). +name: Deploy + +on: + push: + branches: + - dev + - main + paths: + - 'run//**' + +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/ --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/ --no-fix + + # …lint- для кожного домену сервісу (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/ + + 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` diff --git a/app/.changes/260721-1652.md b/app/.changes/260721-1652.md new file mode 100644 index 0000000..85b0b0c --- /dev/null +++ b/app/.changes/260721-1652.md @@ -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 покриває всі члени diff --git a/mt/lint-fix-js-knip-1aa23aeb/task.md b/mt/lint-fix-js-knip-1aa23aeb/task.md index 29d0d7e..eabfd35 100644 --- a/mt/lint-fix-js-knip-1aa23aeb/task.md +++ b/mt/lint-fix-js-knip-1aa23aeb/task.md @@ -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` diff --git a/mt/lint-fix-k8s-manifests-f9cb7a94/task.md b/mt/lint-fix-k8s-manifests-f9cb7a94/task.md index a3e8c68..cc55db9 100644 --- a/mt/lint-fix-k8s-manifests-f9cb7a94/task.md +++ b/mt/lint-fix-k8s-manifests-f9cb7a94/task.md @@ -21,4 +21,5 @@ npx @7n/rules lint --no-fix --cwd ../.. k8s ## Inputs Target-файли: + - (whole-repo concern) diff --git a/mt/lint-fix-vue-packages-c8869493/task.md b/mt/lint-fix-vue-packages-c8869493/task.md index 3196253..6447c5e 100644 --- a/mt/lint-fix-vue-packages-c8869493/task.md +++ b/mt/lint-fix-vue-packages-c8869493/task.md @@ -21,4 +21,5 @@ npx @7n/rules lint --no-fix --cwd ../.. vue ## Inputs Target-файли: + - (whole-repo concern) diff --git a/owner/.changes/260721-1652-2.md b/owner/.changes/260721-1652-2.md new file mode 100644 index 0000000..3534da0 --- /dev/null +++ b/owner/.changes/260721-1652-2.md @@ -0,0 +1,5 @@ +--- +bump: patch +section: Changed +--- +Кореневий Cargo workspace: owner/Cargo.toml прибрано на користь кореневого; FakeOmlxProvider у тестах owner-llm (core_test_isolation)