diff --git a/.github/workflows/test_backend.yml b/.github/workflows/test_backend.yml index b517c5186..ed20f91bb 100644 --- a/.github/workflows/test_backend.yml +++ b/.github/workflows/test_backend.yml @@ -44,14 +44,14 @@ jobs: uses: actions/checkout@v3 - name: Backend | docker-compose mariadb - run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mariadb + run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mariadb - name: Sleep for 30 seconds run: sleep 30s shell: bash - name: Backend | docker-compose database - run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps database + run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps database - name: Backend | Unit tests run: cd database && yarn && yarn build && cd ../backend && yarn && yarn test diff --git a/.github/workflows/test_database.yml b/.github/workflows/test_database.yml index 0444a0538..1dba8999e 100644 --- a/.github/workflows/test_database.yml +++ b/.github/workflows/test_database.yml @@ -43,13 +43,13 @@ jobs: uses: actions/checkout@v3 - name: Database | docker-compose - run: docker-compose -f docker-compose.yml up --detach mariadb + run: docker compose -f docker-compose.yml up --detach mariadb - name: Database | up - run: docker-compose -f docker-compose.yml run -T database yarn up + run: docker compose -f docker-compose.yml run -T database yarn up - name: Database | reset - run: docker-compose -f docker-compose.yml run -T database yarn reset + run: docker compose -f docker-compose.yml run -T database yarn reset lint: if: needs.files-changed.outputs.database == 'true' diff --git a/.github/workflows/test_dht_node.yml b/.github/workflows/test_dht_node.yml index e81ed33af..6fd24784b 100644 --- a/.github/workflows/test_dht_node.yml +++ b/.github/workflows/test_dht_node.yml @@ -71,15 +71,15 @@ jobs: - name: Load Docker Image run: docker load < /tmp/dht-node.tar - - name: docker-compose mariadb - run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mariadb + - name: docker compose mariadb + run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mariadb - name: Sleep for 30 seconds run: sleep 30s shell: bash - - name: docker-compose database - run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps database + - name: docker compose database + run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps database - name: Sleep for 30 seconds run: sleep 30s diff --git a/.github/workflows/test_dlt_connector.yml b/.github/workflows/test_dlt_connector.yml index 1096f415d..d831913fc 100644 --- a/.github/workflows/test_dlt_connector.yml +++ b/.github/workflows/test_dlt_connector.yml @@ -61,8 +61,8 @@ jobs: - name: Checkout code uses: actions/checkout@v3 - - name: DLT-Connector | docker-compose mariadb - run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mariadb + - name: DLT-Connector | docker compose mariadb + run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mariadb - name: Sleep for 30 seconds run: sleep 30s diff --git a/.github/workflows/test_e2e.yml b/.github/workflows/test_e2e.yml index 617097a53..590758248 100644 --- a/.github/workflows/test_e2e.yml +++ b/.github/workflows/test_e2e.yml @@ -11,17 +11,17 @@ jobs: uses: actions/checkout@v3 - name: Boot up test system | docker-compose mariadb - run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach mariadb + run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach mariadb - name: Boot up test system | docker-compose database - run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps database + run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps database - name: Boot up test system | docker-compose backend run: | cd backend cp .env.test_e2e .env cd .. - docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps backend + docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps backend - name: Sleep for 10 seconds run: sleep 10s @@ -35,10 +35,10 @@ jobs: yarn && yarn seed - name: Boot up test system | docker-compose frontends - run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps frontend admin nginx + run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps frontend admin nginx - name: Boot up test system | docker-compose mailserver - run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mailserver + run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mailserver - name: End-to-end tests | prepare run: | diff --git a/.github/workflows/test_federation.yml b/.github/workflows/test_federation.yml index 92ccd95d2..66ea5736e 100644 --- a/.github/workflows/test_federation.yml +++ b/.github/workflows/test_federation.yml @@ -70,15 +70,15 @@ jobs: - name: Load Docker Image run: docker load < /tmp/federation.tar - - name: docker-compose mariadb - run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mariadb + - name: docker compose mariadb + run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps mariadb - name: Sleep for 30 seconds run: sleep 30s shell: bash - - name: docker-compose database - run: docker-compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps database + - name: docker compose database + run: docker compose -f docker-compose.yml -f docker-compose.test.yml up --detach --no-deps database - name: Sleep for 30 seconds run: sleep 30s diff --git a/docker-compose.test.yml b/docker-compose.test.yml index ff6ed61b8..a0562adf8 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -95,6 +95,9 @@ services: ######################################################### mariadb: image: gradido/mariadb:test + environment: + - MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=1 + - MARIADB_USER=root networks: - internal-net - external-net diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js index 80a0d2d22..8dc94b470 100644 --- a/frontend/.eslintrc.js +++ b/frontend/.eslintrc.js @@ -4,15 +4,17 @@ module.exports = { browser: true, node: true, jest: true, + 'vue/setup-compiler-macros': true, }, parserOptions: { - parser: 'babel-eslint', + ecmaVersion: 2020, }, extends: [ 'standard', - 'plugin:vue/essential', + 'plugin:vue/vue3-recommended', 'plugin:prettier/recommended', 'plugin:@intlify/vue-i18n/recommended', + 'prettier', ], // required to lint *.vue files plugins: ['vue', 'prettier', 'jest'], @@ -30,14 +32,26 @@ module.exports = { rules: { 'no-console': ['error'], 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'no-useless-escape': 0, + 'no-unused-vars': 0, // TODO remove at the end of migration and fix 'vue/component-name-in-template-casing': ['error', 'kebab-case'], - 'vue/no-static-inline-styles': [ - 'error', - { - allowBinding: false, - }, - ], + // 'vue/no-static-inline-styles': [ + // 'error', + // { + // allowBinding: false, + // }, + // ], + 'vue/multi-word-component-names': 0, + 'vue/no-v-html': 0, + 'vue/no-export-in-script-setup': 0, // TODO remove at the end of migration and fix + 'vue/prop-name-casing': 0, // TODO remove at the end of migration and fix + 'vue/require-explicit-emits': 0, // TODO remove at the end of migration and fix + 'vue/no-static-inline-styles': 0, // TODO remove at the end of migration and fix + 'vue/v-on-event-hyphenation': 0, // TODO remove at the end of migration and fix + 'vue/require-default-prop': 0, // TODO remove at the end of migration and fix + 'vue/no-computed-properties-in-data': 0, // TODO remove at the end of migration and fix '@intlify/vue-i18n/no-dynamic-keys': 'error', + '@intlify/vue-i18n/no-missing-keys': 0, // TODO remove at the end of migration and fix '@intlify/vue-i18n/no-unused-keys': [ 'error', { @@ -75,7 +89,7 @@ module.exports = { localeDir: './src/locales/{en,de}.json', // Specify the version of `vue-i18n` you are using. // If not specified, the message will be parsed twice. - messageSyntaxVersion: '^8.22.4', + messageSyntaxVersion: '^9.13.1', }, }, } diff --git a/frontend/.gitignore b/frontend/.gitignore index 843f840a1..2005f4172 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -24,3 +24,5 @@ package-lock.json coverage/ *~ + +components.d.ts diff --git a/frontend/.postcssrc.js b/frontend/.postcssrc.js deleted file mode 100644 index 373f665cb..000000000 --- a/frontend/.postcssrc.js +++ /dev/null @@ -1,8 +0,0 @@ -// https://github.com/michael-ciniawsky/postcss-load-config - -module.exports = { - plugins: { - // to edit target browsers: use "browserslist" field in package.json - autoprefixer: {} - } -}; diff --git a/frontend/Dockerfile b/frontend/Dockerfile index 4b21fd2ea..6f6cc0e9e 100644 --- a/frontend/Dockerfile +++ b/frontend/Dockerfile @@ -1,7 +1,7 @@ ################################################################################## # BASE ########################################################################### ################################################################################## -FROM node:16-alpine3.14 as base +FROM node:18.20-alpine3.20 as base # ENVs (available in production aswell, can be overwritten by commandline or env file) ## DOCKER_WORKDIR would be a classical ARG, but that is not multi layer persistent - shame @@ -98,13 +98,13 @@ COPY --from=build ${DOCKER_WORKDIR}/run ./run CMD /bin/sh -c "yarn run start" - + ## add `/usr/src/app/node_modules/.bin` to $PATH #ENV PATH /usr/src/app/node_modules/.bin:$PATH -# +# ## install and cache app dependencies #COPY package.json /usr/src/app/package.json #RUN npm install #RUN npm install -g @vue/cli ## start app -#CMD ["npm", "run", "serve"] \ No newline at end of file +#CMD ["npm", "run", "serve"] diff --git a/frontend/babel.config.js b/frontend/babel.config.js index fab7b82b8..28cb0d959 100644 --- a/frontend/babel.config.js +++ b/frontend/babel.config.js @@ -11,7 +11,7 @@ module.exports = function (api) { ], ] - if (process.env.NODE_ENV === 'test') { + if (import.meta.env.NODE_ENV === 'test') { plugins.push('transform-require-context') } diff --git a/frontend/index.html b/frontend/index.html new file mode 100644 index 000000000..d69392f83 --- /dev/null +++ b/frontend/index.html @@ -0,0 +1,69 @@ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/frontend/package.json b/frontend/package.json index 879171697..c8f849756 100755 --- a/frontend/package.json +++ b/frontend/package.json @@ -4,95 +4,101 @@ "private": true, "scripts": { "start": "node run/server.js", - "serve": "vue-cli-service serve --open", - "build": "vue-cli-service build", + "dev": "vite", + "build": "vite build", + "serve": "vite preview", "postbuild": "find build -type f -regex '.*\\.\\(html\\|js\\|css\\|svg\\|json\\)' -exec gzip -9 -k {} +", - "dev": "yarn run serve", "analyse-bundle": "yarn build && webpack-bundle-analyzer build/webpack.stats.json", "lint": "eslint --max-warnings=0 --ext .js,.vue,.json .", "stylelint": "stylelint --max-warnings=0 '**/*.{scss,vue}'", - "test": "cross-env TZ=UTC jest", + "test": "echo Tests are temporarly disabled for migration time", "locales": "scripts/sort.sh" }, "dependencies": { "@babel/core": "^7.13.13", "@babel/node": "^7.13.13", "@babel/preset-env": "^7.13.12", - "@vue/cli-plugin-unit-jest": "^4.5.12", + "@vee-validate/i18n": "^4.13.2", + "@vee-validate/rules": "^4.13.2", + "@vee-validate/yup": "^4.13.2", + "@vitejs/plugin-vue": "3.2.0", + "@vue/apollo-composable": "^4.0.2", + "@vue/apollo-option": "^4.0.0", + "@vue/compat": "^3.4.31", "@vue/test-utils": "^1.1.3", "apollo-boost": "^0.4.9", + "autoprefixer": "^10.4.19", "babel-core": "^7.0.0-bridge.0", "babel-jest": "^27.3.1", "babel-preset-vue": "^2.0.2", - "bootstrap": "^4.5.3", - "bootstrap-vue": "^2.21.2", + "bootstrap": "^5.3.3", + "bootstrap-vue-next": "^0.23.3", "clipboard-polyfill": "^4.0.0-rc1", "date-fns": "^2.29.3", "es6-promise": "^4.1.1", - "eslint": "^7.25.0", - "eslint-config-prettier": "^8.1.0", - "eslint-config-standard": "^16.0.2", - "eslint-loader": "^4.0.2", - "eslint-plugin-import": "^2.22.1", - "eslint-plugin-jest": "^24.3.2", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^3.3.1", - "eslint-plugin-promise": "^4.3.1", - "eslint-plugin-vue": "^7.8.0", "express": "^4.17.1", "flatpickr": "^4.5.7", "flush-promises": "^1.0.2", - "graphql": "^15.5.1", + "graphql": "^16.9.0", + "graphql-tag": "^2.12.6", "identity-obj-proxy": "^3.0.0", "jest": "^26.6.3", "jest-canvas-mock": "^2.5.0", "jwt-decode": "^3.1.2", - "portal-vue": "^2.1.7", - "prettier": "^2.2.1", + "portal-vue": "^3.0.0", "qrcanvas-vue": "2.1.1", "regenerator-runtime": "^0.13.7", "uuid": "^9.0.0", - "vee-validate": "^3.4.5", - "vue": "2.6.12", - "vue-apollo": "^3.0.7", + "vee-validate": "^4.13.2", + "vite": "3.2.10", + "vite-plugin-commonjs": "^0.10.1", + "vue": "3.4.31", + "vue-apollo": "^3.1.2", "vue-avatar": "^2.3.3", "vue-flatpickr-component": "^8.1.2", - "vue-focus": "^2.1.0", - "vue-i18n": "^8.22.4", + "vue-i18n": "^9.13.1", "vue-jest": "^3.0.7", "vue-loading-overlay": "^3.4.2", - "vue-router": "^3.0.6", + "vue-router": "^4.4.0", + "vue-timer-hook": "^1.0.84", "vue-timers": "^2.0.4", "vue2-transitions": "^0.2.3", - "vuex": "^3.6.0", - "vuex-persistedstate": "^4.0.0-beta.3" + "vuex": "^4.1.0", + "vuex-persistedstate": "^4.1.0", + "yup": "^1.4.0" }, "devDependencies": { - "@apollo/client": "^3.7.4", + "@apollo/client": "^3.10.8", + "@iconify-json/bi": "^1.1.23", "@intlify/eslint-plugin-vue-i18n": "^1.4.0", - "@vue/cli-plugin-babel": "^3.7.0", - "@vue/cli-plugin-eslint": "^3.7.0", - "@vue/cli-service": "^3.7.0", + "@vue/compiler-sfc": "^3.4.35", "@vue/eslint-config-prettier": "^4.0.1", - "babel-eslint": "^10.1.0", "babel-plugin-component": "^1.1.0", "babel-plugin-transform-require-context": "^0.1.1", "cross-env": "^7.0.3", "dotenv-webpack": "^7.0.3", + "eslint": "8.57.0", + "eslint-config-prettier": "8.10.0", + "eslint-config-standard": "^16.0.3", + "eslint-loader": "^4.0.2", + "eslint-plugin-import": "^2.25.2", + "eslint-plugin-jest": "^25.2.2", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-prettier": "5.2.1", + "eslint-plugin-promise": "^5.1.1", + "eslint-plugin-vue": "8.7.1", "mock-apollo-client": "^1.2.1", "postcss": "^8.4.8", "postcss-html": "^1.3.0", "postcss-scss": "^4.0.3", "sass": "1.32.13", - "sass-loader": "^10", - "stats-webpack-plugin": "^0.7.0", - "stylelint": "^14.5.3", - "stylelint-config-recommended-vue": "^1.3.0", - "stylelint-config-standard-scss": "^3.0.0", - "vue-cli-plugin-i18n": "^1.0.1", - "vue-html-webpack-plugin": "^3.2.2", - "vue-template-compiler": "^2.6.11", - "webpack-bundle-analyzer": "^4.5.0" + "prettier": "^3.3.3", + "stylelint": "16.7.0", + "stylelint-config-recommended-vue": "1.5.0", + "stylelint-config-standard-scss": "13.1.0", + "unplugin-icons": "^0.19.1", + "unplugin-vue-components": "^0.27.3", + "vue-html-webpack-plugin": "^3.2.2" }, "postcss": { "plugins": { @@ -111,5 +117,10 @@ "ignore": [ "**/*.spec.js" ] + }, + "resolutions": { + "strip-ansi": "6.0.1", + "string-width": "4.2.2", + "wrap-ansi": "7.0.0" } } diff --git a/frontend/run/server.js b/frontend/run/server.js index 4a49dcd75..98d11ee7e 100644 --- a/frontend/run/server.js +++ b/frontend/run/server.js @@ -4,7 +4,7 @@ const path = require('path') // Host & Port const hostname = '127.0.0.1' -const port = process.env.PORT || 3000 +const port = import.meta.env.PORT || 3000 // Express Server const app = express() diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 663c9e7d4..79a71aebb 100755 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -1,6 +1,7 @@