mirror of
https://github.com/immich-app/immich.git
synced 2025-12-01 09:49:53 +09:00
Some checks are pending
CodeQL / Analyze (javascript) (push) Waiting to run
CodeQL / Analyze (python) (push) Waiting to run
Docker / pre-job (push) Waiting to run
Docker / Re-Tag ML () (push) Blocked by required conditions
Docker / Re-Tag ML (-armnn) (push) Blocked by required conditions
Docker / Re-Tag ML (-cuda) (push) Blocked by required conditions
Docker / Re-Tag ML (-openvino) (push) Blocked by required conditions
Docker / Re-Tag Server () (push) Blocked by required conditions
Docker / Build and Push ML (armnn, linux/arm64, -armnn) (push) Blocked by required conditions
Docker / Build and Push ML (cpu, linux/amd64,linux/arm64) (push) Blocked by required conditions
Docker / Build and Push ML (cuda, linux/amd64, -cuda) (push) Blocked by required conditions
Docker / Build and Push ML (openvino, linux/amd64, -openvino) (push) Blocked by required conditions
Docker / Build and Push Server (cpu, linux/amd64,linux/arm64) (push) Blocked by required conditions
Docker / Docker Build & Push Server Success (push) Blocked by required conditions
Docker / Docker Build & Push ML Success (push) Blocked by required conditions
Docs build / pre-job (push) Waiting to run
Docs build / Docs Build (push) Blocked by required conditions
Static Code Analysis / pre-job (push) Waiting to run
Static Code Analysis / Run Dart Code Analysis (push) Blocked by required conditions
Test / pre-job (push) Waiting to run
Test / Test & Lint Server (push) Blocked by required conditions
Test / Unit Test CLI (push) Blocked by required conditions
Test / Unit Test CLI (Windows) (push) Blocked by required conditions
Test / Test & Lint Web (push) Blocked by required conditions
Test / End-to-End Lint (push) Blocked by required conditions
Test / Medium Tests (Server) (push) Blocked by required conditions
Test / End-to-End Tests (Server & CLI) (push) Blocked by required conditions
Test / End-to-End Tests (Web) (push) Blocked by required conditions
Test / Unit Test Mobile (push) Blocked by required conditions
Test / Unit Test ML (push) Blocked by required conditions
Test / ShellCheck (push) Waiting to run
Test / OpenAPI Clients (push) Waiting to run
Test / TypeORM Checks (push) Waiting to run
feat: show error stack
77 lines
2.2 KiB
TypeScript
77 lines
2.2 KiB
TypeScript
import { CommandFactory } from 'nest-commander';
|
|
import { ChildProcess, fork } from 'node:child_process';
|
|
import { Worker } from 'node:worker_threads';
|
|
import { ImmichAdminModule } from 'src/app.module';
|
|
import { ImmichWorker, LogLevel } from 'src/enum';
|
|
import { ConfigRepository } from 'src/repositories/config.repository';
|
|
|
|
const immichApp = process.argv[2];
|
|
if (immichApp) {
|
|
process.argv.splice(2, 1);
|
|
}
|
|
|
|
let apiProcess: ChildProcess | undefined;
|
|
|
|
const onError = (name: string, error: Error) => {
|
|
console.error(`${name} worker error: ${error}, stack: ${error.stack}`);
|
|
};
|
|
|
|
const onExit = (name: string, exitCode: number | null) => {
|
|
if (exitCode !== 0) {
|
|
console.error(`${name} worker exited with code ${exitCode}`);
|
|
|
|
if (apiProcess && name !== ImmichWorker.API) {
|
|
console.error('Killing api process');
|
|
apiProcess.kill('SIGTERM');
|
|
apiProcess = undefined;
|
|
}
|
|
}
|
|
|
|
process.exit(exitCode);
|
|
};
|
|
|
|
function bootstrapWorker(name: ImmichWorker) {
|
|
console.log(`Starting ${name} worker`);
|
|
|
|
let worker: Worker | ChildProcess;
|
|
if (name === ImmichWorker.API) {
|
|
worker = fork(`./dist/workers/${name}.js`, [], {
|
|
execArgv: process.execArgv.map((arg) => (arg.startsWith('--inspect') ? '--inspect=0.0.0.0:9231' : arg)),
|
|
});
|
|
apiProcess = worker;
|
|
} else {
|
|
worker = new Worker(`./dist/workers/${name}.js`);
|
|
}
|
|
|
|
worker.on('error', (error) => onError(name, error));
|
|
worker.on('exit', (exitCode) => onExit(name, exitCode));
|
|
}
|
|
|
|
function bootstrap() {
|
|
if (immichApp === 'immich-admin') {
|
|
process.title = 'immich_admin_cli';
|
|
process.env.IMMICH_LOG_LEVEL = LogLevel.WARN;
|
|
return CommandFactory.run(ImmichAdminModule);
|
|
}
|
|
|
|
if (immichApp === 'immich' || immichApp === 'microservices') {
|
|
console.error(
|
|
`Using "start.sh ${immichApp}" has been deprecated. See https://github.com/immich-app/immich/releases/tag/v1.118.0 for more information.`,
|
|
);
|
|
process.exit(1);
|
|
}
|
|
|
|
if (immichApp) {
|
|
console.error(`Unknown command: "${immichApp}"`);
|
|
process.exit(1);
|
|
}
|
|
|
|
process.title = 'immich';
|
|
const { workers } = new ConfigRepository().getEnv();
|
|
for (const worker of workers) {
|
|
bootstrapWorker(worker);
|
|
}
|
|
}
|
|
|
|
void bootstrap();
|