@tmlmobilidade/env-sync 20260304.1625.33
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/README.md +150 -0
- package/dist/artifacts/upload.service.d.ts +17 -0
- package/dist/artifacts/upload.service.js +181 -0
- package/dist/cli/commands.d.ts +12 -0
- package/dist/cli/commands.js +111 -0
- package/dist/config/config-loader.d.ts +37 -0
- package/dist/config/config-loader.js +91 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +176 -0
- package/dist/mongodb/dump.service.d.ts +8 -0
- package/dist/mongodb/dump.service.js +43 -0
- package/dist/mongodb/restore.service.d.ts +6 -0
- package/dist/mongodb/restore.service.js +28 -0
- package/dist/mongodb/sync.service.d.ts +7 -0
- package/dist/mongodb/sync.service.js +106 -0
- package/dist/storage/rclone.service.d.ts +2 -0
- package/dist/storage/rclone.service.js +78 -0
- package/dist/storage/sync.service.d.ts +2 -0
- package/dist/storage/sync.service.js +11 -0
- package/dist/utils/exec.d.ts +12 -0
- package/dist/utils/exec.js +114 -0
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.js +37 -0
- package/dist/utils/metadata.d.ts +6 -0
- package/dist/utils/metadata.js +56 -0
- package/package.json +46 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
const METADATA_FILE = '.backup_metadata';
|
|
4
|
+
export function getMetadataFilePath(backupDir) {
|
|
5
|
+
return path.join(backupDir, METADATA_FILE);
|
|
6
|
+
}
|
|
7
|
+
export function saveBackupMetadata(backupDir, backupType, timestamp) {
|
|
8
|
+
const metadataFile = getMetadataFilePath(backupDir);
|
|
9
|
+
// Ensure backup directory exists
|
|
10
|
+
if (!existsSync(backupDir)) {
|
|
11
|
+
mkdirSync(backupDir, { recursive: true });
|
|
12
|
+
}
|
|
13
|
+
const metadata = {};
|
|
14
|
+
// Load existing metadata if it exists
|
|
15
|
+
if (existsSync(metadataFile)) {
|
|
16
|
+
const content = readFileSync(metadataFile, 'utf-8');
|
|
17
|
+
for (const line of content.split('\n')) {
|
|
18
|
+
const trimmed = line.trim();
|
|
19
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
20
|
+
continue;
|
|
21
|
+
const match = trimmed.match(/^([^=]+)=(.*)$/);
|
|
22
|
+
if (match) {
|
|
23
|
+
const key = match[1].trim();
|
|
24
|
+
const value = match[2].trim();
|
|
25
|
+
metadata[key] = value;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
// Update metadata for this backup type
|
|
30
|
+
const metadataKey = `${backupType}_last_backup`;
|
|
31
|
+
metadata[metadataKey] = timestamp;
|
|
32
|
+
// Write back to file
|
|
33
|
+
const lines = [];
|
|
34
|
+
for (const [key, value] of Object.entries(metadata)) {
|
|
35
|
+
lines.push(`${key}=${value}`);
|
|
36
|
+
}
|
|
37
|
+
writeFileSync(metadataFile, lines.join('\n') + '\n', 'utf-8');
|
|
38
|
+
}
|
|
39
|
+
export function loadBackupMetadata(backupDir, backupType) {
|
|
40
|
+
const metadataFile = getMetadataFilePath(backupDir);
|
|
41
|
+
if (!existsSync(metadataFile)) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
const content = readFileSync(metadataFile, 'utf-8');
|
|
45
|
+
const metadataKey = `${backupType}_last_backup`;
|
|
46
|
+
for (const line of content.split('\n')) {
|
|
47
|
+
const trimmed = line.trim();
|
|
48
|
+
if (!trimmed || trimmed.startsWith('#'))
|
|
49
|
+
continue;
|
|
50
|
+
if (trimmed.startsWith(`${metadataKey}=`)) {
|
|
51
|
+
const timestamp = trimmed.substring(metadataKey.length + 1);
|
|
52
|
+
return { timestamp };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@tmlmobilidade/env-sync",
|
|
3
|
+
"description": "CLI tool to sync production and staging environments (MongoDB and Storage)",
|
|
4
|
+
"version": "20260304.1625.33",
|
|
5
|
+
"author": {
|
|
6
|
+
"email": "iso@tmlmobilidade.pt",
|
|
7
|
+
"name": "TML-ISO"
|
|
8
|
+
},
|
|
9
|
+
"license": "AGPL-3.0-or-later",
|
|
10
|
+
"type": "module",
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE",
|
|
15
|
+
"package.json"
|
|
16
|
+
],
|
|
17
|
+
"main": "./dist/index.js",
|
|
18
|
+
"exports": {
|
|
19
|
+
".": "./dist/index.js"
|
|
20
|
+
},
|
|
21
|
+
"bin": {
|
|
22
|
+
"env-sync": "./dist/index.js"
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsc && resolve-tspaths",
|
|
26
|
+
"dev": "tsx src/index.ts",
|
|
27
|
+
"lint": "eslint ./src && tsc --noEmit",
|
|
28
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
29
|
+
},
|
|
30
|
+
"dependencies": {
|
|
31
|
+
"@clack/prompts": "1.0.1",
|
|
32
|
+
"@tmlmobilidade/consts": "20251202.1817.5",
|
|
33
|
+
"@tmlmobilidade/types": "20251202.1817.5",
|
|
34
|
+
"archiver": "7.0.1",
|
|
35
|
+
"chalk": "5.6.2",
|
|
36
|
+
"dotenv": "17.3.1",
|
|
37
|
+
"mongodb": "7.1.0"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@tmlmobilidade/tsconfig": "20251202.1817.5",
|
|
41
|
+
"@types/archiver": "7.0.0",
|
|
42
|
+
"@types/node": "25.3.0",
|
|
43
|
+
"resolve-tspaths": "0.8.23",
|
|
44
|
+
"tsx": "4.21.0"
|
|
45
|
+
}
|
|
46
|
+
}
|