gitarsenal-cli 1.5.9 → 1.5.10
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/scripts/postinstall.js
CHANGED
@@ -15,10 +15,100 @@ const pythonScriptPath = path.join(pythonScriptDir, 'test_modalSandboxScript.py'
|
|
15
15
|
// Path to the original Python script
|
16
16
|
const originalScriptPath = path.join(__dirname, '..', '..', '..', 'mcp-server', 'src', 'utils', 'test_modalSandboxScript.py');
|
17
17
|
|
18
|
+
// Function to install Python packages
|
19
|
+
async function installPythonPackages() {
|
20
|
+
const packages = ['modal', 'gitingest', 'requests'];
|
21
|
+
|
22
|
+
console.log(chalk.yellow(`📦 Installing Python packages: ${packages.join(', ')}`));
|
23
|
+
|
24
|
+
// Try different pip commands
|
25
|
+
const pipCommands = [
|
26
|
+
'pip3 install',
|
27
|
+
'pip install',
|
28
|
+
'python -m pip install',
|
29
|
+
'py -m pip install'
|
30
|
+
];
|
31
|
+
|
32
|
+
for (const pipCommand of pipCommands) {
|
33
|
+
try {
|
34
|
+
// Check if pip command exists
|
35
|
+
const [pipCmd] = pipCommand.split(' ');
|
36
|
+
await execAsync(`${pipCmd} --version`);
|
37
|
+
|
38
|
+
console.log(chalk.gray(`🔄 Using: ${pipCommand}`));
|
39
|
+
|
40
|
+
await execAsync(`${pipCommand} ${packages.join(' ')}`, {
|
41
|
+
env: { ...process.env, PYTHONIOENCODING: 'utf-8' }
|
42
|
+
});
|
43
|
+
|
44
|
+
console.log(chalk.green('✅ Python packages installed successfully!'));
|
45
|
+
return true;
|
46
|
+
} catch (error) {
|
47
|
+
console.log(chalk.gray(`⚠️ ${pipCommand} failed, trying next...`));
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
console.log(chalk.red('❌ Failed to install Python packages'));
|
52
|
+
console.log(chalk.yellow('💡 Please run manually:'));
|
53
|
+
console.log(chalk.yellow(' pip install modal gitingest requests'));
|
54
|
+
console.log(chalk.yellow(' or: pip3 install modal gitingest requests'));
|
55
|
+
return false;
|
56
|
+
}
|
57
|
+
|
58
|
+
// Function to check Python
|
59
|
+
async function checkPython() {
|
60
|
+
const pythonCommands = ['python3', 'python', 'py'];
|
61
|
+
|
62
|
+
for (const cmd of pythonCommands) {
|
63
|
+
try {
|
64
|
+
const { stdout } = await execAsync(`${cmd} --version`);
|
65
|
+
console.log(chalk.green(`✅ Python found: ${stdout.trim()}`));
|
66
|
+
return true;
|
67
|
+
} catch (error) {
|
68
|
+
// Continue to next command
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
console.log(chalk.red('❌ Python not found. Please install Python 3.7+'));
|
73
|
+
console.log(chalk.yellow('💡 Download from: https://www.python.org/downloads/'));
|
74
|
+
return false;
|
75
|
+
}
|
76
|
+
|
77
|
+
// Function to check Git
|
78
|
+
async function checkGit() {
|
79
|
+
try {
|
80
|
+
const { stdout } = await execAsync('git --version');
|
81
|
+
console.log(chalk.green(`✅ Git found: ${stdout.trim()}`));
|
82
|
+
return true;
|
83
|
+
} catch (error) {
|
84
|
+
console.log(chalk.yellow('⚠️ Git not found. Please install Git:'));
|
85
|
+
console.log(chalk.yellow(' macOS: brew install git'));
|
86
|
+
console.log(chalk.yellow(' Ubuntu: sudo apt-get install git'));
|
87
|
+
console.log(chalk.yellow(' Windows: https://git-scm.com/download/win'));
|
88
|
+
return false;
|
89
|
+
}
|
90
|
+
}
|
91
|
+
|
18
92
|
async function postinstall() {
|
19
93
|
try {
|
20
94
|
console.log(chalk.blue('📦 Running GitArsenal CLI postinstall script...'));
|
21
95
|
|
96
|
+
// Check Python first
|
97
|
+
console.log(chalk.blue('🔍 Checking Python installation...'));
|
98
|
+
const pythonOk = await checkPython();
|
99
|
+
if (!pythonOk) {
|
100
|
+
console.log(chalk.red('❌ Python is required for GitArsenal CLI'));
|
101
|
+
return;
|
102
|
+
}
|
103
|
+
|
104
|
+
// Check Git
|
105
|
+
console.log(chalk.blue('🔍 Checking Git installation...'));
|
106
|
+
await checkGit();
|
107
|
+
|
108
|
+
// Install Python packages
|
109
|
+
console.log(chalk.blue('🔍 Installing Python dependencies...'));
|
110
|
+
await installPythonPackages();
|
111
|
+
|
22
112
|
// Create the Python directory if it doesn't exist
|
23
113
|
await fs.ensureDir(pythonScriptDir);
|
24
114
|
|
@@ -30,10 +120,6 @@ async function postinstall() {
|
|
30
120
|
if (stats.size > 5000) {
|
31
121
|
console.log(chalk.green('✅ Found existing full Python script. Keeping it.'));
|
32
122
|
scriptFound = true;
|
33
|
-
// Skip the rest of the script to avoid overwriting the existing file
|
34
|
-
console.log(chalk.blue('📦 GitArsenal CLI installation complete!'));
|
35
|
-
console.log(chalk.blue('🚀 Run "gitarsenal" to start using the CLI.'));
|
36
|
-
return;
|
37
123
|
} else {
|
38
124
|
console.log(chalk.yellow('⚠️ Existing Python script appears to be minimal. Looking for full version...'));
|
39
125
|
}
|
@@ -129,28 +215,24 @@ if __name__ == "__main__":
|
|
129
215
|
console.log(chalk.yellow(`⚠️ Could not make script executable: ${error.message}`));
|
130
216
|
}
|
131
217
|
|
132
|
-
//
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
}
|
151
|
-
|
152
|
-
console.log(chalk.blue('📦 GitArsenal CLI installation complete!'));
|
153
|
-
console.log(chalk.blue('🚀 Run "gitarsenal" to start using the CLI.'));
|
218
|
+
// Final success message
|
219
|
+
console.log(chalk.green(`
|
220
|
+
✅ GitArsenal CLI Installation Complete!
|
221
|
+
========================================
|
222
|
+
|
223
|
+
What was installed:
|
224
|
+
• GitArsenal CLI (npm package)
|
225
|
+
• Modal (Python package)
|
226
|
+
• GitIngest (Python package)
|
227
|
+
• Requests (Python package)
|
228
|
+
|
229
|
+
💡 Next steps:
|
230
|
+
• Run: gitarsenal --help
|
231
|
+
• Run: gitarsenal setup
|
232
|
+
• Visit: https://gitarsenal.dev
|
233
|
+
|
234
|
+
Having issues? Run: gitarsenal --debug
|
235
|
+
`));
|
154
236
|
|
155
237
|
} catch (error) {
|
156
238
|
console.error(chalk.red(`❌ Error during postinstall: ${error.message}`));
|