diff --git a/.dockerignore b/.dockerignore index 134be5d..7168b60 100644 --- a/.dockerignore +++ b/.dockerignore @@ -2,4 +2,5 @@ node_modules .github public k8s -skaffold.yaml \ No newline at end of file +skaffold.yaml +data \ No newline at end of file diff --git a/.env b/.env index 64e6517..71d9fdb 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ PORT=5005 NODE_ENV=development -VERSION=2.1.1 +VERSION=2.2.0 PASSWORD=flame_password SECRET=e02eb43d69953658c6d07311d6313f2d4467672cb881f96b29368ba1f3f4da4b \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index e0766ae..008f899 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +### v2.2.0 (2021-12-17) +- Added option to set custom description for apps ([#201](https://github.com/pawelmalak/flame/issues/201)) +- Fixed fatal error while deploying Flame to cluster ([#242](https://github.com/pawelmalak/flame/issues/242)) + ### v2.1.1 (2021-12-02) - Added support for Docker secrets ([#189](https://github.com/pawelmalak/flame/issues/189)) - Changed some messages and buttons to make it easier to open bookmarks editor ([#239](https://github.com/pawelmalak/flame/issues/239)) diff --git a/README.md b/README.md index 1907682..290f230 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ docker pull pawelmalak/flame:2.0.0 ```sh # run container -docker run -p 5005:5005 -v /path/to/data:/app/data -e PASSWORD=flame_password flame +docker run -p 5005:5005 -v /path/to/data:/app/data -e PASSWORD=flame_password pawelmalak/flame ``` #### Building images diff --git a/client/.env b/client/.env index ea56cdf..b41b338 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -REACT_APP_VERSION=2.1.1 \ No newline at end of file +REACT_APP_VERSION=2.2.0 \ No newline at end of file diff --git a/client/src/components/Apps/AppCard/AppCard.tsx b/client/src/components/Apps/AppCard/AppCard.tsx index 2fe3b21..98ec7ec 100644 --- a/client/src/components/Apps/AppCard/AppCard.tsx +++ b/client/src/components/Apps/AppCard/AppCard.tsx @@ -8,16 +8,15 @@ import { State } from '../../../store/reducers'; interface Props { app: App; - pinHandler?: Function; } -export const AppCard = (props: Props): JSX.Element => { +export const AppCard = ({ app }: Props): JSX.Element => { const { config } = useSelector((state: State) => state.config); - const [displayUrl, redirectUrl] = urlParser(props.app.url); + const [displayUrl, redirectUrl] = urlParser(app.url); let iconEl: JSX.Element; - const { icon } = props.app; + const { icon } = app; if (isImage(icon)) { const source = isUrl(icon) ? icon : `/uploads/${icon}`; @@ -25,7 +24,7 @@ export const AppCard = (props: Props): JSX.Element => { iconEl = ( {`${props.app.name} ); @@ -54,8 +53,8 @@ export const AppCard = (props: Props): JSX.Element => { >
{iconEl}
-
{props.app.name}
- {displayUrl} +
{app.name}
+ {!app.description.length ? displayUrl : app.description}
); diff --git a/client/src/components/Apps/AppForm/AppForm.tsx b/client/src/components/Apps/AppForm/AppForm.tsx index 8679f82..c2dc07a 100644 --- a/client/src/components/Apps/AppForm/AppForm.tsx +++ b/client/src/components/Apps/AppForm/AppForm.tsx @@ -96,7 +96,7 @@ export const AppForm = ({ modalHandler }: Props): JSX.Element => { {/* NAME */} - + { /> + {/* DESCRIPTION */} + + + inputChangeHandler(e)} + /> + + Optional - If description is not set, app URL will be displayed + + + {/* ICON */} {!useCustomIcon ? ( // use mdi icon - + { + await query.addColumn('apps', 'description', { + type: STRING, + allowNull: false, + defaultValue: '', + }); +}; + +const down = async (query) => { + await query.removeColumn('apps', 'description'); +}; + +module.exports = { + up, + down, +}; diff --git a/models/App.js b/models/App.js index 8971d60..7eb022f 100644 --- a/models/App.js +++ b/models/App.js @@ -31,6 +31,11 @@ const App = sequelize.define( allowNull: true, defaultValue: 1, }, + description: { + type: DataTypes.STRING, + allowNull: false, + defaultValue: '', + }, }, { tableName: 'apps', diff --git a/package-lock.json b/package-lock.json index ef91c52..62e1aba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "@types/express": "^4.17.13", "axios": "^0.24.0", "concurrently": "^6.3.0", - "docker-secret": "^1.2.3", + "docker-secret": "^1.2.4", "dotenv": "^10.0.0", "express": "^4.17.1", "jsonwebtoken": "^8.5.1", @@ -1191,9 +1191,9 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "node_modules/docker-secret": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/docker-secret/-/docker-secret-1.2.3.tgz", - "integrity": "sha512-JFUGiZEiNO0Hi9YzZAdCc5MwUpgQOjz0OeZkkcEv+lH6ZBkXNK97w2gcBQCsg5WRsT+Cj9eKFhuYyDxT8j56+A==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/docker-secret/-/docker-secret-1.2.4.tgz", + "integrity": "sha512-aH3truzfxV8TikMa0wJES8h0v2FAwhuQZYk116ZVOHFZ1vnDTGutgCOvXmBPyLBG1Lo7yv93FdHVRTvhFFaC/g==", "engines": { "node": ">= 6" } @@ -5335,9 +5335,9 @@ } }, "docker-secret": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/docker-secret/-/docker-secret-1.2.3.tgz", - "integrity": "sha512-JFUGiZEiNO0Hi9YzZAdCc5MwUpgQOjz0OeZkkcEv+lH6ZBkXNK97w2gcBQCsg5WRsT+Cj9eKFhuYyDxT8j56+A==" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/docker-secret/-/docker-secret-1.2.4.tgz", + "integrity": "sha512-aH3truzfxV8TikMa0wJES8h0v2FAwhuQZYk116ZVOHFZ1vnDTGutgCOvXmBPyLBG1Lo7yv93FdHVRTvhFFaC/g==" }, "dot-prop": { "version": "5.3.0", @@ -7754,4 +7754,4 @@ "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" } } -} \ No newline at end of file +} diff --git a/package.json b/package.json index 39a25d6..1b3c92b 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "@types/express": "^4.17.13", "axios": "^0.24.0", "concurrently": "^6.3.0", - "docker-secret": "^1.2.3", + "docker-secret": "^1.2.4", "dotenv": "^10.0.0", "express": "^4.17.1", "jsonwebtoken": "^8.5.1", diff --git a/utils/init/initDockerSecrets.js b/utils/init/initDockerSecrets.js index 4a66320..c38a33f 100644 --- a/utils/init/initDockerSecrets.js +++ b/utils/init/initDockerSecrets.js @@ -3,14 +3,18 @@ const Logger = require('../Logger'); const logger = new Logger(); const initDockerSecrets = () => { - const secrets = getSecrets(); + try { + const secrets = getSecrets(); - for (const property in secrets) { - const upperProperty = property.toUpperCase(); + for (const property in secrets) { + const upperProperty = property.toUpperCase(); - process.env[upperProperty] = secrets[property]; + process.env[upperProperty] = secrets[property]; - logger.log(`${upperProperty} was overwritten with docker secret value`); + logger.log(`${upperProperty} was overwritten with docker secret value`); + } + } catch (e) { + logger.log(`Failed to initialize docker secrets. Error: ${e}`, 'ERROR'); } };