Skip to content

feat: publishable npm package with GitLab registry release

Dmitriy_Optimization requested to merge feat/npm-publish into main

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 — добавлен publish stage с 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.

Merge request reports