diff --git a/package.json b/package.json index 52905a2af..0d9de0230 100644 --- a/package.json +++ b/package.json @@ -71,9 +71,14 @@ "test-coverage-ci": "cross-env NODE_ENV=test vitest --run --dir ./test --coverage.enabled=true --coverage.reporter=lcovonly --coverage.reporter=text", "test:integration": "cross-env NODE_ENV=test vitest --run --config vitest.config.integration.ts", "test:watch": "cross-env NODE_ENV=test vitest --dir ./test --watch", + "test:migrate": "cross-env NODE_ENV=test vitest --run --dir ./scripts/migrate/test", "prepare": "node ./scripts/prepare.js", "lint": "eslint", "lint:fix": "eslint --fix", + "migrate:urls": "node scripts/migrate/migrate-urls.js", + "migrate:users": "node scripts/migrate/migrate-users.js", + "backup:urls": "node scripts/migrate/backup-urls.js", + "backup:users": "node scripts/migrate/backup-users.js", "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,md,yml,yaml,css,scss}\" --ignore-path .gitignore --config ./.prettierrc", "format:check": "prettier --check \"**/*.{js,jsx,ts,tsx,json,md,yml,yaml,css,scss}\" --ignore-path .gitignore --config ./.prettierrc", "gen-schema-doc": "node ./scripts/doc-schema.js", diff --git a/scripts/migrate/Migration-guide-v1-to-v2.md b/scripts/migrate/Migration-guide-v1-to-v2.md new file mode 100644 index 000000000..f9006a19a --- /dev/null +++ b/scripts/migrate/Migration-guide-v1-to-v2.md @@ -0,0 +1,233 @@ +# Git-Proxy v1.19.2 → v2.0.0 migration (MongoDB or file DB) + +Operator prep for upgrade, aligned with [finos/git-proxy#1535](https://github.com/finos/git-proxy/issues/1535#issuecomment-4478956510) (these scripts do **not** replace your own DB backup/snapshot). +**Behavior:** dry-run by default for both phases; normalization is idempotent; email apply skips unchanged rows and checks uniqueness before writes; backups are explicit helper scripts plus your own infra. + +| Phase | Scripts | Goal | +| ----- | ------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **1** | `migrate-urls.js`, `backup-urls.js` | **Repo URL normalization** — append `.git` to `repos.url` where missing (idempotent) | +| **2** | `migrate-users.js`, `backup-users.js` | **Email audit** (blocking issues) + optional **CSV apply**; **ACL audit** — list `canPush` / `canAuthorise` entries that do not resolve to any `User.username` (no silent rewrite) | + +Configuration: `scripts/migrate/lib/config.js` and `scripts/migrate/lib/datastore.js`. Report file names and contents: [Report artifacts](#report-artifacts) below. + +## npm scripts + +```bash +npm run backup:urls +npm run migrate:urls # repo URL normalization — dry-run +npm run migrate:urls -- --apply # apply normalization + +npm run backup:users +npm run migrate:users # email + ACL audit (dry-run) +npm run migrate:users -- --apply --csv ./map.csv +``` + +Equivalent: `node scripts/migrate/