chore: Improve display of configuration errors (#2014)
* chore: Show all configuration errors at once fix: Remove requirement for deprecated Slack key fix: Add requirement for UTILS_SECRET * chore: Add funding/sponsorship message
This commit is contained in:
parent
1101ea428b
commit
5762fb33d9
|
@ -24,6 +24,10 @@
|
||||||
"test:server": "jest --config=server/.jestconfig.json --runInBand --forceExit",
|
"test:server": "jest --config=server/.jestconfig.json --runInBand --forceExit",
|
||||||
"test:watch": "jest --config=server/.jestconfig.json --runInBand --forceExit --watchAll"
|
"test:watch": "jest --config=server/.jestconfig.json --runInBand --forceExit --watchAll"
|
||||||
},
|
},
|
||||||
|
"funding": {
|
||||||
|
"type": "GitHub Sponsors ❤",
|
||||||
|
"url": "https://github.com/sponsors/outline"
|
||||||
|
},
|
||||||
"jest": {
|
"jest": {
|
||||||
"testURL": "http://localhost",
|
"testURL": "http://localhost",
|
||||||
"verbose": false,
|
"verbose": false,
|
||||||
|
@ -81,8 +85,10 @@
|
||||||
"babel-plugin-styled-components": "^1.11.1",
|
"babel-plugin-styled-components": "^1.11.1",
|
||||||
"babel-plugin-transform-class-properties": "^6.24.1",
|
"babel-plugin-transform-class-properties": "^6.24.1",
|
||||||
"boundless-arrow-key-navigation": "^1.0.4",
|
"boundless-arrow-key-navigation": "^1.0.4",
|
||||||
|
"boxen": "^5.0.1",
|
||||||
"bull": "^3.5.2",
|
"bull": "^3.5.2",
|
||||||
"cancan": "3.1.0",
|
"cancan": "3.1.0",
|
||||||
|
"chalk": "^4.1.0",
|
||||||
"compressorjs": "^1.0.7",
|
"compressorjs": "^1.0.7",
|
||||||
"copy-to-clipboard": "^3.0.6",
|
"copy-to-clipboard": "^3.0.6",
|
||||||
"core-js": "2",
|
"core-js": "2",
|
||||||
|
|
|
@ -1,6 +1,10 @@
|
||||||
// @flow
|
// @flow
|
||||||
require("dotenv").config({ silent: true });
|
require("dotenv").config({ silent: true });
|
||||||
|
|
||||||
|
const errors = [];
|
||||||
|
const boxen = require("boxen");
|
||||||
|
const chalk = require("chalk");
|
||||||
|
|
||||||
// If the DataDog agent is installed and the DD_API_KEY environment variable is
|
// If the DataDog agent is installed and the DD_API_KEY environment variable is
|
||||||
// in the environment then we can safely attempt to start the DD tracer
|
// in the environment then we can safely attempt to start the DD tracer
|
||||||
if (process.env.DD_API_KEY) {
|
if (process.env.DD_API_KEY) {
|
||||||
|
@ -15,10 +19,26 @@ if (
|
||||||
!process.env.SECRET_KEY ||
|
!process.env.SECRET_KEY ||
|
||||||
process.env.SECRET_KEY === "generate_a_new_key"
|
process.env.SECRET_KEY === "generate_a_new_key"
|
||||||
) {
|
) {
|
||||||
console.error(
|
errors.push(
|
||||||
"The SECRET_KEY env variable must be set with the output of `openssl rand -hex 32`"
|
`The ${chalk.bold(
|
||||||
|
"SECRET_KEY"
|
||||||
|
)} env variable must be set with the output of ${chalk.bold(
|
||||||
|
"$ openssl rand -hex 32"
|
||||||
|
)}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
!process.env.UTILS_SECRET ||
|
||||||
|
process.env.UTILS_SECRET === "generate_a_new_key"
|
||||||
|
) {
|
||||||
|
errors.push(
|
||||||
|
`The ${chalk.bold(
|
||||||
|
"UTILS_SECRET"
|
||||||
|
)} env variable must be set with a secret value, it is recommended to use the output of ${chalk.bold(
|
||||||
|
"$ openssl rand -hex 32"
|
||||||
|
)}`
|
||||||
);
|
);
|
||||||
process.exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (process.env.AWS_ACCESS_KEY_ID) {
|
if (process.env.AWS_ACCESS_KEY_ID) {
|
||||||
|
@ -29,48 +49,66 @@ if (process.env.AWS_ACCESS_KEY_ID) {
|
||||||
"AWS_S3_UPLOAD_MAX_SIZE",
|
"AWS_S3_UPLOAD_MAX_SIZE",
|
||||||
].forEach((key) => {
|
].forEach((key) => {
|
||||||
if (!process.env[key]) {
|
if (!process.env[key]) {
|
||||||
console.error(`The ${key} env variable must be set when using AWS`);
|
errors.push(
|
||||||
process.exit(1);
|
`The ${chalk.bold(
|
||||||
|
key
|
||||||
|
)} env variable must be set when using S3 compatible storage`
|
||||||
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (process.env.SLACK_KEY) {
|
|
||||||
if (!process.env.SLACK_SECRET) {
|
|
||||||
console.error(
|
|
||||||
`The SLACK_SECRET env variable must be set when using Slack Sign In`
|
|
||||||
);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!process.env.URL) {
|
if (!process.env.URL) {
|
||||||
console.error(
|
errors.push(
|
||||||
"The URL env variable must be set to the externally accessible URL, e.g (https://www.getoutline.com)"
|
`The ${chalk.bold(
|
||||||
|
"URL"
|
||||||
|
)} env variable must be set to the fully qualified, externally accessible URL, e.g https://wiki.mycompany.com`
|
||||||
);
|
);
|
||||||
process.exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!process.env.DATABASE_URL) {
|
if (!process.env.DATABASE_URL) {
|
||||||
console.error(
|
errors.push(
|
||||||
"The DATABASE_URL env variable must be set to the location of your postgres server, including authentication and port"
|
`The ${chalk.bold(
|
||||||
|
"DATABASE_URL"
|
||||||
|
)} env variable must be set to the location of your postgres server, including username, password, and port`
|
||||||
);
|
);
|
||||||
process.exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!process.env.REDIS_URL) {
|
if (!process.env.REDIS_URL) {
|
||||||
console.error(
|
errors.push(
|
||||||
"The REDIS_URL env variable must be set to the location of your redis server, including authentication and port"
|
`The ${chalk.bold(
|
||||||
|
"REDIS_URL"
|
||||||
|
)} env variable must be set to the location of your redis server, including username, password, and port`
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (errors.length) {
|
||||||
|
console.log(
|
||||||
|
chalk.bold.red(
|
||||||
|
"\n\nThe server could not start, please fix the following configuration errors and try again:\n"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
errors.map((text) => console.log(` - ${text}`));
|
||||||
|
console.log("\n");
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (process.env.NODE_ENV === "production") {
|
if (process.env.NODE_ENV === "production") {
|
||||||
console.log("\n\x1b[33m%s\x1b[0m", "Running Outline in production mode.");
|
console.log(
|
||||||
|
boxen(
|
||||||
|
`
|
||||||
|
Is your team enjoying Outline? Consider supporting future development by sponsoring the project:\n\nhttps://github.com/sponsors/outline
|
||||||
|
`,
|
||||||
|
{ padding: 1, margin: 1, borderStyle: "double", borderColor: "green" }
|
||||||
|
)
|
||||||
|
);
|
||||||
} else if (process.env.NODE_ENV === "development") {
|
} else if (process.env.NODE_ENV === "development") {
|
||||||
console.log(
|
console.log(
|
||||||
"\n\x1b[33m%s\x1b[0m",
|
chalk.yellow(
|
||||||
'Running Outline in development mode with hot reloading. To run Outline in production mode set the NODE_ENV env variable to "production"'
|
`\nRunning Outline in development mode. To run Outline in production mode set the ${chalk.bold(
|
||||||
|
"NODE_ENV"
|
||||||
|
)} env variable to "production"\n`
|
||||||
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
59
yarn.lock
59
yarn.lock
|
@ -2404,6 +2404,13 @@ ansi-align@^2.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
string-width "^2.0.0"
|
string-width "^2.0.0"
|
||||||
|
|
||||||
|
ansi-align@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb"
|
||||||
|
integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==
|
||||||
|
dependencies:
|
||||||
|
string-width "^3.0.0"
|
||||||
|
|
||||||
ansi-colors@^4.1.1:
|
ansi-colors@^4.1.1:
|
||||||
version "4.1.1"
|
version "4.1.1"
|
||||||
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
|
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
|
||||||
|
@ -3136,6 +3143,20 @@ boxen@^1.2.1:
|
||||||
term-size "^1.2.0"
|
term-size "^1.2.0"
|
||||||
widest-line "^2.0.0"
|
widest-line "^2.0.0"
|
||||||
|
|
||||||
|
boxen@^5.0.1:
|
||||||
|
version "5.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.0.1.tgz#657528bdd3f59a772b8279b831f27ec2c744664b"
|
||||||
|
integrity sha512-49VBlw+PrWEF51aCmy7QIteYPIFZxSpvqBdP/2itCPPlJ49kj9zg/XPRFrdkne2W+CfwXUls8exMvu1RysZpKA==
|
||||||
|
dependencies:
|
||||||
|
ansi-align "^3.0.0"
|
||||||
|
camelcase "^6.2.0"
|
||||||
|
chalk "^4.1.0"
|
||||||
|
cli-boxes "^2.2.1"
|
||||||
|
string-width "^4.2.0"
|
||||||
|
type-fest "^0.20.2"
|
||||||
|
widest-line "^3.1.0"
|
||||||
|
wrap-ansi "^7.0.0"
|
||||||
|
|
||||||
brace-expansion@^1.1.7:
|
brace-expansion@^1.1.7:
|
||||||
version "1.1.11"
|
version "1.1.11"
|
||||||
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||||
|
@ -3503,7 +3524,7 @@ camelcase@^5.0.0, camelcase@^5.3.1:
|
||||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
|
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
|
||||||
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
|
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
|
||||||
|
|
||||||
camelcase@^6.0.0:
|
camelcase@^6.0.0, camelcase@^6.2.0:
|
||||||
version "6.2.0"
|
version "6.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809"
|
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809"
|
||||||
integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
|
integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==
|
||||||
|
@ -3571,7 +3592,7 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.4.2:
|
||||||
escape-string-regexp "^1.0.5"
|
escape-string-regexp "^1.0.5"
|
||||||
supports-color "^5.3.0"
|
supports-color "^5.3.0"
|
||||||
|
|
||||||
chalk@^4.0.0:
|
chalk@^4.0.0, chalk@^4.1.0:
|
||||||
version "4.1.0"
|
version "4.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
|
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
|
||||||
integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
|
integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
|
||||||
|
@ -3722,6 +3743,11 @@ cli-boxes@^1.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
|
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143"
|
||||||
integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM=
|
integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM=
|
||||||
|
|
||||||
|
cli-boxes@^2.2.1:
|
||||||
|
version "2.2.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f"
|
||||||
|
integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==
|
||||||
|
|
||||||
cli-color@^1.4.0:
|
cli-color@^1.4.0:
|
||||||
version "1.4.0"
|
version "1.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-1.4.0.tgz#7d10738f48526824f8fe7da51857cb0f572fe01f"
|
resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-1.4.0.tgz#7d10738f48526824f8fe7da51857cb0f572fe01f"
|
||||||
|
@ -12198,10 +12224,10 @@ string-width@^3.0.0, string-width@^3.1.0:
|
||||||
is-fullwidth-code-point "^2.0.0"
|
is-fullwidth-code-point "^2.0.0"
|
||||||
strip-ansi "^5.1.0"
|
strip-ansi "^5.1.0"
|
||||||
|
|
||||||
string-width@^4.1.0, string-width@^4.2.0:
|
string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0:
|
||||||
version "4.2.0"
|
version "4.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
|
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
|
||||||
integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
|
integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==
|
||||||
dependencies:
|
dependencies:
|
||||||
emoji-regex "^8.0.0"
|
emoji-regex "^8.0.0"
|
||||||
is-fullwidth-code-point "^3.0.0"
|
is-fullwidth-code-point "^3.0.0"
|
||||||
|
@ -12860,6 +12886,11 @@ type-fest@^0.16.0:
|
||||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860"
|
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.16.0.tgz#3240b891a78b0deae910dbeb86553e552a148860"
|
||||||
integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==
|
integrity sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==
|
||||||
|
|
||||||
|
type-fest@^0.20.2:
|
||||||
|
version "0.20.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
|
||||||
|
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
|
||||||
|
|
||||||
type-fest@^0.6.0:
|
type-fest@^0.6.0:
|
||||||
version "0.6.0"
|
version "0.6.0"
|
||||||
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
|
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
|
||||||
|
@ -13646,6 +13677,13 @@ widest-line@^2.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
string-width "^2.1.1"
|
string-width "^2.1.1"
|
||||||
|
|
||||||
|
widest-line@^3.1.0:
|
||||||
|
version "3.1.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca"
|
||||||
|
integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==
|
||||||
|
dependencies:
|
||||||
|
string-width "^4.0.0"
|
||||||
|
|
||||||
windows-release@^3.1.0:
|
windows-release@^3.1.0:
|
||||||
version "3.3.3"
|
version "3.3.3"
|
||||||
resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999"
|
resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.3.3.tgz#1c10027c7225743eec6b89df160d64c2e0293999"
|
||||||
|
@ -13865,6 +13903,15 @@ wrap-ansi@^6.2.0:
|
||||||
string-width "^4.1.0"
|
string-width "^4.1.0"
|
||||||
strip-ansi "^6.0.0"
|
strip-ansi "^6.0.0"
|
||||||
|
|
||||||
|
wrap-ansi@^7.0.0:
|
||||||
|
version "7.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
|
||||||
|
integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
|
||||||
|
dependencies:
|
||||||
|
ansi-styles "^4.0.0"
|
||||||
|
string-width "^4.1.0"
|
||||||
|
strip-ansi "^6.0.0"
|
||||||
|
|
||||||
wrappy@1:
|
wrappy@1:
|
||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
||||||
|
|
Reference in New Issue