mirror of
https://github.com/MichMich/MagicMirror.git
synced 2025-06-27 03:39:55 +00:00
Introduce envsubst for config.js, update deps (#3032)
This is the implemenation of envsubst discussed in #1756 Documentation update will follow after merge.
This commit is contained in:
parent
4b478a5a5e
commit
a65ee86501
@ -17,6 +17,7 @@ _This release is scheduled to be released on 2023-04-01._
|
||||
- Added Pirate Weather as new weather provider (#3005)
|
||||
- Added possibility to use your own templates in Alert module
|
||||
- Added error message if `<modulename>.js` file is missing in module folder to get a hint in the logs (#2403)
|
||||
- Added possibility to use environment variables in `config.js` (#1756)
|
||||
|
||||
### Removed
|
||||
|
||||
|
@ -6,6 +6,10 @@
|
||||
* For more information on how you can configure this file
|
||||
* see https://docs.magicmirror.builders/configuration/introduction.html
|
||||
* and https://docs.magicmirror.builders/modules/configuration.html
|
||||
*
|
||||
* You can use environment variables using a `config.js.template` file instead of `config.js`
|
||||
* which will be converted to `config.js` while starting. For more information
|
||||
* see https://docs.magicmirror.builders/configuration/introduction.html#enviromnent-variables
|
||||
*/
|
||||
let config = {
|
||||
address: "localhost", // Address to listen on, can be:
|
||||
|
63
js/app.js
63
js/app.js
@ -14,6 +14,7 @@ const Log = require("logger");
|
||||
const Server = require(`${__dirname}/server`);
|
||||
const Utils = require(`${__dirname}/utils`);
|
||||
const defaultModules = require(`${__dirname}/../modules/default/defaultmodules`);
|
||||
const envsub = require("envsub");
|
||||
|
||||
// Get version number.
|
||||
global.version = require(`${__dirname}/../package.json`).version;
|
||||
@ -51,25 +52,71 @@ function App() {
|
||||
let httpServer;
|
||||
|
||||
/**
|
||||
* Loads the config file. Combines it with the defaults, and runs the
|
||||
* callback with the found config as argument.
|
||||
*
|
||||
* @param {Function} callback Function to be called after loading the config
|
||||
* Loads the config file. Combines it with the defaults and returns the config
|
||||
*/
|
||||
function loadConfig(callback) {
|
||||
async function loadConfig() {
|
||||
Log.log("Loading config ...");
|
||||
const defaults = require(`${__dirname}/defaults`);
|
||||
|
||||
// For this check proposed to TestSuite
|
||||
// https://forum.magicmirror.builders/topic/1456/test-suite-for-magicmirror/8
|
||||
const configFilename = path.resolve(global.configuration_file || `${global.root_path}/config/config.js`);
|
||||
let templateFile = configFilename + ".template";
|
||||
|
||||
// check if templateFile exists
|
||||
try {
|
||||
fs.accessSync(templateFile, fs.F_OK);
|
||||
} catch (err) {
|
||||
templateFile = null;
|
||||
Log.debug("config template file not exists, no envsubst");
|
||||
}
|
||||
|
||||
if (templateFile) {
|
||||
// save current config.js
|
||||
try {
|
||||
if (fs.existsSync(configFilename)) {
|
||||
fs.copyFileSync(configFilename, configFilename + "_" + Date.now());
|
||||
}
|
||||
} catch (err) {
|
||||
Log.warn("Could not copy " + configFilename + ": " + err.message);
|
||||
}
|
||||
|
||||
// check if config.env exists
|
||||
const envFiles = [];
|
||||
const configEnvFile = configFilename.substr(0, configFilename.lastIndexOf(".")) + ".env";
|
||||
try {
|
||||
if (fs.existsSync(configEnvFile)) {
|
||||
envFiles.push(configEnvFile);
|
||||
}
|
||||
} catch (err) {
|
||||
Log.debug(configEnvFile + " does not exist. " + err.message);
|
||||
}
|
||||
|
||||
let options = {
|
||||
all: true,
|
||||
diff: false,
|
||||
envFiles: envFiles,
|
||||
protect: false,
|
||||
syntax: "default",
|
||||
system: true
|
||||
};
|
||||
|
||||
// envsubst variables in templateFile and create new config.js
|
||||
// naming for envsub must be templateFile and outputFile
|
||||
const outputFile = configFilename;
|
||||
try {
|
||||
await envsub({ templateFile, outputFile, options });
|
||||
} catch (err) {
|
||||
Log.error("Could not envsubst variables: " + err.message);
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
fs.accessSync(configFilename, fs.F_OK);
|
||||
const c = require(configFilename);
|
||||
checkDeprecatedOptions(c);
|
||||
const config = Object.assign(defaults, c);
|
||||
callback(config);
|
||||
return config;
|
||||
} catch (e) {
|
||||
if (e.code === "ENOENT") {
|
||||
Log.error(Utils.colors.error("WARNING! Could not find config file. Please create one. Starting with default configuration."));
|
||||
@ -78,7 +125,7 @@ function App() {
|
||||
} else {
|
||||
Log.error(Utils.colors.error(`WARNING! Could not load config file. Starting with default configuration. Error found: ${e}`));
|
||||
}
|
||||
callback(defaults);
|
||||
return defaults;
|
||||
}
|
||||
}
|
||||
|
||||
@ -217,7 +264,7 @@ function App() {
|
||||
* @param {Function} callback Function to be called after start
|
||||
*/
|
||||
this.start = function (callback) {
|
||||
loadConfig(function (c) {
|
||||
loadConfig().then((c) => {
|
||||
config = c;
|
||||
|
||||
Log.setLogLevel(config.logLevel);
|
||||
|
2617
package-lock.json
generated
2617
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
17
package.json
17
package.json
@ -51,15 +51,15 @@
|
||||
"devDependencies": {
|
||||
"eslint-config-prettier": "^8.6.0",
|
||||
"eslint-plugin-jest": "^27.2.1",
|
||||
"eslint-plugin-jsdoc": "^39.6.8",
|
||||
"eslint-plugin-jsdoc": "^39.8.0",
|
||||
"eslint-plugin-prettier": "^4.2.1",
|
||||
"express-basic-auth": "^1.2.1",
|
||||
"husky": "^8.0.3",
|
||||
"jest": "^29.4.0",
|
||||
"jest": "^29.4.2",
|
||||
"jsdom": "^21.1.0",
|
||||
"lodash": "^4.17.21",
|
||||
"playwright": "^1.30.0",
|
||||
"prettier": "^2.8.3",
|
||||
"prettier": "^2.8.4",
|
||||
"pretty-quick": "^3.1.3",
|
||||
"sinon": "^15.0.1",
|
||||
"stylelint": "^14.16.1",
|
||||
@ -69,24 +69,25 @@
|
||||
"suncalc": "^1.9.0"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"electron": "^22.1.0"
|
||||
"electron": "^22.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"colors": "^1.4.0",
|
||||
"console-stamp": "^3.1.0",
|
||||
"digest-fetch": "^2.0.1",
|
||||
"eslint": "^8.32.0",
|
||||
"envsub": "^4.1.0",
|
||||
"eslint": "^8.33.0",
|
||||
"express": "^4.18.2",
|
||||
"express-ipfilter": "^1.3.1",
|
||||
"feedme": "^2.0.2",
|
||||
"helmet": "^6.0.1",
|
||||
"iconv-lite": "^0.6.3",
|
||||
"luxon": "^1.28.0",
|
||||
"luxon": "^1.28.1",
|
||||
"module-alias": "^2.2.2",
|
||||
"moment": "^2.29.4",
|
||||
"node-fetch": "^2.6.7",
|
||||
"node-fetch": "^2.6.9",
|
||||
"node-ical": "^0.15.3",
|
||||
"socket.io": "^4.5.4"
|
||||
"socket.io": "^4.6.0"
|
||||
},
|
||||
"_moduleAliases": {
|
||||
"node_helper": "js/node_helper.js",
|
||||
|
1
tests/configs/port_variable.env
Normal file
1
tests/configs/port_variable.env
Normal file
@ -0,0 +1 @@
|
||||
MM_PORT=8090
|
13
tests/configs/port_variable.js.template
Normal file
13
tests/configs/port_variable.js.template
Normal file
@ -0,0 +1,13 @@
|
||||
/* MagicMirror² Test config sample environment set port 8090
|
||||
*
|
||||
* By Rodrigo Ramírez Norambuena https://rodrigoramirez.com
|
||||
* MIT Licensed.
|
||||
*/
|
||||
let config = require(process.cwd() + "/tests/configs/default.js").configFactory({
|
||||
port: ${MM_PORT}
|
||||
});
|
||||
|
||||
/*************** DO NOT EDIT THE LINE BELOW ***************/
|
||||
if (typeof module !== "undefined") {
|
||||
module.exports = config;
|
||||
}
|
15
tests/e2e/template_spec.js
Normal file
15
tests/e2e/template_spec.js
Normal file
@ -0,0 +1,15 @@
|
||||
const helpers = require("./helpers/global-setup");
|
||||
|
||||
describe("templated config with port variable", () => {
|
||||
beforeAll(async () => {
|
||||
await helpers.startApplication("tests/configs/port_variable.js");
|
||||
});
|
||||
afterAll(async () => {
|
||||
await helpers.stopApplication();
|
||||
});
|
||||
|
||||
it("should return 200", async () => {
|
||||
const res = await helpers.fetch("http://localhost:8090");
|
||||
expect(res.status).toBe(200);
|
||||
});
|
||||
});
|
14
vendor/package-lock.json
generated
vendored
14
vendor/package-lock.json
generated
vendored
@ -7,7 +7,7 @@
|
||||
"name": "magicmirror-vendors",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free": "^6.2.1",
|
||||
"@fortawesome/fontawesome-free": "^6.3.0",
|
||||
"moment": "^2.29.4",
|
||||
"moment-timezone": "^0.5.40",
|
||||
"nunjucks": "^3.2.3",
|
||||
@ -16,9 +16,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@fortawesome/fontawesome-free": {
|
||||
"version": "6.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.2.1.tgz",
|
||||
"integrity": "sha512-viouXhegu/TjkvYQoiRZK3aax69dGXxgEjpvZW81wIJdxm5Fnvp3VVIP4VHKqX4SvFw6qpmkILkD4RJWAdrt7A==",
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.3.0.tgz",
|
||||
"integrity": "sha512-qVtd5i1Cc7cdrqnTWqTObKQHjPWAiRwjUPaXObaeNPcy7+WKxJumGBx66rfSFgK6LNpIasVKkEgW8oyf0tmPLA==",
|
||||
"hasInstallScript": true,
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
@ -98,9 +98,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free": {
|
||||
"version": "6.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.2.1.tgz",
|
||||
"integrity": "sha512-viouXhegu/TjkvYQoiRZK3aax69dGXxgEjpvZW81wIJdxm5Fnvp3VVIP4VHKqX4SvFw6qpmkILkD4RJWAdrt7A=="
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.3.0.tgz",
|
||||
"integrity": "sha512-qVtd5i1Cc7cdrqnTWqTObKQHjPWAiRwjUPaXObaeNPcy7+WKxJumGBx66rfSFgK6LNpIasVKkEgW8oyf0tmPLA=="
|
||||
},
|
||||
"a-sync-waterfall": {
|
||||
"version": "1.0.1",
|
||||
|
2
vendor/package.json
vendored
2
vendor/package.json
vendored
@ -10,7 +10,7 @@
|
||||
"url": "https://github.com/MichMich/MagicMirror/issues"
|
||||
},
|
||||
"dependencies": {
|
||||
"@fortawesome/fontawesome-free": "^6.2.1",
|
||||
"@fortawesome/fontawesome-free": "^6.3.0",
|
||||
"moment": "^2.29.4",
|
||||
"moment-timezone": "^0.5.40",
|
||||
"nunjucks": "^3.2.3",
|
||||
|
Loading…
x
Reference in New Issue
Block a user