2 Commits

Author SHA1 Message Date
Marco Lipparini
dcc379607b Fixing broken release (#6) 2023-07-19 12:24:15 +02:00
Marco Lipparini
ea39e4bad6 Optimizing package size (#5) 2023-07-19 11:59:48 +02:00
4 changed files with 45 additions and 25 deletions

View File

@@ -1,3 +1,3 @@
#!/usr/bin/env node
require('../build/src/index.js');
require('../build/index.js');

View File

@@ -1,6 +1,6 @@
{
"name": "@mep-agency/local-dev-db",
"version": "1.0.0-alpha10",
"version": "1.0.0-alpha12",
"private": false,
"description": "A zero-config local MariaDB instance for local development (using Docker)",
"author": "Marco Lipparini <developer@liarco.net>",
@@ -31,10 +31,8 @@
},
"files": [
"bin",
"build",
"docker",
"LICENCE",
"README.md"
"build/**/*.js",
"docker"
],
"devDependencies": {
"@types/mysql": "^2.15.21",

View File

@@ -2,19 +2,26 @@ import fs from 'fs';
import path from 'path';
const JSON_CONFIG_FILE_NAME = 'ldd.json';
const PACKAGE_JSON_PATH = `${__dirname}/../package.json`;
const DEFAULT_CONFIG: JsonConfiguration = {
const DEFAULT_CONFIG: Partial<JsonConfiguration> = {
dbName: undefined,
};
interface JsonConfiguration {
dbName?: string;
packageInfo: {
name: string;
description: string;
version: string;
};
}
const findAndReadConfig = () => {
let userConfig = {};
try {
let startdir = process.cwd();
let userConfigData = '{}';
while (true) {
var list = fs.readdirSync(startdir);
@@ -23,7 +30,7 @@ const findAndReadConfig = () => {
// Found
console.info(`Loading configuration from: ${path.join(startdir, JSON_CONFIG_FILE_NAME)}`);
userConfigData = fs.readFileSync(path.join(startdir, JSON_CONFIG_FILE_NAME)).toString();
userConfig = JSON.parse(fs.readFileSync(path.join(startdir, JSON_CONFIG_FILE_NAME)).toString());
break;
} else if (startdir == '/') {
// Root dir, file not found
@@ -32,13 +39,20 @@ const findAndReadConfig = () => {
startdir = path.normalize(path.join(startdir, '..'));
}
}
} catch (e) {
console.error('ERROR: Failed loading LDD configuration file...');
process.exit(1);
}
try {
return {
...DEFAULT_CONFIG,
...JSON.parse(userConfigData),
...userConfig,
packageInfo: JSON.parse(fs.readFileSync(PACKAGE_JSON_PATH).toString()),
} as JsonConfiguration;
} catch (e) {
console.error('ERROR: Failed reading LDD configuration file...');
console.error('ERROR: Failed loading LDD package.json...');
process.exit(1);
}

View File

@@ -4,10 +4,9 @@ import { confirm } from '@inquirer/prompts';
import { dockerCommand } from 'docker-cli-js';
import mysql from 'mysql';
import packageInfo from '../package.json';
import config from './config';
const PACKAGE_INSTALLATION_PATH = `${__dirname}/../..`;
const LDD_ROOT_PATH = `${__dirname}/..`;
interface DockerImagesCommandResult {
images: {
@@ -22,7 +21,7 @@ interface DockerImagesCommandResult {
const dockerCompose: typeof dockerCommand = async (command, options) => {
try {
return await dockerCommand(
`compose --file "${PACKAGE_INSTALLATION_PATH}/docker/docker-compose.yml" --project-name "ldd" ${command}`,
`compose --file "${LDD_ROOT_PATH}/docker/docker-compose.yml" --project-name "ldd" ${command}`,
{ echo: false, ...(options ?? {}) },
);
} catch (e: any) {
@@ -71,7 +70,7 @@ const execQuery = (query: string, database: string = 'defaultdb') => {
});
};
program.name('ldd').description(packageInfo.description).version(packageInfo.version);
program.name('ldd').description(config.packageInfo.description).version(config.packageInfo.version);
program
.command('start')
@@ -84,18 +83,27 @@ program
`phpmyadmin:${process.env.LDD_PMA_IMAGE_TAG ?? 'latest'}`,
];
const availableImagesImages = ((await dockerCommand('images', { echo: false })) as DockerImagesCommandResult).images
.map((imageData) => `${imageData.repository}:${imageData.tag}`)
.filter((imageName) => requiredImages.includes(imageName));
try {
const availableImagesImages = ((await dockerCommand('images', { echo: false })) as DockerImagesCommandResult).images
.map((imageData) => `${imageData.repository}:${imageData.tag}`)
.filter((imageName) => requiredImages.includes(imageName));
const missingImages = requiredImages.filter((requiredImage) => !availableImagesImages.includes(requiredImage));
const missingImages = requiredImages.filter((requiredImage) => !availableImagesImages.includes(requiredImage));
if (missingImages.length > 0) {
console.info('');
console.info('The following images will be downloaded as they are required but not available:');
missingImages.map((image) => console.info(` - ${image}`));
console.info('');
console.info('This may take some time, please wait...');
if (missingImages.length > 0) {
console.info('');
console.info('The following images will be downloaded as they are required but not available:');
missingImages.map((image) => console.info(` - ${image}`));
console.info('');
console.info('This may take some time, please wait...');
}
} catch (e: any) {
if (e.stderr === undefined) {
throw e;
}
console.error(`ERROR: ${e.stderr}`);
process.exit(1);
}
await dockerCompose('up -d');