|
@@ -1,3 +1,4 @@
|
|
|
|
+/* eslint-disable no-restricted-syntax */
|
|
/* eslint-disable no-await-in-loop */
|
|
/* eslint-disable no-await-in-loop */
|
|
import { Queue } from 'bullmq';
|
|
import { Queue } from 'bullmq';
|
|
import fs from 'fs';
|
|
import fs from 'fs';
|
|
@@ -80,30 +81,27 @@ export class SystemExecutors {
|
|
|
|
|
|
this.logger.info('Setting file permissions a+rwx on required files');
|
|
this.logger.info('Setting file permissions a+rwx on required files');
|
|
// Give permission to read and write to all files and folders for the current user
|
|
// Give permission to read and write to all files and folders for the current user
|
|
- await Promise.all(
|
|
|
|
- filesAndFolders.map(async (fileOrFolder) => {
|
|
|
|
- if (await pathExists(fileOrFolder)) {
|
|
|
|
- this.logger.info(`Setting permissions on ${fileOrFolder}`);
|
|
|
|
- await execAsync(`chmod -R a+rwx ${fileOrFolder}`).catch(() => {
|
|
|
|
- logger.fail(`Failed to set permissions on ${fileOrFolder}`);
|
|
|
|
- });
|
|
|
|
- this.logger.info(`Successfully set permissions on ${fileOrFolder}`);
|
|
|
|
- }
|
|
|
|
- }),
|
|
|
|
- );
|
|
|
|
|
|
+ for (const fileOrFolder of filesAndFolders) {
|
|
|
|
+ if (await pathExists(fileOrFolder)) {
|
|
|
|
+ this.logger.info(`Setting permissions on ${fileOrFolder}`);
|
|
|
|
+ await execAsync(`chmod -R a+rwx ${fileOrFolder}`).catch(() => {
|
|
|
|
+ logger.fail(`Failed to set permissions on ${fileOrFolder}`);
|
|
|
|
+ });
|
|
|
|
+ this.logger.info(`Successfully set permissions on ${fileOrFolder}`);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
this.logger.info('Setting file permissions 600 on required files');
|
|
this.logger.info('Setting file permissions 600 on required files');
|
|
|
|
|
|
- await Promise.all(
|
|
|
|
- files600.map(async (fileOrFolder) => {
|
|
|
|
- if (await pathExists(fileOrFolder)) {
|
|
|
|
- this.logger.info(`Setting permissions on ${fileOrFolder}`);
|
|
|
|
- await execAsync(`chmod 600 ${fileOrFolder}`).catch(() => {
|
|
|
|
- logger.fail(`Failed to set permissions on ${fileOrFolder}`);
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
- }),
|
|
|
|
- );
|
|
|
|
|
|
+ for (const fileOrFolder of files600) {
|
|
|
|
+ if (await pathExists(fileOrFolder)) {
|
|
|
|
+ this.logger.info(`Setting permissions on ${fileOrFolder}`);
|
|
|
|
+ await execAsync(`chmod 600 ${fileOrFolder}`).catch(() => {
|
|
|
|
+ logger.fail(`Failed to set permissions on ${fileOrFolder}`);
|
|
|
|
+ });
|
|
|
|
+ this.logger.info(`Successfully set permissions on ${fileOrFolder}`);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
};
|
|
};
|
|
|
|
|
|
public cleanLogs = async () => {
|
|
public cleanLogs = async () => {
|
|
@@ -231,24 +229,14 @@ export class SystemExecutors {
|
|
this.logger.info('Reloading env variables...');
|
|
this.logger.info('Reloading env variables...');
|
|
dotenv.config({ path: this.envFile, override: true });
|
|
dotenv.config({ path: this.envFile, override: true });
|
|
|
|
|
|
- // Stop and Remove container tipi if exists
|
|
|
|
- spinner.setMessage('Stopping and removing containers...');
|
|
|
|
- spinner.start();
|
|
|
|
- this.logger.info('Stopping and removing tipi-db...');
|
|
|
|
- await execAsync('docker rm -f tipi-db');
|
|
|
|
- this.logger.info('Stopping and removing tipi-redis...');
|
|
|
|
- await execAsync('docker rm -f tipi-redis');
|
|
|
|
- this.logger.info('Stopping and removing tipi-dashboard...');
|
|
|
|
- await execAsync('docker rm -f tipi-dashboard');
|
|
|
|
- this.logger.info('Stopping and removing tipi-reverse-proxy...');
|
|
|
|
- await execAsync('docker rm -f tipi-reverse-proxy');
|
|
|
|
- spinner.done('Containers stopped and removed');
|
|
|
|
-
|
|
|
|
// Pull images
|
|
// Pull images
|
|
spinner.setMessage('Pulling images...');
|
|
spinner.setMessage('Pulling images...');
|
|
spinner.start();
|
|
spinner.start();
|
|
- this.logger.info('Pulling images new images...');
|
|
|
|
- await execAsync(`docker compose --env-file "${this.envFile}" pull`);
|
|
|
|
|
|
+ this.logger.info('Pulling new images...');
|
|
|
|
+ // await execAsync(`docker compose --env-file "${this.envFile}" pull`).catch((e) => {
|
|
|
|
+ // this.logger.error(`Failed to pull images: ${e}`);
|
|
|
|
+ // throw e;
|
|
|
|
+ // });
|
|
|
|
|
|
spinner.done('Images pulled');
|
|
spinner.done('Images pulled');
|
|
|
|
|
|
@@ -268,12 +256,8 @@ export class SystemExecutors {
|
|
await generateTlsCertificates({ domain: envMap.get('LOCAL_DOMAIN') });
|
|
await generateTlsCertificates({ domain: envMap.get('LOCAL_DOMAIN') });
|
|
|
|
|
|
if (killWatchers) {
|
|
if (killWatchers) {
|
|
- this.logger.info('Opening log files for watcher...');
|
|
|
|
- const out = fs.openSync('./logs/watcher.log', 'a');
|
|
|
|
- const err = fs.openSync('./logs/watcher.log', 'a');
|
|
|
|
-
|
|
|
|
this.logger.info('Starting watcher...');
|
|
this.logger.info('Starting watcher...');
|
|
- const subprocess = spawn('./runtipi-cli', [process.argv[1] as string, 'watch'], { cwd: this.rootFolder, detached: true, stdio: ['ignore', out, err] });
|
|
|
|
|
|
+ const subprocess = spawn('./runtipi-cli', [process.argv[1] as string, 'watch'], { cwd: this.rootFolder, detached: true, stdio: ['ignore', 'ignore', 'ignore'] });
|
|
subprocess.unref();
|
|
subprocess.unref();
|
|
}
|
|
}
|
|
|
|
|
|
@@ -402,7 +386,7 @@ export class SystemExecutors {
|
|
spinner.done(`Target version: ${targetVersion}`);
|
|
spinner.done(`Target version: ${targetVersion}`);
|
|
spinner.done(`Download url: ${fileUrl}`);
|
|
spinner.done(`Download url: ${fileUrl}`);
|
|
|
|
|
|
- await this.stop();
|
|
|
|
|
|
+ // await this.stop();
|
|
|
|
|
|
console.log(`Downloading Tipi ${targetVersion}...`);
|
|
console.log(`Downloading Tipi ${targetVersion}...`);
|
|
|
|
|
|
@@ -470,17 +454,9 @@ export class SystemExecutors {
|
|
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
await new Promise((resolve) => setTimeout(resolve, 3000));
|
|
|
|
|
|
this.logger.info('Starting new cli...');
|
|
this.logger.info('Starting new cli...');
|
|
- const childProcess = spawn('./runtipi-cli', [process.argv[1] as string, 'start']);
|
|
|
|
-
|
|
|
|
- childProcess.stdout.on('data', (data) => {
|
|
|
|
- process.stdout.write(data);
|
|
|
|
- });
|
|
|
|
-
|
|
|
|
- childProcess.stderr.on('data', (data) => {
|
|
|
|
- process.stderr.write(data);
|
|
|
|
- });
|
|
|
|
|
|
+ spawn('./runtipi-cli', [process.argv[1] as string, 'start']);
|
|
|
|
|
|
- spinner.done(`Tipi ${targetVersion} successfully updated. Please run './runtipi-cli start' to start Tipi again.`);
|
|
|
|
|
|
+ spinner.done(`Tipi ${targetVersion} successfully updated. Tipi is now starting, wait for this process to finish...`);
|
|
|
|
|
|
return { success: true, message: 'Tipi updated' };
|
|
return { success: true, message: 'Tipi updated' };
|
|
} catch (e) {
|
|
} catch (e) {
|