feat: publishable npm package with GitLab registry release
Summary
Делает пакет реально публикуемым в GitLab NPM Registry. Закрывает противоречие между последним коммитом на main (fix: cleanup after merge — single evidence.ts, no build step) и существующим CI build-job, который всё ещё валидирует dist/evidence.{js,d.ts} — сейчас pipeline падает на каждом коммите.
Мотивация — в launch_pipeline нужно переехать с local-file dep (file:./e2e/aseller-e2e-proof-toolkit-1.0.0.tgz) на нормальный npm-пакет. Локальный tarball ломает Docker-build (COPY порядок), плюс нет семвер-контроля.
Changes
-
package.json — main/types/exports указывают на компилированный
dist/evidence.{js,d.ts}(а не на TS-сорс, который npm-клиенты не съедят). Добавленыscripts.build(tsc),prepack(собирает перед pack/publish),devDependencies(typescript, @types/node). -
tsconfig.json — NodeNext ESM, emit в
dist/изplaywright/fixtures/evidence.ts(rootDir настроен так чтобы вывод былdist/evidence.{js,d.ts}, как ожидает существующий build-job). Declarations + source maps. -
.gitlab-ci.yml — добавлен
publishstage с rule на тегиv*.*.*. Генерирует.npmrcчерезCI_JOB_TOKEN, публикует в scoped registry${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/npm/. -
package-lock.json — закоммичен (нужен для
npm ciв CI). -
.gitignore — добавлен
dist/.
Local verification
npm ci && npm run build
→ dist/evidence.js
→ dist/evidence.d.ts
→ dist/evidence.{js,d.ts}.map
npm pack --dry-run
→ aseller-e2e-toolkit-1.0.0.tgz (8.4 KB, 6 files)
→ Contents: dist/**, README.md, package.json — чисто, без сорсов/dashboard/node_modules
Release flow after merge
git tag v1.0.0
git push origin v1.0.0
→ CI publish job → @aseller/e2e-toolkit@1.0.0 в GitLab Package Registry
Подписчики (например launch_pipeline) ставят через:
# .npmrc
@aseller:registry=https://gitlab.amzgit.com/api/v4/packages/npm/
//gitlab.amzgit.com/api/v4/packages/npm/:_authToken=${NPM_TOKEN}
# package.json
"@aseller/e2e-toolkit": "^1.0.0"
Test plan
-
Build job зелёный на feature branch (pipeline автозапустится после push). -
После merge в main — поставить тег v1.0.0, проверить что publish job зелёный и пакет появился в https://gitlab.amzgit.com/packages/e2e-toolkit/-/packages. -
Отдельный MR в integrations/launch_pipelineпереведёт потребителя с local tarball на@aseller/e2e-toolkitиз registry.
Notes
- Имя пакета остаётся
@aseller/e2e-toolkit(как в текущем package.json). Вlaunch_pipelineтекущий import —@aseller/e2e-proof-toolkit(от старой репыpackages/e2e_toolkit); переименование будет в MR-B там же. - API (
test,expect,Evidence) матчится 1-в-1 с тем что использует launch_pipeline — миграция сведётся к rename imports.