@axinom/mosaic-cli 0.49.0-rc.7 → 0.49.0

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.
@@ -7,6 +7,16 @@ const child_process_1 = require("child_process");
7
7
  const fs_1 = require("fs");
8
8
  const path_1 = require("path");
9
9
  const common_1 = require("../../common");
10
+ /**
11
+ * Convert absolute path to ComposePathResult
12
+ * dirName would be relative to the current working directory
13
+ */
14
+ const absolutePathToRelativeDirNameAndFileName = (absPath) => {
15
+ return {
16
+ dirName: (0, path_1.dirname)((0, path_1.relative)(process.cwd(), absPath)),
17
+ fileName: (0, path_1.basename)(absPath),
18
+ };
19
+ };
10
20
  /**
11
21
  * Calculates a path to `docker-compose.yaml` file based on initial path.
12
22
  * For example, if `scripts/infra` is provided as initial path, it will look for `scripts/infra/docker-compose.yml` in current folder, then in folder one hierarchy level up, traversing directories towards root.
@@ -14,21 +24,41 @@ const common_1 = require("../../common");
14
24
  * Eliminates the need to calculate how many `..` you must have in the path to docker compose file which is passed as a cli parameter.
15
25
  */
16
26
  const findComposePath = (initialPath) => {
27
+ const supportedComposeFiles = ['docker-compose.yml', 'docker-compose.yaml'];
17
28
  let startPath = process.cwd();
18
29
  let lastPath = '';
19
30
  while (lastPath !== startPath) {
20
- const lookupPath = (0, path_1.join)(startPath, initialPath, 'docker-compose.yml');
21
- if ((0, fs_1.existsSync)(lookupPath)) {
22
- return (0, path_1.dirname)((0, path_1.relative)(process.cwd(), lookupPath));
31
+ for (const file of supportedComposeFiles) {
32
+ const lookupPath = (0, path_1.join)(startPath, initialPath, file);
33
+ if ((0, fs_1.existsSync)(lookupPath)) {
34
+ return absolutePathToRelativeDirNameAndFileName(lookupPath);
35
+ }
36
+ }
37
+ // Preserve currently checked path for while condition comparison
38
+ lastPath = startPath;
39
+ // Remove last segment from path, move to directory closer to root
40
+ startPath = (0, path_1.normalize)((0, path_1.join)(startPath, '..'));
41
+ }
42
+ throw Error(`'${initialPath}/docker-compose.y(a)ml' file not found. Please make sure that correct composeFolderPath parameter is provided.`);
43
+ };
44
+ /**
45
+ * checks if the given path to file exists. and returns the directory path and file name of the file
46
+ */
47
+ const findComposeFilePath = (initialPath) => {
48
+ const isAbs = (0, path_1.isAbsolute)(initialPath);
49
+ const lookupPath = isAbs ? initialPath : (0, path_1.join)(process.cwd(), initialPath);
50
+ try {
51
+ const fileStats = (0, fs_1.statSync)(lookupPath);
52
+ if (fileStats.isFile()) {
53
+ return absolutePathToRelativeDirNameAndFileName(lookupPath);
23
54
  }
24
55
  else {
25
- // Preserve currently checked path for while condition comparison
26
- lastPath = startPath;
27
- // Remove last segment from path, move to directory closer to root
28
- startPath = (0, path_1.normalize)((0, path_1.join)(startPath, '..'));
56
+ throw Error(`'${initialPath}' is not a file. Please make sure that correct composeFilePath parameter is provided.`);
29
57
  }
30
58
  }
31
- throw Error(`'${initialPath}/docker-compose.yml' file not found. Please make sure that correct composeFolderPath parameter is provided.`);
59
+ catch (error) {
60
+ throw Error(`'${initialPath}' file not found. Please make sure that correct composeFilePath parameter is provided.`);
61
+ }
32
62
  };
33
63
  /**
34
64
  * Loads and validates all required environment variables that are used to create a shadow database connection string.
@@ -65,7 +95,15 @@ const ensureDumpDirectoryExist = (targetPath) => {
65
95
  const generate = (options) => {
66
96
  try {
67
97
  console.log((0, common_1.getTimestamp)(), `Starting pg-dump command...`);
68
- const composePath = findComposePath(options.composeFolderPath);
98
+ let composeDirPath = '';
99
+ let composeFileName = 'docker-compose.yml';
100
+ if (options.composeFilePath) {
101
+ ({ dirName: composeDirPath, fileName: composeFileName } =
102
+ findComposeFilePath((0, path_1.normalize)(options.composeFilePath)));
103
+ }
104
+ else {
105
+ ({ dirName: composeDirPath, fileName: composeFileName } = findComposePath((0, path_1.normalize)(options.composeFolderPath)));
106
+ }
69
107
  const connectionString = getDumpDbConnectionString(options.connectionString);
70
108
  const dumpPath = ensureDumpDirectoryExist(options.dumpPath);
71
109
  const excludeSchemas = (0, mosaic_service_common_1.isNullOrWhitespace)(options.excludeSchemas)
@@ -80,7 +118,7 @@ const generate = (options) => {
80
118
  ...excludeSchemas,
81
119
  connectionString,
82
120
  ].join(' ');
83
- (0, child_process_1.exec)(`cd ${composePath} && docker-compose exec -T postgres pg_dump ${dumpOptions} > "${dumpPath}"`, (_error, stdout, stderr) => {
121
+ (0, child_process_1.exec)(`cd "${composeDirPath}" && docker compose -f "${composeFileName}" exec -T postgres pg_dump ${dumpOptions} > "${dumpPath}"`, (_error, stdout, stderr) => {
84
122
  if (stdout) {
85
123
  console.log((0, common_1.getTimestamp)(), 'pg_dump info:', stdout);
86
124
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/pg-dump/generate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/commands/pg-dump/generate.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,12 @@ exports.pgDump = {
9
9
  .option('composeFolderPath', {
10
10
  alias: 'c',
11
11
  default: 'infra',
12
- describe: 'Relative path to docker-compose.yml file, e.g. `infra` or `scripts/infra`. Script will look for such directory starting from current project, traversing directories closer to root, so no need to specify a path like `../../../infra`',
12
+ describe: 'Relative path to docker-compose.y(a)ml file, e.g. `infra` or `scripts/infra`. Script will look for such directory starting from current project, traversing directories closer to root, so no need to specify a path like `../../../infra`',
13
+ string: true,
14
+ })
15
+ .option('composeFilePath', {
16
+ alias: 'f',
17
+ describe: 'Relative or Absolute file path to the y(a)ml file. This option would override any composeFolderPath setting.',
13
18
  string: true,
14
19
  })
15
20
  .option('dumpPath', {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/pg-dump/index.ts"],"names":[],"mappings":";;;AACA,yCAAsC;AAGzB,QAAA,MAAM,GAA0C;IAC3D,OAAO,EAAE,SAAS;IAClB,QAAQ,EACN,sKAAsK;IACxK,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,MAAM,CAAC,mBAAmB,EAAE;QAC3B,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,OAAO;QAChB,QAAQ,EACN,yOAAyO;QAC3O,MAAM,EAAE,IAAI;KACb,CAAC;SACD,MAAM,CAAC,UAAU,EAAE;QAClB,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,6BAA6B;QACtC,QAAQ,EACN,wIAAwI;QAC1I,MAAM,EAAE,IAAI;KACb,CAAC;SACD,MAAM,CAAC,gBAAgB,EAAE;QACxB,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,kCAAkC;QAC3C,QAAQ,EACN,sHAAsH;QACxH,MAAM,EAAE,IAAI;KACb,CAAC;SACD,MAAM,CAAC,kBAAkB,EAAE;QAC1B,KAAK,EAAE,GAAG;QACV,QAAQ,EACN,gJAAgJ;QAClJ,MAAM,EAAE,IAAI;KACb,CAAC;IACN,OAAO,EAAE,mBAAQ;CAClB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/pg-dump/index.ts"],"names":[],"mappings":";;;AACA,yCAAsC;AAGzB,QAAA,MAAM,GAA0C;IAC3D,OAAO,EAAE,SAAS;IAClB,QAAQ,EACN,sKAAsK;IACxK,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CACjB,KAAK;SACF,MAAM,CAAC,mBAAmB,EAAE;QAC3B,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,OAAO;QAChB,QAAQ,EACN,4OAA4O;QAC9O,MAAM,EAAE,IAAI;KACb,CAAC;SACD,MAAM,CAAC,iBAAiB,EAAE;QACzB,KAAK,EAAE,GAAG;QACV,QAAQ,EACN,8GAA8G;QAChH,MAAM,EAAE,IAAI;KACb,CAAC;SACD,MAAM,CAAC,UAAU,EAAE;QAClB,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,6BAA6B;QACtC,QAAQ,EACN,wIAAwI;QAC1I,MAAM,EAAE,IAAI;KACb,CAAC;SACD,MAAM,CAAC,gBAAgB,EAAE;QACxB,KAAK,EAAE,GAAG;QACV,OAAO,EAAE,kCAAkC;QAC3C,QAAQ,EACN,sHAAsH;QACxH,MAAM,EAAE,IAAI;KACb,CAAC;SACD,MAAM,CAAC,kBAAkB,EAAE;QAC1B,KAAK,EAAE,GAAG;QACV,QAAQ,EACN,gJAAgJ;QAClJ,MAAM,EAAE,IAAI;KACb,CAAC;IACN,OAAO,EAAE,mBAAQ;CAClB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  export interface PgDumpOptions {
2
2
  composeFolderPath: string;
3
+ composeFilePath?: string;
3
4
  dumpPath: string;
4
5
  excludeSchemas: string;
5
6
  connectionString?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axinom/mosaic-cli",
3
- "version": "0.49.0-rc.7",
3
+ "version": "0.49.0",
4
4
  "description": "The Axinom Mosaic CLI",
5
5
  "author": "Axinom",
6
6
  "license": "PROPRIETARY",
@@ -34,8 +34,8 @@
34
34
  "@asyncapi/diff": "^0.4.1",
35
35
  "@asyncapi/modelina": "^1.8.4",
36
36
  "@asyncapi/parser": "^2.0.2",
37
- "@axinom/mosaic-id-link-be": "^0.32.0-rc.4",
38
- "@axinom/mosaic-service-common": "^0.62.0-rc.7",
37
+ "@axinom/mosaic-id-link-be": "^0.32.0",
38
+ "@axinom/mosaic-service-common": "^0.62.0",
39
39
  "@graphql-inspector/core": "^3.1.2",
40
40
  "@inquirer/prompts": "^4.3.0",
41
41
  "@stoplight/spectral-core": "^1.18.3",
@@ -77,5 +77,5 @@
77
77
  "publishConfig": {
78
78
  "access": "public"
79
79
  },
80
- "gitHead": "4d2dbe509438f1c3220e7bbc4aaba013da327d67"
80
+ "gitHead": "53c1540262d00a496b37c1518bab28141474da9a"
81
81
  }
@@ -7,37 +7,85 @@ import {
7
7
  } from '@axinom/mosaic-service-common';
8
8
  import * as chalk from 'chalk';
9
9
  import { ExecException, exec } from 'child_process';
10
- import { existsSync, mkdirSync } from 'fs';
11
- import { dirname, join, normalize, relative } from 'path';
10
+ import { existsSync, mkdirSync, statSync } from 'fs';
11
+ import { basename, dirname, isAbsolute, join, normalize, relative } from 'path';
12
12
  import { exitCode, getTimestamp } from '../../common';
13
13
  import { PgDumpOptions } from './pg-dump-options';
14
14
 
15
+ /**
16
+ * Type needed for findCompose functions
17
+ */
18
+ interface ComposePathResult {
19
+ dirName: string;
20
+ fileName: string;
21
+ }
22
+
23
+ /**
24
+ * Convert absolute path to ComposePathResult
25
+ * dirName would be relative to the current working directory
26
+ */
27
+ const absolutePathToRelativeDirNameAndFileName = (
28
+ absPath: string,
29
+ ): ComposePathResult => {
30
+ return {
31
+ dirName: dirname(relative(process.cwd(), absPath)),
32
+ fileName: basename(absPath),
33
+ };
34
+ };
35
+
15
36
  /**
16
37
  * Calculates a path to `docker-compose.yaml` file based on initial path.
17
38
  * For example, if `scripts/infra` is provided as initial path, it will look for `scripts/infra/docker-compose.yml` in current folder, then in folder one hierarchy level up, traversing directories towards root.
18
39
  * Returns a value like `../../../scripts/infra` or throws an error.
19
40
  * Eliminates the need to calculate how many `..` you must have in the path to docker compose file which is passed as a cli parameter.
20
41
  */
21
- const findComposePath = (initialPath: string): string => {
42
+ const findComposePath = (initialPath: string): ComposePathResult => {
43
+ const supportedComposeFiles = ['docker-compose.yml', 'docker-compose.yaml'];
22
44
  let startPath = process.cwd();
23
45
  let lastPath = '';
24
46
 
25
47
  while (lastPath !== startPath) {
26
- const lookupPath = join(startPath, initialPath, 'docker-compose.yml');
27
- if (existsSync(lookupPath)) {
28
- return dirname(relative(process.cwd(), lookupPath));
29
- } else {
30
- // Preserve currently checked path for while condition comparison
31
- lastPath = startPath;
32
- // Remove last segment from path, move to directory closer to root
33
- startPath = normalize(join(startPath, '..'));
48
+ for (const file of supportedComposeFiles) {
49
+ const lookupPath = join(startPath, initialPath, file);
50
+ if (existsSync(lookupPath)) {
51
+ return absolutePathToRelativeDirNameAndFileName(lookupPath);
52
+ }
34
53
  }
54
+
55
+ // Preserve currently checked path for while condition comparison
56
+ lastPath = startPath;
57
+ // Remove last segment from path, move to directory closer to root
58
+ startPath = normalize(join(startPath, '..'));
35
59
  }
36
60
  throw Error(
37
- `'${initialPath}/docker-compose.yml' file not found. Please make sure that correct composeFolderPath parameter is provided.`,
61
+ `'${initialPath}/docker-compose.y(a)ml' file not found. Please make sure that correct composeFolderPath parameter is provided.`,
38
62
  );
39
63
  };
40
64
 
65
+ /**
66
+ * checks if the given path to file exists. and returns the directory path and file name of the file
67
+ */
68
+ const findComposeFilePath = (initialPath: string): ComposePathResult => {
69
+ const isAbs = isAbsolute(initialPath);
70
+ const lookupPath = isAbs ? initialPath : join(process.cwd(), initialPath);
71
+
72
+ try {
73
+ const fileStats = statSync(lookupPath);
74
+
75
+ if (fileStats.isFile()) {
76
+ return absolutePathToRelativeDirNameAndFileName(lookupPath);
77
+ } else {
78
+ throw Error(
79
+ `'${initialPath}' is not a file. Please make sure that correct composeFilePath parameter is provided.`,
80
+ );
81
+ }
82
+ } catch (error) {
83
+ throw Error(
84
+ `'${initialPath}' file not found. Please make sure that correct composeFilePath parameter is provided.`,
85
+ );
86
+ }
87
+ };
88
+
41
89
  /**
42
90
  * Loads and validates all required environment variables that are used to create a shadow database connection string.
43
91
  * For this to work, CLI script must be called with pre-loaded variables. e.g.
@@ -87,7 +135,18 @@ const ensureDumpDirectoryExist = (targetPath: string): string => {
87
135
  export const generate = (options: PgDumpOptions): void => {
88
136
  try {
89
137
  console.log(getTimestamp(), `Starting pg-dump command...`);
90
- const composePath = findComposePath(options.composeFolderPath);
138
+ let composeDirPath = '';
139
+ let composeFileName = 'docker-compose.yml';
140
+
141
+ if (options.composeFilePath) {
142
+ ({ dirName: composeDirPath, fileName: composeFileName } =
143
+ findComposeFilePath(normalize(options.composeFilePath)));
144
+ } else {
145
+ ({ dirName: composeDirPath, fileName: composeFileName } = findComposePath(
146
+ normalize(options.composeFolderPath),
147
+ ));
148
+ }
149
+
91
150
  const connectionString = getDumpDbConnectionString(
92
151
  options.connectionString,
93
152
  );
@@ -106,7 +165,7 @@ export const generate = (options: PgDumpOptions): void => {
106
165
  ].join(' ');
107
166
 
108
167
  exec(
109
- `cd ${composePath} && docker-compose exec -T postgres pg_dump ${dumpOptions} > "${dumpPath}"`,
168
+ `cd "${composeDirPath}" && docker compose -f "${composeFileName}" exec -T postgres pg_dump ${dumpOptions} > "${dumpPath}"`,
110
169
  (_error: ExecException | null, stdout: string, stderr: string) => {
111
170
  if (stdout) {
112
171
  console.log(getTimestamp(), 'pg_dump info:', stdout);
@@ -12,7 +12,13 @@ export const pgDump: CommandModule<unknown, PgDumpOptions> = {
12
12
  alias: 'c',
13
13
  default: 'infra',
14
14
  describe:
15
- 'Relative path to docker-compose.yml file, e.g. `infra` or `scripts/infra`. Script will look for such directory starting from current project, traversing directories closer to root, so no need to specify a path like `../../../infra`',
15
+ 'Relative path to docker-compose.y(a)ml file, e.g. `infra` or `scripts/infra`. Script will look for such directory starting from current project, traversing directories closer to root, so no need to specify a path like `../../../infra`',
16
+ string: true,
17
+ })
18
+ .option('composeFilePath', {
19
+ alias: 'f',
20
+ describe:
21
+ 'Relative or Absolute file path to the y(a)ml file. This option would override any composeFolderPath setting.',
16
22
  string: true,
17
23
  })
18
24
  .option('dumpPath', {
@@ -1,5 +1,6 @@
1
1
  export interface PgDumpOptions {
2
2
  composeFolderPath: string;
3
+ composeFilePath?: string;
3
4
  dumpPath: string;
4
5
  excludeSchemas: string;
5
6
  connectionString?: string;