@nitra/cursor 3.18.0 → 3.18.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/package.json +1 -1
- package/rules/npm-module/npm-module.mdc +2 -0
- package/rules/npm-module/policy/npm_publish_yml/npm_publish_yml.rego +2 -2
- package/rules/npm-module/policy/npm_publish_yml/template/npm-publish.yml.snippet.yml +14 -3
- package/rules/python/js/applies.mjs +30 -0
- package/rules/python/js/tooling.mjs +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [3.18.2] - 2026-06-03
|
|
4
|
+
|
|
5
|
+
### Changed
|
|
6
|
+
|
|
7
|
+
- npm-publish.yml канон: workflow робить release+publish одним job (release-publish) — крок n-cursor release перед публікацією, contents: write + persist-credentials. Оновлено template, rego-референси та тести.
|
|
8
|
+
|
|
9
|
+
## [3.18.1] - 2026-06-03
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- python: applies-гейт пропускає правило без pyproject.toml — позбулися хибного зауваження rego package_json у не-Python репо
|
|
14
|
+
|
|
3
15
|
## [3.18.0] - 2026-06-03
|
|
4
16
|
|
|
5
17
|
### Added
|
package/package.json
CHANGED
|
@@ -65,6 +65,8 @@ bunx -p typescript tsc src/**/*.js --declaration --allowJs --emitDeclarationOnly
|
|
|
65
65
|
|
|
66
66
|
**`npm-publish.yml`:** push у **`main`**, **`on.push.paths`** з **`npm/**`**, **`JS-DevTools/npm-publish@v4.1.5`**, **`with.package: npm/package.json`**, **`permissions.id-token: write`** (OIDC на npm).
|
|
67
67
|
|
|
68
|
+
Workflow робить **release + publish** одним job (`release-publish`): крок **`Release (bump + CHANGELOG + tag)`** (`node npm/bin/n-cursor.js release` — агрегує change-файли, bump `version`, генерує секцію `CHANGELOG.md`, ставить git-тег) виконується **перед** публікацією. Тому потрібні **`permissions.contents: write`** і **`persist-credentials: true`** з **`fetch-depth: 0`** на `checkout` (release пушить commit-back версії та тег), а також локальний composite **`./.github/actions/setup-bun-deps`** і крок `Configure git identity`. Це узгоджено з **`n-changelog`**: `version`/`CHANGELOG.md` змінює лише `n-cursor release` у CI на `main`. Програмна перевірка (`npm_module.npm_publish_yml`) лишається subset-of — enforce-ить `on.push.paths`/`branches`, `id-token: write` і наявність publish-кроку; додаткові кроки (release, git identity) дозволені.
|
|
69
|
+
|
|
68
70
|
- Канон: [npm-publish.yml.snippet.yml](./policy/npm_publish_yml/template/npm-publish.yml.snippet.yml)
|
|
69
71
|
|
|
70
72
|
## Канонічні конфіги
|
|
@@ -22,11 +22,11 @@ expected_paths := {p | some p in data.template.snippet.on.push.paths}
|
|
|
22
22
|
|
|
23
23
|
expected_branches := {b | some b in data.template.snippet.on.push.branches}
|
|
24
24
|
|
|
25
|
-
expected_permissions := data.template.snippet.jobs
|
|
25
|
+
expected_permissions := data.template.snippet.jobs["release-publish"].permissions
|
|
26
26
|
|
|
27
27
|
# Required publish-step (за маркером): expected `with.package` value з template.
|
|
28
28
|
expected_publish_with_package := s.with.package if {
|
|
29
|
-
some s in data.template.snippet.jobs
|
|
29
|
+
some s in data.template.snippet.jobs["release-publish"].steps
|
|
30
30
|
contains(object.get(s, "uses", ""), publish_action_marker)
|
|
31
31
|
}
|
|
32
32
|
|
|
@@ -12,22 +12,33 @@ concurrency:
|
|
|
12
12
|
cancel-in-progress: true
|
|
13
13
|
|
|
14
14
|
jobs:
|
|
15
|
-
publish:
|
|
15
|
+
release-publish:
|
|
16
16
|
runs-on: ubuntu-latest
|
|
17
17
|
permissions:
|
|
18
|
-
contents:
|
|
18
|
+
contents: write # commit-back версії + git-тег
|
|
19
19
|
id-token: write # КРИТИЧНО для OIDC!
|
|
20
20
|
|
|
21
21
|
steps:
|
|
22
22
|
- uses: actions/checkout@v6
|
|
23
23
|
with:
|
|
24
|
-
persist-credentials:
|
|
24
|
+
persist-credentials: true # release пушить commit-back + тег
|
|
25
|
+
fetch-depth: 0
|
|
26
|
+
|
|
27
|
+
- uses: ./.github/actions/setup-bun-deps
|
|
25
28
|
|
|
26
29
|
- uses: actions/setup-node@v6
|
|
27
30
|
with:
|
|
28
31
|
node-version: '24' # includes npm@11.6.0
|
|
29
32
|
registry-url: 'https://registry.npmjs.org'
|
|
30
33
|
|
|
34
|
+
- name: Configure git identity
|
|
35
|
+
run: |
|
|
36
|
+
git config user.name "github-actions[bot]"
|
|
37
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
38
|
+
|
|
39
|
+
- name: Release (bump + CHANGELOG + tag)
|
|
40
|
+
run: node npm/bin/n-cursor.js release
|
|
41
|
+
|
|
31
42
|
- name: Publish package
|
|
32
43
|
uses: JS-DevTools/npm-publish@v4.1.5
|
|
33
44
|
with:
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Applies-гейт правила `python` (python.mdc): правило застосовне, лише якщо в корені є
|
|
3
|
+
* `pyproject.toml`. Інакше CLI пропускає всі concerns (JS і policy) — інакше rego
|
|
4
|
+
* `python/package_json` хибно вимагає `scripts.lint-python` навіть для не-Python репо.
|
|
5
|
+
*
|
|
6
|
+
* JS тут — гейт на наявність кореневого `pyproject.toml`. Подальші FS-перевірки
|
|
7
|
+
* (`uv.lock`, `package.json`, `lint-python.yml`, заборона Poetry) — у `tooling.mjs`.
|
|
8
|
+
*/
|
|
9
|
+
import { existsSync } from 'node:fs'
|
|
10
|
+
import { join } from 'node:path'
|
|
11
|
+
|
|
12
|
+
import { createCheckReporter } from '../../../scripts/lib/check-reporter.mjs'
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @param {string} [cwd] корінь репозиторію (`process.cwd()` у звичайному прогоні)
|
|
16
|
+
* @returns {Promise<boolean>} `true` — правило застосовне; `false` — пропустити
|
|
17
|
+
*/
|
|
18
|
+
export function applies(cwd = process.cwd()) {
|
|
19
|
+
return Promise.resolve(existsSync(join(cwd, 'pyproject.toml')))
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Друкує короткий context-pass — самі перевірки виконують інші concerns.
|
|
24
|
+
* @returns {number} 0 — все ок (фактичні порушення повертають інші концерни)
|
|
25
|
+
*/
|
|
26
|
+
export function check() {
|
|
27
|
+
const reporter = createCheckReporter()
|
|
28
|
+
reporter.pass('pyproject.toml знайдено в корені — застосовую python.mdc')
|
|
29
|
+
return reporter.getExitCode()
|
|
30
|
+
}
|
|
@@ -2,12 +2,15 @@
|
|
|
2
2
|
* Перевіряє FS-вимоги правила python.mdc для Python-проєктів на uv.
|
|
3
3
|
*
|
|
4
4
|
* **Що тут лишилося** (FS-existence — не покривається conftest):
|
|
5
|
-
* - наявність `pyproject.toml` у корені (тригер правила);
|
|
6
5
|
* - наявність `uv.lock` поруч (uv-проєкт коммітить lock-файл);
|
|
7
6
|
* - наявність кореневого `package.json` (для `bun run lint-python`);
|
|
8
7
|
* - наявність `.github/workflows/lint-python.yml`;
|
|
9
8
|
* - заборона Poetry-артефактів `poetry.lock` / `poetry.toml` (міграція на uv).
|
|
10
9
|
*
|
|
10
|
+
* Гейт на `pyproject.toml` робить `applies.mjs` — CLI пропускає правило цілком
|
|
11
|
+
* без нього. Захисний early-return лишається тут лише для прямого виклику
|
|
12
|
+
* `check()` (тести/standalone) без `applies.mjs`-гейту.
|
|
13
|
+
*
|
|
11
14
|
* **Що покрила Rego** (`npx \@nitra/cursor fix python`):
|
|
12
15
|
* - `python/pyproject_toml/` — заборона `[tool.poetry]` + вимога PEP 621 `[project].name/version`;
|
|
13
16
|
* - `python/package_json/` — наявність скрипта `lint-python` у `package.json`;
|
|
@@ -31,10 +34,8 @@ export function check(cwd = process.cwd()) {
|
|
|
31
34
|
const { pass, fail } = reporter
|
|
32
35
|
|
|
33
36
|
if (!existsSync(join(cwd, 'pyproject.toml'))) {
|
|
34
|
-
pass('pyproject.toml не знайдено в корені — правило python не застосовне')
|
|
35
37
|
return reporter.getExitCode()
|
|
36
38
|
}
|
|
37
|
-
pass('pyproject.toml існує — застосовую python.mdc')
|
|
38
39
|
|
|
39
40
|
if (existsSync(join(cwd, 'uv.lock'))) {
|
|
40
41
|
pass('uv.lock є')
|