mirror of
https://github.com/steel-dev/cli.git
synced 2026-09-14 20:47:34 +08:00
115 lines
2.8 KiB
TypeScript
115 lines
2.8 KiB
TypeScript
import React, {useEffect, useState} from 'react';
|
|
import {Task} from 'ink-task-list';
|
|
import {useTask} from '../../hooks/usetask.js';
|
|
import {useForgeStep} from '../../context/forgestepcontext.js';
|
|
import spinners from 'cli-spinners';
|
|
import {runCommandWithOutput} from '../../utils/forge.js';
|
|
|
|
export default function Dependencies() {
|
|
const [state, task, , , setTask, setLoading, setError] = useTask();
|
|
const {step, setStep, packageManager, directory, template} = useForgeStep();
|
|
const [output, setOutput] = useState<string>('');
|
|
|
|
useEffect(() => {
|
|
if (step === 'dependencies' && !task) {
|
|
setLoading(true);
|
|
setOutput('');
|
|
|
|
async function installDeps() {
|
|
try {
|
|
const onOutput = (data: string) => {
|
|
setOutput(prev => prev + data);
|
|
};
|
|
|
|
if (template?.label.includes('Python')) {
|
|
if (packageManager === 'poetry') {
|
|
await runCommandWithOutput(
|
|
`${packageManager} init`,
|
|
directory,
|
|
onOutput,
|
|
);
|
|
await runCommandWithOutput(
|
|
`${packageManager} env activate`,
|
|
directory,
|
|
onOutput,
|
|
);
|
|
await runCommandWithOutput(
|
|
`${packageManager} install`,
|
|
directory,
|
|
onOutput,
|
|
);
|
|
} else if (packageManager === 'pip') {
|
|
await runCommandWithOutput(
|
|
'python3 -m venv .venv',
|
|
directory,
|
|
onOutput,
|
|
);
|
|
await runCommandWithOutput(
|
|
'source .venv/bin/activate',
|
|
directory,
|
|
onOutput,
|
|
);
|
|
await runCommandWithOutput(
|
|
`${packageManager} install -r requirements.txt`,
|
|
directory,
|
|
onOutput,
|
|
);
|
|
} else if (packageManager === 'uv') {
|
|
await runCommandWithOutput(
|
|
`${packageManager} init`,
|
|
directory,
|
|
onOutput,
|
|
);
|
|
await runCommandWithOutput(
|
|
`${packageManager} venv`,
|
|
directory,
|
|
onOutput,
|
|
);
|
|
await runCommandWithOutput(
|
|
`${packageManager} pip install -r requirements.txt`,
|
|
directory,
|
|
onOutput,
|
|
);
|
|
}
|
|
setLoading(false);
|
|
setTask(true);
|
|
setStep('success');
|
|
} else {
|
|
await runCommandWithOutput(
|
|
`${packageManager} install`,
|
|
directory,
|
|
onOutput,
|
|
);
|
|
setLoading(false);
|
|
setTask(true);
|
|
setStep('success');
|
|
}
|
|
} catch (error) {
|
|
console.error('Error installing dependencies:', error);
|
|
setError('Error installing dependencies');
|
|
setLoading(false);
|
|
}
|
|
}
|
|
installDeps();
|
|
}
|
|
}, [step]);
|
|
|
|
return (
|
|
<>
|
|
<Task
|
|
label="Installing dependencies"
|
|
state={state}
|
|
spinner={spinners.dots}
|
|
output={
|
|
state !== 'success'
|
|
? output
|
|
.split('\n')
|
|
.slice(state === 'error' ? -10 : -5)
|
|
.join('\n')
|
|
: undefined
|
|
}
|
|
/>
|
|
</>
|
|
);
|
|
}
|