@vaharoni/devops 1.2.6 → 1.2.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"process-pyproject-toml.d.ts","sourceRoot":"","sources":["../../../src/libs/discovery/process-pyproject-toml.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AASxE,wBAAgB,gBAAgB,gCAqC/B"}
1
+ {"version":3,"file":"process-pyproject-toml.d.ts","sourceRoot":"","sources":["../../../src/libs/discovery/process-pyproject-toml.ts"],"names":[],"mappings":"AAGA,OAAO,EAA2B,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAUxE,wBAAgB,gBAAgB,gCAkD/B"}
@@ -1,40 +1,49 @@
1
1
  import chalk from "chalk";
2
+ import fs from "fs";
2
3
  import { globSync } from "glob";
3
4
  import { packageFilePythonSchema } from "../../types";
4
5
  import { PackageDataProcessor } from "./process-common";
5
6
  import TOML from "@iarna/toml";
6
7
  import path from "path";
7
8
  const rootPath = process.env.MONOREPO_ROOT || process.cwd();
9
+ const rootPyprojectPath = path.join(rootPath, "pyproject.toml");
8
10
  const _workspaces = {};
9
11
  let _workspacesLoaded = false;
10
12
  export function pythonWorkspaces() {
11
- if (!_workspacesLoaded) {
12
- const allPyprojectTomls = globSync(path.join(rootPath, "**/*/pyproject.toml"));
13
- const processor = new PackageDataProcessor({
14
- language: "python",
15
- pathList: allPyprojectTomls,
16
- zodSchema: packageFilePythonSchema,
17
- fileParser: TOML.parse,
18
- nameExtractor: (data) => data.project.name,
19
- });
20
- processor
21
- .convert((data) => {
22
- const deployment = data.tool?.devops?.deployment;
23
- const scripts = data.tool?.devops?.scripts;
24
- const dependencyNames = data.project.dependencies ?? [];
25
- return {
26
- scripts,
27
- deployment,
28
- dependencyNames: processor.filterDependencies(dependencyNames),
29
- };
30
- })
31
- .forEach((pkgData) => {
32
- _workspaces[pkgData.name] = pkgData;
33
- });
34
- console.warn(chalk.yellow(
35
- // prettier-ignore
36
- `Python workspace discovery initialized. Workspaces found: ${Object.keys(_workspaces).join(", ")}`));
13
+ if (_workspacesLoaded)
14
+ return _workspaces;
15
+ // No root pyproject.toml means no Python workspaces - skip discovery
16
+ if (!fs.existsSync(rootPyprojectPath)) {
37
17
  _workspacesLoaded = true;
18
+ return _workspaces;
38
19
  }
20
+ const rootPyproject = TOML.parse(fs.readFileSync(rootPyprojectPath, "utf8"));
21
+ const workspaceMembers = rootPyproject?.tool?.uv?.workspace?.members ?? [];
22
+ const allPyprojectTomls = workspaceMembers.flatMap((member) => globSync(path.join(rootPath, member, "pyproject.toml")));
23
+ const processor = new PackageDataProcessor({
24
+ language: "python",
25
+ pathList: allPyprojectTomls,
26
+ zodSchema: packageFilePythonSchema,
27
+ fileParser: TOML.parse,
28
+ nameExtractor: (data) => data.project.name,
29
+ });
30
+ processor
31
+ .convert((data) => {
32
+ const deployment = data.tool?.devops?.deployment;
33
+ const scripts = data.tool?.devops?.scripts;
34
+ const dependencyNames = data.project.dependencies ?? [];
35
+ return {
36
+ scripts,
37
+ deployment,
38
+ dependencyNames: processor.filterDependencies(dependencyNames),
39
+ };
40
+ })
41
+ .forEach((pkgData) => {
42
+ _workspaces[pkgData.name] = pkgData;
43
+ });
44
+ console.warn(chalk.yellow(
45
+ // prettier-ignore
46
+ `Python workspace discovery initialized. Workspaces found: ${Object.keys(_workspaces).join(", ")}`));
47
+ _workspacesLoaded = true;
39
48
  return _workspaces;
40
49
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@vaharoni/devops",
3
3
  "type": "module",
4
- "version": "1.2.6",
4
+ "version": "1.2.7",
5
5
  "description": "Devops utility",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -1,4 +1,5 @@
1
1
  import chalk from "chalk";
2
+ import fs from "fs";
2
3
  import { globSync } from "glob";
3
4
  import { packageFilePythonSchema, type PackageData } from "../../types";
4
5
  import { PackageDataProcessor } from "./process-common";
@@ -6,44 +7,58 @@ import TOML from "@iarna/toml";
6
7
  import path from "path";
7
8
 
8
9
  const rootPath = process.env.MONOREPO_ROOT || process.cwd();
10
+ const rootPyprojectPath = path.join(rootPath, "pyproject.toml");
9
11
  const _workspaces: Record<string, PackageData> = {};
10
12
  let _workspacesLoaded = false;
11
13
 
12
14
  export function pythonWorkspaces() {
13
- if (!_workspacesLoaded) {
14
- const allPyprojectTomls = globSync(
15
- path.join(rootPath, "**/*/pyproject.toml")
16
- );
17
- const processor = new PackageDataProcessor({
18
- language: "python",
19
- pathList: allPyprojectTomls,
20
- zodSchema: packageFilePythonSchema,
21
- fileParser: TOML.parse,
22
- nameExtractor: (data) => data.project.name,
23
- });
15
+ if (_workspacesLoaded) return _workspaces;
24
16
 
25
- processor
26
- .convert((data) => {
27
- const deployment = data.tool?.devops?.deployment;
28
- const scripts = data.tool?.devops?.scripts;
29
- const dependencyNames = data.project.dependencies ?? [];
30
- return {
31
- scripts,
32
- deployment,
33
- dependencyNames: processor.filterDependencies(dependencyNames),
34
- };
35
- })
36
- .forEach((pkgData) => {
37
- _workspaces[pkgData.name] = pkgData;
38
- });
39
-
40
- console.warn(
41
- chalk.yellow(
42
- // prettier-ignore
43
- `Python workspace discovery initialized. Workspaces found: ${Object.keys(_workspaces).join(", ")}`
44
- )
45
- );
17
+ // No root pyproject.toml means no Python workspaces - skip discovery
18
+ if (!fs.existsSync(rootPyprojectPath)) {
46
19
  _workspacesLoaded = true;
20
+ return _workspaces;
47
21
  }
22
+
23
+ const rootPyproject = TOML.parse(
24
+ fs.readFileSync(rootPyprojectPath, "utf8")
25
+ ) as { tool?: { uv?: { workspace?: { members?: string[] } } } };
26
+ const workspaceMembers: string[] =
27
+ rootPyproject?.tool?.uv?.workspace?.members ?? [];
28
+
29
+ const allPyprojectTomls = workspaceMembers.flatMap((member) =>
30
+ globSync(path.join(rootPath, member, "pyproject.toml"))
31
+ );
32
+
33
+ const processor = new PackageDataProcessor({
34
+ language: "python",
35
+ pathList: allPyprojectTomls,
36
+ zodSchema: packageFilePythonSchema,
37
+ fileParser: TOML.parse,
38
+ nameExtractor: (data) => data.project.name,
39
+ });
40
+
41
+ processor
42
+ .convert((data) => {
43
+ const deployment = data.tool?.devops?.deployment;
44
+ const scripts = data.tool?.devops?.scripts;
45
+ const dependencyNames = data.project.dependencies ?? [];
46
+ return {
47
+ scripts,
48
+ deployment,
49
+ dependencyNames: processor.filterDependencies(dependencyNames),
50
+ };
51
+ })
52
+ .forEach((pkgData) => {
53
+ _workspaces[pkgData.name] = pkgData;
54
+ });
55
+
56
+ console.warn(
57
+ chalk.yellow(
58
+ // prettier-ignore
59
+ `Python workspace discovery initialized. Workspaces found: ${Object.keys(_workspaces).join(", ")}`
60
+ )
61
+ );
62
+ _workspacesLoaded = true;
48
63
  return _workspaces;
49
64
  }