diff --git a/caprover_deploy.sh b/caprover_deploy.sh index 70156bfd..1c7d6f5c 100755 --- a/caprover_deploy.sh +++ b/caprover_deploy.sh @@ -7,6 +7,7 @@ BUILD_TIMESTAMP=$( date '+%F_%H:%M:%S' ) VERSION_TAG="${REPO}:$VERSION" LOCAL_LOGOUT=$VITE_LOGOUT_REDIRECT +LOCAL_SENTRY_ENV=$VITE_SENTRY_ENV APP_NAME=${1:-vbv-lernwelt} @@ -15,12 +16,15 @@ echo "Deploy to $APP_NAME" if [[ "$APP_NAME" == "myvbv" ]] then VITE_LOGOUT_REDIRECT="https://edumgr.b2clogin.com/edumgr.onmicrosoft.com/b2c_1_signupandsignin/oauth2/v2.0/logout/?post_logout_redirect_uri=https://myvbv.iterativ.ch/" + VITE_SENTRY_ENV="production" elif [[ "$APP_NAME" == "myvbv-stage" ]] then VITE_LOGOUT_REDIRECT="https://vbvtst.b2clogin.com/vbvtst.onmicrosoft.com/b2c_1_signupandsignin/oauth2/v2.0/logout/?post_logout_redirect_uri=https://myvbv-stage.iterativ.ch/" + VITE_SENTRY_ENV="stage" elif [[ "$APP_NAME" == "vbv-lernwelt" ]] then VITE_LOGOUT_REDIRECT="https://vbvdev.b2clogin.com/vbvdev.onmicrosoft.com/b2c_1_signupandsignin/oauth2/v2.0/logout/?post_logout_redirect_uri=https://vbv-lernwelt.control.iterativ.ch" + VITE_SENTRY_ENV="development" fi # script should fail when any process returns non zero code @@ -30,6 +34,7 @@ set -ev npm run build VITE_LOGOUT_REDIRECT=$LOCAL_LOGOUT +VITE_SENTRY_ENV=$LOCAL_SENTRY_ENV # create and push new docker container ## Note that images build with buildx do not appear in your docker images list, therefore the push true must be set diff --git a/client/package-lock.json b/client/package-lock.json index b4527900..efc6bbaa 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -9,6 +9,8 @@ "version": "0.0.0", "dependencies": { "@headlessui/vue": "^1.6.7", + "@sentry/tracing": "^7.20.0", + "@sentry/vue": "^7.20.0", "d3": "^7.6.1", "lodash": "^4.17.21", "loglevel": "^1.8.0", @@ -514,6 +516,85 @@ "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", "dev": true }, + "node_modules/@sentry/browser": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.20.0.tgz", + "integrity": "sha512-L84CdB7DPQ2ohVcWh/KivemndWSZyXRvBZBr+tHFlQchzcaZZ/8lIPvjwvb8OJhzhecDq6JCAyUxaZwyItdyAg==", + "dependencies": { + "@sentry/core": "7.20.0", + "@sentry/types": "7.20.0", + "@sentry/utils": "7.20.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/core": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.20.0.tgz", + "integrity": "sha512-8dIHk8niyEyVayUQpgECHnV2p444nPBjIyuQrtkdTxL7sBLC5+Y0DhRjxg9cJyZe/bZnXVerGkgcA7niKW4W8A==", + "dependencies": { + "@sentry/types": "7.20.0", + "@sentry/utils": "7.20.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/tracing": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.20.0.tgz", + "integrity": "sha512-qg3sMvjuMQl/NEaF8I2IpvUcJ4HGGVIwEqqqZ6hkeHXIKt02p6f+nls45pVhluMiNHAaQJ+vefMTUc3E1yZwDA==", + "dependencies": { + "@sentry/core": "7.20.0", + "@sentry/types": "7.20.0", + "@sentry/utils": "7.20.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/types": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.20.0.tgz", + "integrity": "sha512-x17ddduGWqW95neBFVvxzmInb5WXVw+2PcNASHXpGFhi7v2gz2a7/w2CcIKxsqODNnc+z/k1t0Y+uy9B6aH6ag==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/utils": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.20.0.tgz", + "integrity": "sha512-4lc122TFgkaCAvoPRy+uc5vgOCumTa/2nPkzCSxVsezQs+ebHxyMJQK7GWBLI6P+EzKfEjlgyMzRWaPJ3iJatA==", + "dependencies": { + "@sentry/types": "7.20.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@sentry/vue": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-7.20.0.tgz", + "integrity": "sha512-yqBWREIAsgRBdeVxOvHy/x4JyzMUe2YG9uF4Rw6NRUWiP9TV2RR+TRRDB0H2h4x1UV6c1ZOKAlfWfs8ZOAScVw==", + "dependencies": { + "@sentry/browser": "7.20.0", + "@sentry/core": "7.20.0", + "@sentry/types": "7.20.0", + "@sentry/utils": "7.20.0", + "tslib": "^1.9.3" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "vue": "2.x || 3.x" + } + }, "node_modules/@sideway/address": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", @@ -6273,8 +6354,7 @@ "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/tsutils": { "version": "3.21.0", @@ -7324,6 +7404,64 @@ "integrity": "sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==", "dev": true }, + "@sentry/browser": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-7.20.0.tgz", + "integrity": "sha512-L84CdB7DPQ2ohVcWh/KivemndWSZyXRvBZBr+tHFlQchzcaZZ/8lIPvjwvb8OJhzhecDq6JCAyUxaZwyItdyAg==", + "requires": { + "@sentry/core": "7.20.0", + "@sentry/types": "7.20.0", + "@sentry/utils": "7.20.0", + "tslib": "^1.9.3" + } + }, + "@sentry/core": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-7.20.0.tgz", + "integrity": "sha512-8dIHk8niyEyVayUQpgECHnV2p444nPBjIyuQrtkdTxL7sBLC5+Y0DhRjxg9cJyZe/bZnXVerGkgcA7niKW4W8A==", + "requires": { + "@sentry/types": "7.20.0", + "@sentry/utils": "7.20.0", + "tslib": "^1.9.3" + } + }, + "@sentry/tracing": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-7.20.0.tgz", + "integrity": "sha512-qg3sMvjuMQl/NEaF8I2IpvUcJ4HGGVIwEqqqZ6hkeHXIKt02p6f+nls45pVhluMiNHAaQJ+vefMTUc3E1yZwDA==", + "requires": { + "@sentry/core": "7.20.0", + "@sentry/types": "7.20.0", + "@sentry/utils": "7.20.0", + "tslib": "^1.9.3" + } + }, + "@sentry/types": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@sentry/types/-/types-7.20.0.tgz", + "integrity": "sha512-x17ddduGWqW95neBFVvxzmInb5WXVw+2PcNASHXpGFhi7v2gz2a7/w2CcIKxsqODNnc+z/k1t0Y+uy9B6aH6ag==" + }, + "@sentry/utils": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-7.20.0.tgz", + "integrity": "sha512-4lc122TFgkaCAvoPRy+uc5vgOCumTa/2nPkzCSxVsezQs+ebHxyMJQK7GWBLI6P+EzKfEjlgyMzRWaPJ3iJatA==", + "requires": { + "@sentry/types": "7.20.0", + "tslib": "^1.9.3" + } + }, + "@sentry/vue": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@sentry/vue/-/vue-7.20.0.tgz", + "integrity": "sha512-yqBWREIAsgRBdeVxOvHy/x4JyzMUe2YG9uF4Rw6NRUWiP9TV2RR+TRRDB0H2h4x1UV6c1ZOKAlfWfs8ZOAScVw==", + "requires": { + "@sentry/browser": "7.20.0", + "@sentry/core": "7.20.0", + "@sentry/types": "7.20.0", + "@sentry/utils": "7.20.0", + "tslib": "^1.9.3" + } + }, "@sideway/address": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", @@ -11490,8 +11628,7 @@ "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "tsutils": { "version": "3.21.0", diff --git a/client/package.json b/client/package.json index 2832ffa4..fbb90298 100644 --- a/client/package.json +++ b/client/package.json @@ -15,6 +15,8 @@ }, "dependencies": { "@headlessui/vue": "^1.6.7", + "@sentry/tracing": "^7.20.0", + "@sentry/vue": "^7.20.0", "d3": "^7.6.1", "lodash": "^4.17.21", "loglevel": "^1.8.0", diff --git a/client/src/main.ts b/client/src/main.ts index 72e108bc..d143fa9b 100644 --- a/client/src/main.ts +++ b/client/src/main.ts @@ -1,3 +1,4 @@ +import * as Sentry from "@sentry/vue"; import * as log from "loglevel"; import { createPinia } from "pinia"; import { createApp, markRaw } from "vue"; @@ -24,6 +25,13 @@ if (window.location.href.indexOf("localhost") >= 0) { const i18n = setupI18n(); const app = createApp(App); +Sentry.init({ + app, + environment: import.meta.env.VITE_SENTRY_ENV, + dsn: "https://2df6096a4fd94bd6b4802124d10e4b8d@o8544.ingest.sentry.io/4504157846372352", + tracesSampleRate: 0.0, +}); + // todo: define lang setup loadLocaleMessages(i18n, "de").then(() => { app.use(router); diff --git a/trufflehog-allow.json b/trufflehog-allow.json index 79605f84..0f80add6 100644 --- a/trufflehog-allow.json +++ b/trufflehog-allow.json @@ -6,5 +6,6 @@ "ignore hash 5": "1LhwZ0DvP4cGBgbBdCfaBQV7eiaOc4jWKdzO9WEXLFT7AaqBN6jqd0uyaZeAZ19K", "ignore hash 6": "A035C8C19219BA821ECEA86B64E628F8D684696D", "json base64 content": "regex:\"content\": \"", - "img base64 content": "regex:data:image/png;base64,.*" + "img base64 content": "regex:data:image/png;base64,.*", + "sentry url": "https://2df6096a4fd94bd6b4802124d10e4b8d@o8544.ingest.sentry.io/4504157846372352" }