diff --git a/.github/workflows/ci-events-graphql-proxy-check.yml b/.github/workflows/ci-events-graphql-proxy-check.yml new file mode 100644 index 000000000..c01706962 --- /dev/null +++ b/.github/workflows/ci-events-graphql-proxy-check.yml @@ -0,0 +1,40 @@ +name: CI-Events-Graphql-Proxy + +on: + push: + branches: [main] + # Only consider those paths to trigger the action + paths: + - 'proxies/events-graphql-proxy/**' + - '.yarnrc.yml' + - 'tsconfig.base.json' + - '.prettier*' + - '.github/workflows/ci-events-graphql-proxy-check.yml' + + pull_request: + branches: [main] + # Only consider those paths to trigger the action + paths: + - 'proxies/events-graphql-proxy/**' + - '.yarnrc.yml' + - 'tsconfig.base.json' + - '.prettier*' + - '.github/workflows/ci-events-graphql-proxy-check.yml' + workflow_dispatch: + +jobs: + common: + uses: City-of-Helsinki/.github/.github/workflows/ci-node.yml@main + secrets: inherit + with: + node-version: 20 + typecheck: true + app-directory: proxies/events-graphql-proxy + extra-commands: | + echo "GRAPHQL_PROXY_PORT=4100" >> $GITHUB_ENV + echo "GRAPHQL_PROXY_API_BASE_URL=https://api.hel.fi/linkedevents/v1/" >> $GITHUB_ENV + echo "GRAPHQL_PROXY_MAP_OPEN_DATA_API_BASE_URL=https://kartta.hel.fi/ws/geoserver/avoindata" >> $GITHUB_ENV + echo "GRAPHQL_PROXY_DISABLE_WINSTON_LOGGING=0" >> $GITHUB_ENV + echo "GRAPHQL_PROXY_INTROSPECTION=1" >> $GITHUB_ENV + echo "GRAPHQL_PROXY_SENTRY_ENVIRONMENT=development" >> $GITHUB_ENV + echo "GRAPHQL_PROXY_SENTRY_DSN=https://0b946822a84596cdd0453aa5d93d3b9e@sentry.test.hel.ninja/219" >> $GITHUB_ENV diff --git a/.github/workflows/ci-events-helsinki-check.yml b/.github/workflows/ci-events-helsinki-check.yml new file mode 100644 index 000000000..5f356446b --- /dev/null +++ b/.github/workflows/ci-events-helsinki-check.yml @@ -0,0 +1,67 @@ +name: CI-Events-Helsinki + +on: + push: + branches: [main] + # Only consider those paths to trigger the action + paths: + - 'apps/events-helsinki/**' + - 'packages/components/**' + - 'packages/common-i18n/**' + - '.yarnrc.yml' + - 'tsconfig.base.json' + - '.prettier*' + - '.github/workflows/ci-events-helsinki-check.yml' + + pull_request: + branches: [main] + # Only consider those paths to trigger the action + paths: + - 'apps/events-helsinki/**' + - 'packages/components/**' + - 'packages/common-i18n/**' + - '.yarnrc.yml' + - 'tsconfig.base.json' + - '.prettier*' + - '.github/workflows/ci-events-helsinki-check.yml' + +env: + CI: true + FEDERATION_ROUTER_ENDPOINT: https://events-graphql-federation-events.test.hel.ninja/ + CMS_ORIGIN: https://tapahtumat.app-staging.hkih.hion.dev + LINKEDEVENTS_EVENT_ENDPOINT: https://api.hel.fi/linkedevents/v1/event + +jobs: + common: + uses: City-of-Helsinki/.github/.github/workflows/ci-node.yml@main + secrets: inherit + with: + node-version: 20 + typecheck: true + app-directory: apps/events-helsinki + extra-commands: | + # Timezone for tests + echo "TZ=Europe/Helsinki" >> $GITHUB_ENV + # Speed up build: they are linted in a previous step + echo "NEXTJS_IGNORE_ESLINT=true" >> $GITHUB_ENV + # Speed up build: they are typechecked in a previous step + echo "NEXTJS_IGNORE_TYPECHECK=true" >> $GITHUB_ENV + # Speed up build: don't run if not needed, enable if it becomes needed + echo "NEXT_DISABLE_SOURCEMAPS=true" >> $GITHUB_ENV + # Don't send telemetry for ci + echo "NEXT_TELEMETRY_DISABLED=true" >> $GITHUB_ENV + # To allow checking size-limits + echo "NEXTJS_DISABLE_SENTRY=false" >> $GITHUB_ENV + # Fully disable sentry upload + echo "NEXTJS_SENTRY_UPLOAD_DRY_RUN=true" >> $GITHUB_ENV + echo "FEDERATION_ROUTER_ENDPOINT=https://events-graphql-federation-events.test.hel.ninja/" >> $GITHUB_ENV + echo "CMS_ORIGIN=https://tapahtumat.app-staging.hkih.hion.dev" >> $GITHUB_ENV + echo "LINKEDEVENTS_EVENT_ENDPOINT=https://api.hel.fi/linkedevents/v1/event" >> $GITHUB_ENV + # Mock origin + echo "NEXT_PUBLIC_APP_ORIGIN=https://localhost:3001" >> $GITHUB_ENV + echo "NEXT_PUBLIC_MATOMO_URL_BASE=//webanalytics.digiaiiris.com/js/" >> $GITHUB_ENV + echo "NEXT_PUBLIC_MATOMO_SITE_ID=708" >> $GITHUB_ENV + echo "NEXT_PUBLIC_MATOMO_SRC_URL=piwik.min.js" >> $GITHUB_ENV + echo "NEXT_PUBLIC_MATOMO_TRACKER_URL=tracker.php" >> $GITHUB_ENV + echo "NEXT_PUBLIC_MATOMO_ENABLED=0" >> $GITHUB_ENV + echo "SKIP_BUILD_STATIC_GENERATION=1" >> $GITHUB_ENV diff --git a/.github/workflows/ci-hobbies-helsinki-check.yml b/.github/workflows/ci-hobbies-helsinki-check.yml new file mode 100644 index 000000000..0c49526e0 --- /dev/null +++ b/.github/workflows/ci-hobbies-helsinki-check.yml @@ -0,0 +1,62 @@ +name: CI-Hobbies-Helsinki + +on: + push: + branches: [main] + # Only consider those paths to trigger the action + paths: + - 'apps/hobbies-helsinki/**' + - 'packages/components/**' + - 'packages/common-i18n/**' + - '.yarnrc.yml' + - 'tsconfig.base.json' + - '.prettier*' + - '.github/workflows/ci-hobbies-helsinki-check.yml' + + pull_request: + branches: [main] + # Only consider those paths to trigger the action + paths: + - 'apps/hobbies-helsinki/**' + - 'packages/components/**' + - 'packages/common-i18n/**' + - '.yarnrc.yml' + - 'tsconfig.base.json' + - '.prettier*' + - '.github/workflows/ci-hobbies-helsinki-check.yml' + workflow_dispatch: + +jobs: + common: + uses: City-of-Helsinki/.github/.github/workflows/ci-node.yml@main + secrets: inherit + with: + node-version: 20 + typecheck: true + app-directory: apps/hobbies-helsinki + extra-commands: | + # Timezone for tests + echo "TZ=Europe/Helsinki" >> $GITHUB_ENV + # Speed up build: they are linted in a previous step + echo "NEXTJS_IGNORE_ESLINT=true" >> $GITHUB_ENV + # Speed up build: they are typechecked in a previous step + echo "NEXTJS_IGNORE_TYPECHECK=true" >> $GITHUB_ENV + # Speed up build: don't run if not needed, enable if it becomes needed + echo "NEXT_DISABLE_SOURCEMAPS=true" >> $GITHUB_ENV + # Don't send telemetry for ci + echo "NEXT_TELEMETRY_DISABLED=true" >> $GITHUB_ENV + # To allow checking size-limits + echo "NEXTJS_DISABLE_SENTRY=false" >> $GITHUB_ENV + # Fully disable sentry upload + echo "NEXTJS_SENTRY_UPLOAD_DRY_RUN=true" >> $GITHUB_ENV + echo "FEDERATION_ROUTER_ENDPOINT=https://events-graphql-federation-hobbies.test.hel.ninja/" >> $GITHUB_ENV + echo "CMS_ORIGIN=https://harrastus.app-staging.hkih.hion.dev" >> $GITHUB_ENV + echo "LINKEDEVENTS_EVENT_ENDPOINT=https://api.hel.fi/linkedevents/v1/event" >> $GITHUB_ENV + # Mock origin + echo "NEXT_PUBLIC_APP_ORIGIN=https://localhost:3001" >> $GITHUB_ENV + echo "NEXT_PUBLIC_MATOMO_URL_BASE=//webanalytics.digiaiiris.com/js/" >> $GITHUB_ENV + echo "NEXT_PUBLIC_MATOMO_SITE_ID=939" >> $GITHUB_ENV + echo "NEXT_PUBLIC_MATOMO_SRC_URL=piwik.min.js" >> $GITHUB_ENV + echo "NEXT_PUBLIC_MATOMO_TRACKER_URL=tracker.php" >> $GITHUB_ENV + echo "NEXT_PUBLIC_MATOMO_ENABLED=0" >> $GITHUB_ENV + echo "SKIP_BUILD_STATIC_GENERATION=1" >> $GITHUB_ENV diff --git a/.github/workflows/ci-monorepo-integrity.yml b/.github/workflows/ci-monorepo-integrity.yml index cef8d8df8..4075c8032 100644 --- a/.github/workflows/ci-monorepo-integrity.yml +++ b/.github/workflows/ci-monorepo-integrity.yml @@ -2,23 +2,18 @@ name: CI-monorepo-integrity on: push: - branches: - - dev - - main + branches: [main] paths: - 'yarn.lock' - '.yarnrc.yml' - - '.github/workflows/**' + - '.github/workflows/ci-monorepo-integrity.yml' pull_request: - types: - - opened - - synchronize - - reopened + branches: [main] paths: - 'yarn.lock' - '.yarnrc.yml' - - '.github/workflows/**' + - '.github/workflows/ci-monorepo-integrity.yml' jobs: test: @@ -27,10 +22,10 @@ jobs: matrix: node-version: [20.x] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} @@ -41,7 +36,7 @@ jobs: run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - name: Restore yarn cache - uses: actions/cache@v3 + uses: actions/cache@v4 id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} diff --git a/.github/workflows/ci-packages.yml b/.github/workflows/ci-packages.yml index 47a0c9145..5a256908e 100644 --- a/.github/workflows/ci-packages.yml +++ b/.github/workflows/ci-packages.yml @@ -12,7 +12,7 @@ on: - '.prettier*' - 'tsconfig.base.json' - '.prettier*' - - '.github/workflows/**' + - '.github/workflows/ci-packages.yml' pull_request: types: @@ -26,7 +26,7 @@ on: - '.prettier*' - 'tsconfig.base.json' - '.prettier*' - - '.github/workflows/**' + - '.github/workflows/ci-packages.yml' env: CI: true @@ -38,14 +38,14 @@ jobs: matrix: node-version: [20.x] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: # Fetch all git history so that yarn workspaces --since can compare with the correct commits # @link https://github.com/actions/checkout#fetch-all-history-for-all-tags-and-branches fetch-depth: 0 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} @@ -56,7 +56,7 @@ jobs: run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - name: Restore yarn cache - uses: actions/cache@v3 + uses: actions/cache@v4 id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} @@ -65,7 +65,7 @@ jobs: yarn-cache-folder- - name: Restore packages cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | ${{ github.workspace }}/.cache diff --git a/.github/workflows/ci-sports-helsinki-check.yml b/.github/workflows/ci-sports-helsinki-check.yml new file mode 100644 index 000000000..35740d042 --- /dev/null +++ b/.github/workflows/ci-sports-helsinki-check.yml @@ -0,0 +1,61 @@ +name: CI-Sports-Helsinki + +on: + push: + branches: [main] + # Only consider those paths to trigger the action + paths: + - 'apps/sports-helsinki/**' + - 'packages/components/**' + - 'packages/common-i18n/**' + - '.yarnrc.yml' + - 'tsconfig.base.json' + - '.prettier*' + - '.github/workflows/ci-sports-helsinki-check.yml' + + pull_request: + branches: [main] + # Only consider those paths to trigger the action + paths: + - 'apps/sports-helsinki/**' + - 'packages/components/**' + - 'packages/common-i18n/**' + - '.yarnrc.yml' + - 'tsconfig.base.json' + - '.prettier*' + - '.github/workflows/ci-sports-helsinki-check.yml' + +jobs: + common: + uses: City-of-Helsinki/.github/.github/workflows/ci-node.yml@main + secrets: inherit + with: + node-version: 20 + typecheck: true + app-directory: apps/sports-helsinki + extra-commands: | + # Timezone for tests + echo "TZ=Europe/Helsinki" >> $GITHUB_ENV + # Speed up build: they are linted in a previous step + echo "NEXTJS_IGNORE_ESLINT=true" >> $GITHUB_ENV + # Speed up build: they are typechecked in a previous step + echo "NEXTJS_IGNORE_TYPECHECK=true" >> $GITHUB_ENV + # Speed up build: don't run if not needed, enable if it becomes needed + echo "NEXT_DISABLE_SOURCEMAPS=true" >> $GITHUB_ENV + # Don't send telemetry for ci + echo "NEXT_TELEMETRY_DISABLED=true" >> $GITHUB_ENV + # To allow checking size-limits + echo "NEXTJS_DISABLE_SENTRY=false" >> $GITHUB_ENV + # Fully disable sentry upload + echo "NEXTJS_SENTRY_UPLOAD_DRY_RUN=true" >> $GITHUB_ENV + echo "FEDERATION_ROUTER_ENDPOINT=https://events-graphql-federation-sports.test.hel.ninja/" >> $GITHUB_ENV + echo "CMS_ORIGIN=https://liikunta.app-staging.hkih.hion.dev" >> $GITHUB_ENV + echo "LINKEDEVENTS_EVENT_ENDPOINT=https://api.hel.fi/linkedevents/v1/event" >> $GITHUB_ENV + # Mock origin + echo "NEXT_PUBLIC_APP_ORIGIN=https://localhost:3001" >> $GITHUB_ENV + echo "NEXT_PUBLIC_MATOMO_URL_BASE=//webanalytics.digiaiiris.com/js/" >> $GITHUB_ENV + echo "NEXT_PUBLIC_MATOMO_SITE_ID=939" >> $GITHUB_ENV + echo "NEXT_PUBLIC_MATOMO_SRC_URL=piwik.min.js" >> $GITHUB_ENV + echo "NEXT_PUBLIC_MATOMO_TRACKER_URL=tracker.php" >> $GITHUB_ENV + echo "NEXT_PUBLIC_MATOMO_ENABLED=0" >> $GITHUB_ENV + echo "SKIP_BUILD_STATIC_GENERATION=1" >> $GITHUB_ENV diff --git a/.github/workflows/ci-venue-graphql-proxy-check.yml b/.github/workflows/ci-venue-graphql-proxy-check.yml index 739cc95cc..8928d088a 100644 --- a/.github/workflows/ci-venue-graphql-proxy-check.yml +++ b/.github/workflows/ci-venue-graphql-proxy-check.yml @@ -1,104 +1,42 @@ -name: Venue Graphql Proxy check +name: CI-Venue-Graphql-Proxy on: push: - branches: - - dev - - main + branches: [main] # Only consider those paths to trigger the action paths: - 'proxies/venue-graphql-proxy/**' - '.yarnrc.yml' - 'tsconfig.base.json' - '.prettier*' - - '.github/workflows/**' + - '.github/workflows/ci-venue-graphql-proxy-check.yml' pull_request: - types: - - opened - - synchronize - - reopened + branches: [main] # Only consider those paths to trigger the action paths: - 'proxies/venue-graphql-proxy/**' - '.yarnrc.yml' - 'tsconfig.base.json' - '.prettier*' - - '.github/workflows/**' - -env: - NODE_ENV: development - GRAPHQL_PROXY_DEBUG: debug - GRAPHQL_PROXY_PORT: 4100 - GRAPHQL_PROXY_API_BASE_URL: https://api.hel.fi - GRAPHQL_PROXY_MAP_OPEN_DATA_API_BASE_URL: https://kartta.hel.fi/ws/geoserver/avoindata - GRAPHQL_PROXY_SENTRY_DSN: - GRAPHQL_PROXY_SENTRY_ENVIRONMENT: local + - '.github/workflows/ci-venue-graphql-proxy-check.yml' + workflow_dispatch: jobs: - test: - runs-on: ubuntu-latest - strategy: - matrix: - node-version: [20.x] - steps: - - uses: actions/checkout@v3 - - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - - # Why not using setup-node 2.2+ cache option (yet) ? - # see https://github.com/belgattitude/nextjs-monorepo-example/pull/369 - - name: Get yarn cache directory path - id: yarn-cache-dir-path - run: echo "::set-output name=dir::$(yarn config get cacheFolder)" - - - name: Restore yarn cache - uses: actions/cache@v3 - id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) - with: - path: ${{ steps.yarn-cache-dir-path.outputs.dir }} - key: yarn-cache-folder-${{ hashFiles('**/yarn.lock', '.yarnrc.yml') }} - restore-keys: | - yarn-cache-folder- - - - name: Install dependencies - run: | - yarn install --immutable --inline-builds - env: - HUSKY: 0 - - - name: Typecheck - working-directory: proxies/venue-graphql-proxy - run: | - yarn typecheck - - - name: Linter - working-directory: proxies/venue-graphql-proxy - run: | - yarn lint - - - name: Unit tests - working-directory: proxies/venue-graphql-proxy - run: | - yarn test --coverage - env: - TZ: Europe/Helsinki - NEXT_PUBLIC_FEDERATION_ROUTER_ENDPOINT: ${{env.NEXT_PUBLIC_FEDERATION_ROUTER_ENDPOINT}} - NEXT_PUBLIC_CMS_ORIGIN: ${{env.NEXT_PUBLIC_CMS_ORIGIN}} - # Mock origin - NEXT_PUBLIC_APP_ORIGIN: https://localhost:3001 - - - name: Build web-app - working-directory: proxies/venue-graphql-proxy - run: | - yarn build - - - name: Check ecmascript checks for build files - working-directory: proxies/venue-graphql-proxy - run: | - yarn check-dist - - name: Upload coverage report to Codecov - uses: codecov/codecov-action@v1 + common: + uses: City-of-Helsinki/.github/.github/workflows/ci-node.yml@main + secrets: inherit + with: + node-version: 20 + typecheck: true + app-directory: proxies/venue-graphql-proxy + extra-commands: | + echo "NODE_ENV=production" >> $GITHUB_ENV + echo "GRAPHQL_PROXY_DEBUG=debug" >> $GITHUB_ENV + echo "GRAPHQL_PROXY_PORT=4100" >> $GITHUB_ENV + echo "GRAPHQL_PROXY_SENTRY_ENVIRONMENT=local" >> $GITHUB_ENV + echo "GRAPHQL_PROXY_DISABLE_WINSTON_LOGGING=0" >> $GITHUB_ENV + echo "GRAPHQL_PROXY_INTROSPECTION=1" >> $GITHUB_ENV + # events proxy only + echo "GRAPHQL_PROXY_MAP_OPEN_DATA_API_BASE_URL=https://kartta.hel.fi/ws/geoserver/avoindata" >> $GITHUB_ENV + echo "GRAPHQL_PROXY_API_BASE_URL=https://api.hel.fi/linkedevents/v1/" >> $GITHUB_ENV diff --git a/.github/workflows/codesee-arch-diagram.yml b/.github/workflows/codesee-arch-diagram.yml index 4c27192e8..6f8e6d8ac 100644 --- a/.github/workflows/codesee-arch-diagram.yml +++ b/.github/workflows/codesee-arch-diagram.yml @@ -15,7 +15,7 @@ jobs: steps: - name: checkout id: checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: ${{ github.event.pull_request.head.repo.full_name }} ref: ${{ github.event.pull_request.head.ref }} @@ -36,7 +36,7 @@ jobs: # CodeSee Maps Go support uses a static binary so there's no setup step required. - name: Configure Node.js 16 - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 if: ${{ fromJSON(steps.detect-languages.outputs.languages).javascript }} with: node-version: '14' diff --git a/apps/events-helsinki/sonar-project.properties b/apps/events-helsinki/sonar-project.properties new file mode 100644 index 000000000..dd487f3ed --- /dev/null +++ b/apps/events-helsinki/sonar-project.properties @@ -0,0 +1,5 @@ +sonar.projectKey = City-of-Helsinki_tapahtumat-ui +sonar.organization = city-of-helsinki +sonar.exclusions = **/__tests__/**,**/browser-tests/** +sonar.sources = src +sonar.javascript.lcov.reportPaths = coverage/lcov.info \ No newline at end of file diff --git a/apps/hobbies-helsinki/sonar-project.properties b/apps/hobbies-helsinki/sonar-project.properties new file mode 100644 index 000000000..038bfcc07 --- /dev/null +++ b/apps/hobbies-helsinki/sonar-project.properties @@ -0,0 +1,5 @@ +sonar.projectKey = City-of-Helsinki_harrastukset-ui +sonar.organization = city-of-helsinki +sonar.exclusions = **/__tests__/**,**/browser-tests/** +sonar.sources = src +sonar.javascript.lcov.reportPaths = coverage/lcov.info \ No newline at end of file diff --git a/apps/sports-helsinki/.size-limit.cjs b/apps/sports-helsinki/.size-limit.cjs index e8a7eca3d..50dfad26d 100644 --- a/apps/sports-helsinki/.size-limit.cjs +++ b/apps/sports-helsinki/.size-limit.cjs @@ -44,6 +44,6 @@ module.exports = [ { name: 'CSS', path: ['.next/static/css/**/*.css'], - limit: '40 kB', // NOTE: this is much, should be around 10 kb + limit: '42 kB', // NOTE: this is much, should be around 10 kb }, ]; diff --git a/apps/sports-helsinki/sonar-project.properties b/apps/sports-helsinki/sonar-project.properties new file mode 100644 index 000000000..a8a2f64a0 --- /dev/null +++ b/apps/sports-helsinki/sonar-project.properties @@ -0,0 +1,5 @@ +sonar.projectKey = City-of-Helsinki_liikunta-ui +sonar.organization = city-of-helsinki +sonar.exclusions = **/__tests__/**,**/browser-tests/** +sonar.sources = src +sonar.javascript.lcov.reportPaths = coverage/lcov.info \ No newline at end of file diff --git a/proxies/events-graphql-proxy/sonar-project.properties b/proxies/events-graphql-proxy/sonar-project.properties new file mode 100644 index 000000000..ab83207fb --- /dev/null +++ b/proxies/events-graphql-proxy/sonar-project.properties @@ -0,0 +1,5 @@ +sonar.projectKey = City-of-Helsinki_events-graphql-proxy +sonar.organization = city-of-helsinki +sonar.exclusions = **/__tests__/**,**/browser-tests/** +sonar.sources = src +sonar.javascript.lcov.reportPaths = coverage/lcov.info \ No newline at end of file diff --git a/proxies/venue-graphql-proxy/sonar-project.properties b/proxies/venue-graphql-proxy/sonar-project.properties new file mode 100644 index 000000000..a8ee49958 --- /dev/null +++ b/proxies/venue-graphql-proxy/sonar-project.properties @@ -0,0 +1,5 @@ +sonar.projectKey = City-of-Helsinki_venue-graphql-proxy +sonar.organization = city-of-helsinki +sonar.exclusions = **/__tests__/**,**/browser-tests/** +sonar.sources = src +sonar.javascript.lcov.reportPaths = coverage/lcov.info \ No newline at end of file