@tryhuset/foundation-utils 4.84.2 → 4.84.3

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 +0,0 @@
1
- {"version":3,"file":"resolveComposeFile.js","sourceRoot":"","sources":["../../../../src/commands/docker/resolveComposeFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAE9B,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAE1B,MAAM,oBAAoB,GAAG,gBAAgB,CAAC;AAE9C;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,IAAa,EAAU,EAAE;IAC1D,MAAM,WAAW,GAAG,IAAI,IAAI,oBAAoB,CAAC;IACjD,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC;IAExB,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,WAAW,YAAY,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC5E,WAAW,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC"}
@@ -1,23 +0,0 @@
1
- /**
2
- * Creates a backup of Docker images and optionally updates them
3
- *
4
- * This command provides functionality to:
5
- * - Create backups of current Docker images with tagged references
6
- * - Update Docker images to their latest versions
7
- * - Manage the backup process with various options
8
- * - Create a modified compose file that references the backup tags
9
- * - Restore from a provided backup compose file
10
- * @param options The options for the docker command
11
- * @param options.file The path to the Docker Compose file
12
- * @param options.force Whether to force the operation
13
- * @param options.backupOnly Whether to only create a backup
14
- * @param options.noBackup Whether to not create a backup
15
- * @param options.backupFile The path to a backup compose file to restore from
16
- */
17
- export declare function docker(options: {
18
- file: string;
19
- force?: boolean;
20
- backupOnly?: boolean;
21
- noBackup?: boolean;
22
- backupFile?: string;
23
- }): Promise<void>;
@@ -1,176 +0,0 @@
1
- import { execSync } from 'child_process';
2
- import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';
3
- import { Chalk } from 'chalk';
4
- import inquirer from 'inquirer';
5
- import { exitProcess } from '../utils/processExit.js';
6
- const chalk = new Chalk();
7
- /**
8
- * Creates a backup of Docker images and optionally updates them
9
- *
10
- * This command provides functionality to:
11
- * - Create backups of current Docker images with tagged references
12
- * - Update Docker images to their latest versions
13
- * - Manage the backup process with various options
14
- * - Create a modified compose file that references the backup tags
15
- * - Restore from a provided backup compose file
16
- * @param options The options for the docker command
17
- * @param options.file The path to the Docker Compose file
18
- * @param options.force Whether to force the operation
19
- * @param options.backupOnly Whether to only create a backup
20
- * @param options.noBackup Whether to not create a backup
21
- * @param options.backupFile The path to a backup compose file to restore from
22
- */
23
- export async function docker(options) {
24
- const { file: COMPOSE_FILE, force, backupOnly, noBackup, backupFile } = options;
25
- // If backupFile is provided, use it instead of the original compose file
26
- const activeComposeFile = backupFile || COMPOSE_FILE;
27
- // Validate compose file exists
28
- if (!existsSync(activeComposeFile)) {
29
- console.error(chalk.red(`Error: Compose file not found at ${activeComposeFile}`));
30
- exitProcess(1);
31
- }
32
- // Configuration
33
- const BACKUP_DIR = './docker_image_backups';
34
- const DATE_FORMAT = new Date().toISOString().replace(/[:.]/g, '').slice(0, 15);
35
- // Check for conflicting options
36
- if (noBackup && backupOnly) {
37
- console.error(chalk.red('Error: Cannot use both --no-backup and --backup-only options together'));
38
- exitProcess(1);
39
- }
40
- if (backupFile && (backupOnly || noBackup)) {
41
- console.error(chalk.red('Error: Cannot use --backup-file with --backup-only or --no-backup options'));
42
- exitProcess(1);
43
- }
44
- // Create backup directory if it doesn't exist
45
- if (!existsSync(BACKUP_DIR)) {
46
- mkdirSync(BACKUP_DIR, { recursive: true });
47
- }
48
- // Confirm the user intention if not forced
49
- if (!force) {
50
- let message = '';
51
- if (backupFile) {
52
- message = `WARNING: This will restart all server processes using backup file: ${backupFile}`;
53
- }
54
- else if (backupOnly) {
55
- message = 'This will create a backup of current Docker images (no system update)';
56
- }
57
- else if (noBackup) {
58
- message = 'WARNING: This will restart all server processes WITHOUT creating a backup';
59
- }
60
- else {
61
- message = 'WARNING: This will restart all server processes';
62
- }
63
- const { confirm } = await inquirer.prompt([
64
- {
65
- type: 'confirm',
66
- name: 'confirm',
67
- message: chalk.yellow(message),
68
- default: false
69
- }
70
- ]);
71
- if (!confirm) {
72
- console.log(chalk.yellow('Operation aborted'));
73
- exitProcess(1);
74
- }
75
- }
76
- // Create a backup of the Docker images (only if not using a backup file)
77
- if (!noBackup && !backupFile) {
78
- console.log(chalk.blue('Creating backup of Docker images...'));
79
- // Read the original compose file
80
- const composeContent = readFileSync(COMPOSE_FILE, 'utf8');
81
- let modifiedComposeContent = composeContent;
82
- // Get list of services
83
- const services = execSync(`docker compose -f "${COMPOSE_FILE}" ps --services`)
84
- .toString()
85
- .trim()
86
- .split('\n');
87
- // Create container info file with image IDs
88
- const imageInfoFile = `${BACKUP_DIR}/image_info_${DATE_FORMAT}.txt`;
89
- let imageInfo = `Docker Images Backup: ${DATE_FORMAT}\n`;
90
- imageInfo += '----------------------------------------------\n';
91
- // For each service, extract the image information and update compose file
92
- for (const service of services) {
93
- console.log(chalk.blue(`Documenting service: ${service}`));
94
- try {
95
- const containerId = execSync(`docker compose -f "${COMPOSE_FILE}" ps -q "${service}"`)
96
- .toString()
97
- .trim();
98
- if (containerId) {
99
- // Get image info
100
- const imageId = execSync(`docker inspect --format='{{.Image}}' "${containerId}"`)
101
- .toString()
102
- .trim();
103
- const imageName = execSync(`docker inspect --format='{{.Config.Image}}' "${containerId}"`)
104
- .toString()
105
- .trim();
106
- imageInfo += `SERVICE: ${service}\n`;
107
- imageInfo += `IMAGE ID: ${imageId}\n`;
108
- imageInfo += `IMAGE NAME: ${imageName}\n`;
109
- imageInfo += '---\n';
110
- // Tag the current image with our backup tag
111
- if (imageName) {
112
- const backupTag = `${imageName.split(':')[0]}:backup_${DATE_FORMAT}`;
113
- console.log(chalk.blue(`Tagging ${imageName} as ${backupTag}`));
114
- execSync(`docker tag "${imageName}" "${backupTag}"`);
115
- imageInfo += `BACKUP TAG: ${backupTag}\n\n`;
116
- // Update the compose file to reference the backup tag
117
- const originalImageRegex = new RegExp(`image:\\s*${imageName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}`, 'g');
118
- modifiedComposeContent = modifiedComposeContent.replace(originalImageRegex, `image: ${backupTag}`);
119
- }
120
- }
121
- }
122
- catch {
123
- console.warn(chalk.yellow(`Warning: Could not process service ${service}`));
124
- continue;
125
- }
126
- }
127
- // Write the modified compose file with backup tags
128
- writeFileSync(`${BACKUP_DIR}/docker-compose_${DATE_FORMAT}.yaml`, modifiedComposeContent);
129
- writeFileSync(imageInfoFile, imageInfo);
130
- console.log(chalk.green(`Backup complete. Image information saved to: ${imageInfoFile}`));
131
- console.log(chalk.green(`Modified compose file saved to: ${BACKUP_DIR}/docker-compose_${DATE_FORMAT}.yaml`));
132
- }
133
- // Perform update steps unless this is backup-only mode
134
- if (!backupOnly) {
135
- console.log(chalk.blue('Starting update process...'));
136
- // Take down the current Docker Compose setup
137
- execSync(`docker compose -f "${activeComposeFile}" down`);
138
- // Pull the latest images specified in the Docker Compose file
139
- execSync(`docker compose -f "${activeComposeFile}" pull`);
140
- // Remove the dangling images to not get into a no space left situation
141
- console.log(chalk.blue('Cleaning up dangling images...'));
142
- try {
143
- const cleanupOutput = execSync('docker images --quiet --filter=dangling=true | xargs --no-run-if-empty docker rmi').toString();
144
- console.log(cleanupOutput);
145
- }
146
- catch {
147
- // Ignore errors if no dangling images
148
- }
149
- // Start up the Docker Compose setup in detached mode
150
- execSync(`docker compose -f "${activeComposeFile}" up -d`);
151
- console.log(chalk.green('Update completed successfully.'));
152
- }
153
- // Operation summary
154
- if (backupFile) {
155
- console.log(chalk.green(`Restore completed successfully using backup file: ${backupFile}`));
156
- }
157
- else if (backupOnly) {
158
- console.log(chalk.green('Backup-only operation completed successfully.'));
159
- }
160
- else {
161
- if (noBackup) {
162
- console.log(chalk.green('Update completed with no backup.'));
163
- }
164
- else {
165
- console.log(chalk.green('Update completed with backup.'));
166
- }
167
- }
168
- if (!noBackup && !backupFile) {
169
- console.log(chalk.blue('Backup information:'));
170
- console.log(chalk.blue(`Backup location: ${BACKUP_DIR}`));
171
- console.log(chalk.blue(`Backup timestamp: ${DATE_FORMAT}`));
172
- console.log(chalk.blue(`Image info file: ${BACKUP_DIR}/image_info_${DATE_FORMAT}.txt`));
173
- console.log(chalk.blue(`Modified Docker Compose file: ${BACKUP_DIR}/docker-compose_${DATE_FORMAT}.yaml`));
174
- }
175
- }
176
- //# sourceMappingURL=docker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../../src/commands/docker.ts"],"names":[],"mappings":"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"}